Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. Olá; Essa assinatura não está válida. A definição do parâmetro está incorreta e dentro da função não está usando num. Outra coisa, se vai permitir reais, terá que muda o tipo de inteiro para real. Não pôde porquê? Por favor, poste seu código completo para analisarmos. No aguardo.
  2. Olá. Seja bem vindo ao Fórum do Clube do Hardware. O problema está no ClrSlr fora do lugar!!! Vou tentar explicar o que o ocorreu e como você poderia identificar onde está o problema. Vamos lá: Na verdade o erro em si não é no else (supostamente), mas na falta de ";" depois do end. Compilei seu código aqui e deu a seguinte mensagem: _FCdH.PAS(38,2) Fatal: Syntax error, ";" expected but "ELSE" found Ou seja, acusa que ficou faltando um ";" depois do end. Entende inglês ou inglês instrumental? caso não, bota no Google Translator e aos poucos vai se acostumando. O erro está dizendo que "esperada um ";", mas encontrou um ELSE". Pois, quando um comando que precisa de ";" não tem esse ";" acusa essa mensagem. Faça um teste tirando um ";" qualquer. A palavra "else" está no erro apenas porque esse foi o próximo comando (ou não. Vide Adendo mais a baixo)... experimente colocar outro comando qualquer, por exemplo um writeln (daria "Fatal: Syntax error, ";" expected but "identifier WRITELN" found"). Entende? O Compilador precisa de ";", mas encontrou outra coisa. O erro está sugerindo isso. Ah! Mas como assim? antes do ELSE do if não tem ";"! Certo? Certo! Entretanto só existe else se tive um if (ou um case) para ele se associar, ou seja, mesmo que se fosse colocado um ";" ali antes do end, como sugere a mensagem, continuaria a dar erro... pois esse else não está vinculado a nada. Veja: Perceba que existe um comando, o ClrScr, entre o if e o begin que supostamente seria desse if. Dessa forma, o if ficou apenas para o ClrScr, e o begin/end ficou "solto" (sem vínculo com o if). Logo, após o end de fato precisaria de um ";" e aquele else não poderia está ali. RESUMINDO: Para corrigir, apenas tire o ClrScr dali ou o reposicione... para depois do begin ou antes do if ou onde quiser.. O if só se importa com o que vem depois do then. (ou a um comando, como foi o caso, ou a um bloco de comandos, como você quer). Adendo: uma curiosidade... Coincidentemente quando um else não tem um vínculo associado, apresenta a mesma mensagem de erro: "Fatal: Syntax error, ";" expected but "ELSE" found". Por exemplo: Begin writeln('========= EXEMPLO DE PROGRAMA =========='); writeln('PROGRAM MADE BY: JÃO'); else writeln('Para usar o Programa, basta digitar a opcao de calculo.'); writeln('[ 1 ] Adicao'); Percebe que inseri um else perdido ali... Vai dar o mesmo erro (vá entender!)... mesmo existindo um ";" depois do writeln() ou não, ou seja, o erro não será específico, como "esse else não tem vínculo" ou "não encontrado if ao qual o else deveria está querendo se referir"... Teria que interpretar o contexto. Esse trecho acima dará o mesmo erro que está dando no seu código. Mas, com sugerido, acho que primeiramente se refere ao não ter ";" no seu, ou seja, ao ver o erro, você deveria inserir o ";", ai veria que daria o mesmo erro, daí perceberia que tem algo errado e acabaria posteriormente descobrindo que essa confusão toda só existiu porque tinha um comando entre o if e o begin. No aguardo. adicionado 10 minutos depois UPDATE: Adendo 2: Mantenha seu código sempre indentado. Por exemplo: Program Calculadora; //NomeDoPrograma uses CRT; var //Variáveis opcao:integer; opcao2:integer; resposta1:real; resposta2:real; num1,num2:real; resposta:real; termo1:real; termo2:real; Begin writeln('========= EXEMPLO DE PROGRAMA =========='); writeln('PROGRAM MADE BY: JÃO'); writeln('Para usar o Programa, basta digitar a opcao de calculo.'); writeln('[ 1 ] Adicao'); writeln('[ 2 ] Subtracao'); writeln('[ 3 ] Multiplicacao'); writeln('[ 4 ] Divisao'); writeln('[ 5 ] Para mais informações do programa.'); writeln('E ai?'); read(opcao); if opcao=1 then //Adicao clrscr; Begin writeln('Digite o primeiro numero da adicao:'); read(num1); writeln('Digite o segundo numero da adicao:'); read(num2); resposta:=(num1+num2); writeln('Resposta: ',' ', round(resposta)); end else if opcao=2 then //Subtracao begin writeln('Digite o primeiro número da subtração:'); read(num1); writeln('Digite o segundo número da subtração:'); read(num2); resposta:=(num1-num2); writeln('Resposta:',' ',round(resposta)); end End. Perceba que só por está indentado, fica visível que ali no if da "adição" tem um "ClrScr" fora do lugar OU que esse begin/end depois do ClrScr não deveria existir, pois antes dele não tem nenhum comando que precisa de begin/end... Mas como tem um Else mais baixo, veria logo que o problema era de fato no "ClrSrc". Obs.: esse penúltimo end também precisa de ";". (mesmo que vá funcionar sem devido ao outro end que vem depois) Qualquer dúvida é só pergunta. Abraços
  3. Como assim "gambiarra"? Tem alguma parte específica que está com dúvidas? Obs.: continuo achando que precisa imprimir o vetor na tela, para ter alguma "prova" que está preenchendo corretamente... a não se que tenha outra mecanismo para verificar.
  4. Olá. Tudo certinho. Obs.: para testar os resultados, coloque para imprimir o vetor, ex.: Ou assim: Ou algo do tipo. No aguardo.
  5. Olá @gilmar.vicente. Seja bem vindo ao Fórum do Clube do Hardware. Então, a sugestão é tentar fazer por partes. A primeira opção seria "Adicionar". Só depois de pronta que tenta fazer outras partes.... para testar o Adicionar, implementa também o "Listar". Todo o restante do código depende do "Adicionar", logo, ele tem que ficar pronto primeiro. Vamos lá: Primeiramente é necessário definir como o "Adicionar" vai funcionar. No seu código você deixou a assinatura assim: O que seriam esses dois parâmetros? pelo que eu entendi a variável i seria o vetor onde vai ser adicionado os números e a variável cont seria o "contador de números já cadastrados", correto? obs.: por quê "i" ? recomendo algo mais sugestivo, como vet. Então, o problema é que dentro do método, você está zerando o contador. Obs.2: segue outras sugestões: - Na verificação se está cheio ou não, use "<=" em vez de só "=". - Deixe o "atualizador" do cont (cont:=cont+1) dentro do método, ou seja, o próprio método pode controlar se vai atualizar ou não. Daí, dá uma revisada no Listar e ver se está "adicionando" corretamente ou não... como dito, o restante do código só vai funcionar se o Adicionar estiver OK. No aguardo.
  6. Olá @Túlio Estrela Marques. Pelo que eu entendi, na parte técnica ficou tudo certinho... só fiquei em dúvida nessa parte: Que "cada dado"? Por que está utilizando "5*(i+1)", ou seja, algo como "a posição do vetor acrescido em 1, vezes 5"? De onde tirou esse critério? No aguardo.
  7. Olá; Muito bom! Show de bola! Obs.: É recomendado manter o código indentado. No Visugal, basta pressionar "Ctrl+G". Outra sugestão é criar um vetor para preencher os vetores, a ideia é deixar o código mais organizado... - o vetor de vogal pode ser preenchido diretamente; - o vetor de consoantes é preenchido com tudo que não é vogal da sequência, ou seja, se não é "a", "e", "i", "o" ou "u"; - em vez de ir de 1 a 26, usa a faixa das letras diretamente no para; Abaixo segue um exemplo código. procedimento preencherVetores() var codANSII :inteiro i :inteiro inicio //vetor de vogais preenchido diretamente vogal[1] <- "a" vogal[2] <- "e" vogal[3] <- "i" vogal[4] <- "o" vogal[5] <- "u" //vetor de consoantes preenchido com os "não vogais" para codANSII de 97 ate 122 faca escolha codANSII caso 97, 101, 105, 111, 117 //código das vogais escreva("") //não faz nada outrocaso //o que não é vogal, será consoante i:=i+1 consoante[i]:=carac(codANSII) fimEscolha fimPara fimProcedimento Como é uma única variável com vários possível valores é possível utilizar Escolha/Caso, fiz com ele para demonstrar. Mas caso queira aproveitar do procedimento, poderia tentar fazer com se também. Observe que dentro dele declarei o i para usar no para, pois dessa forma a procedimento fica independente das variáveis globais, ou seja, só receberia o vetores por parâmetro... (como não dá para enviar por parâmetro, usa diretamente a variável global. Isso é uma limitação do Visualg). Segue abaixo um código completo para poder servi de base: Algoritmo "VOGAL_CONSOANTE" Var vogal :vetor [1..5] de caracter consoante:vetor [1..21] de caracter {i,j,k :inteiro} //não utilizados PODE APAGAR letra :caracter procedimento preencherVetores() var codANSII :inteiro posicao :inteiro inicio //vetor de vogais preenchido diretamente vogal[1] <- "a" vogal[2] <- "e" vogal[3] <- "i" vogal[4] <- "o" vogal[5] <- "u" //vetor de consoantes preenchido com os "não vogais" para codANSII de 97 ate 122 faca escolha codANSII caso 97, 101, 105, 111, 117 //código das vogais escreva("") //não faz nada outrocaso //o que não é vogal, será consoante posicao:=posicao+1 consoante[posicao]:=carac(codANSII) fimEscolha fimPara fimProcedimento funcao fvogal (letra:caractere):logico var posicao:inteiro existe:logico inicio existe <- falso para posicao de 1 ate 5 faca se (letra = vogal[posicao]) ENTÃO existe <- verdadeiro interrompa //se já foi encontrado, logo não precisa continuar verificando fimse fimpara retorne existe fimfuncao funcao fconsoante (letra:caractere):logico var posicao:inteiro existe:logico inicio existe <- falso para posicao de 1 ate 21 faca se (letra = consoante[posicao]) ENTÃO existe <- verdadeiro interrompa //se já foi encontrado, logo não precisa continuar verificando fimse fimpara retorne existe fimfuncao Inicio preencherVetores() escreval("Digite uma letra:") leia(letra) se (fvogal(letra) = verdadeiro) ENTÃO escreva("É uma vogal.") senao se(fconsoante(letra) = verdadeiro) ENTÃO escreva("É uma consoante.") senao escreva("Não é um caractere.") fimse fimse Fimalgoritmo Nesse código, já que nos outros procedimentos utilizou a nomenclatura posicao, fiz o mesmo no preencherVetores(). Quando mais "coerentes" as nomenclaturas, melhor... Abraços
  8. Olá. Em relação ao qual código? o antigo ou atual? Normal. Pois está verificando apenas se a variável está vazia. Espaço é um caractere como qualquer outro. Daí, você pode definir as regras para um nome ser válido, ex.: - Apenas conter letras e espaços (vogais e consoantes) ; - Não começar com espaço e nem terminar com espaço; - Não possuir mais de um espaço consecutivo; etc. Tem que aplicar as regras de acordo com as definições que escolher. No aguardo.
  9. Só complementando: - No código está chamado de vogais o que está usando como "quantidade de consoantes". É um contrassenso. Sugeriria algo como qtdConsoantes, ou consoantes mesmo. - A parte da não dicotomia ainda está em jogo, ex.: A resposta tinha que ser 2, correto?. Ai também entra a questão das vogais acentuadas, mas principalmente que está associando que uma consoante é o mesmo que uma "não vogal", o que está tecnicamente errado. Os caracteres NÃO são compostos só de vogais e consoantes! Esses outros tipos.
  10. Olá. Alguns pontos: - Deixe o aleatorio antes do Repita, pois dentro fica como se tivesse reconfigurando o aleatorio várias vezes. aleatorio on aleatorio 3,25 Repita EscrevaL("Digite a quantidade de números para comparar [Máx: 20]: ") Outro ponto é que pode deixar um aleatório para quantidade e outro para os dados... por exemplo, -10,40 para esse primeiro e 0,99 para os dados. Ou pode tirar o aleatorio da quantidade e deixar que o usuário digite... e gerando o resto. Ex.: procedimento leiavetorA() var i : inteiro inicio {aleatorio -10,40} //deixando ler do usuário Repita EscrevaL("Digite a quantidade de números para comparar [Máx: 20]: ") Leia(n) Se (n>=20) ou (n<=1) ENTÃO EscrevaL("Opção Inválida!") Fimse Ate (n>=1) e (n<=20) aleatorio 0,99 para i de 1 ate n faca escreva("Digite um valor (", i , " de ", n:1, "): ") leia(vetorA[i]) fimpara aleatorio off Adendo.: observe que o "on" não é necessário quando define uma faixa. - No número antes do de, também ficou um espaço... ai, poderia tirar o espaço do texto e usar i:2. *** No aguardo.
  11. Olá. 1) SEPARAÇÃO DAS SENTENÇAS Esse erro o próprio compilador aponta a linha. Cada sentença é separados por (). Por Se nao (maiusc(GAB)>= "A") e (maiusc(GAB)<="E") ENTÃO 2) ERRO SINTAXE Aqui, o bagulho fica mais louco... tava dando erro na linha procedimento MostraMediaDaTurma(), ai fiz uns testes apertando F8 para ver o comportamento linha a linha (vai marcando com uma linha azul)... e percebi que após terminar o CadastrarGabarito(), o código continuou para função abaixo, em vez de voltar para o programa principal.... Daí consegui ver que usou fimFuncao em detrimento do fimprocedimento para alguns procedimento(s). Pronto. Ai deu outro erro na função AtribuirNota()... nela você não determinou qual o retorno, ou seja, como provavelmente não era para ter retorno mesmo, basta mudar para procedimento (assim como também usar fimProcedimento). *** Parece que voltou a rodar sem erros.. mas não fiz muitos testes e nem analisei se está se comportando como deveria. No aguardo.
  12. Olá. Por uma questão de semântica, quem vai "percorrer" o vetor é a estrutura do laço de repetição... a variável é usada no processo. Ex.: funcao fvogal (letra:caracter): logico var existe, posicao: inteiro inicio existe <- 0 //inicializa a flag como "a letra não existe no vetor" para posicao de 1 ate 5 faca //para cada posição do vetor se (letra = vogal[posicao]) ENTÃO //se a letra informada é iagual a posição atual existe <- 1 //muda para "a letra existe no vetor" fimse fimPara se (existe=0) ENTÃO //se ficou com "a letra não existe no vetor" retorne FALSO //retorno FALSO ("não é vogal") senao //caso contrário retorne VERDADEIRO //retorno VERDADEIRO, ("é vogal") fimSe fimfuncao Para simplificar, como só existe duas possibilidade (0 e 1), poderia usar a flag como do tipo lógico. funcao fvogal (letra:caracter): logico var existe : logico posicao: inteiro inicio existe <- FALSO //inicializa a flag como "a letra não existe no vetor" para posicao de 1 ate 5 faca //para cada posição do vetor se (letra = vogal[posicao]) ENTÃO //se a letra informada é iagual a posição atual existe <- VERDADEIRO //muda para "a letra existe no vetor" fimse fimPara se (existe=FALSO) ENTÃO //se ficou com "a letra não existe no vetor" retorne FALSO //retorno FALSO ("não é vogal") senao //caso contrário retorne VERDADEIRO //retorno VERDADEIRO, ("é vogal") fimSe fimfuncao Como a verificação no se é igual ao retorno, dá para usar direto: funcao fvogal (letra:caracter): logico var existe : logico posicao: inteiro inicio existe <- FALSO //inicializa a flag como "a letra não existe no vetor" para posicao de 1 ate 5 faca //para cada posição do vetor se (letra = vogal[posicao]) ENTÃO //se a letra informada é iagual a posição atual existe <- VERDADEIRO //muda para "a letra existe no vetor" fimse fimPara retorne existe fimfuncao Alguma dúvida ate aqui? algum trecho? alguma outra dúvida, como "por que a letra eu recebo por parâmetro, mas o vetor eu uso direto"? Para este último, tem pelo menos 2 pontos: - não é possível passar vetor por parâmetro no Visualg (pelo menos eu desconheço), se fosse, seria interessante passar também. - e poderia sem problemas usar a variável c diretamente. Só deixar a função sem o parâmetro e trocar onde tem letra por c. Pronto. Daí, cria a função para verificar se é constante (idêntico a vogal, só muda o vetor). E faz a parte final: Basta seguir: *no caso com a nomenclatura que você escolher para as funções. No aguardo.
  13. Olá @saulogoiana. O quê que não está correto? em qual parte está com dúvidas? Você precisa entender o que você quer fazer e o quê não está conseguindo implementar... daí tenta corrigir. Caso não consiga, poste aqui qual parte está com dúvida. Em relação ao código, veja, são duas funções distintas. Uma para verificar se é vogal; outra para verificar se é consoante. Pelo menos foi assim que entendi. Por enquanto só se preocupe com as Vogais.. esqueça das consoantes. A próxima etapa é criar uma função que apenas para retorne VERDADEIRO caso o caractere seja vogal, OU retorne FALSO caso o caractere não seja vogal. Só depois faz o da consoantes (que é exatamente igual ao da Vogal, só muda o vetor). NÃO TENTE FAZER OS DOIS JUNTOS!!! Faz um... copia o código e edita para o outro. Tente achar uma forma de como verificar se um caractere é vogal ou não! E só!. É necessário abstrair o contexto geral... Abaixo, tentei dar uma reorganizada no seu código: algoritmo "a" Var vogal :vetor [1..5] de caracter //vetor de vogais consoante:vetor [1..21] de caracter //vetor de consoantes i,j,k:inteiro //variáveis auxiliares {l:caracter} //não é uma "letra", mas sim um "caractere" (APAGUE ESSA LINHA) c:caracter //caracetere lido do usuário //FUNÇÃO QUE RECEBE UM CARACTERE E RETORNA VERDADEIRO SE FOR ou FALSO SE NÃO FOR {funcao fvogal (x:inteiro): logico} //a função recebe uma tipo caracte, não um número (APAGUE ESSA LINHA) funcao fvogal (c:caracter): logico var i:inteiro inicio //FALTA IMPLEMENTAR AQUI fimfuncao Inicio //PREENCHE OS VETORES DE VOGAIS E CONSOANTES j <- 0 //inicializa o contador de consoantes k <- 97 //código da letra "a" na tabela ASCII para i de 1 ate 26 faca //para as 26 letra do alfateto {asc(k)} //esse comando não está servindo para nada (APAGUE ESSA LINHA) se (k = 97) ENTÃO //se letra "a" vogal[1] <- carac(k) senao se (k = 101) ENTÃO //se letra "e" vogal[2] <- carac(k) senao se (k = 105) ENTÃO //se letra "i" vogal[3] <- carac(k) senao se (k = 111) ENTÃO //se letra "o" vogal[4] <- carac(k) senao se (k = 117) ENTÃO //se letra "u" vogal[5] <- carac(k) senao //senão é consoante j <- j + 1 //atualiza contador de consoantes consoante[j] <- carac(k) fimse fimse fimse fimse fimse k <- k+1 //atualiza o contador de letras fimpara //LEITURA DE CARACTERE DO USUÁRIO {escreva("Digite uma letra:")} //não é uma letra..... (APAGUE ESSA LINHA) escreva("Digite um caractere:") leia(c) //ANALISE E RESPOSTA PARA O USUÁRIO escreval("É vogal?",fvogal(c)) Fimalgoritmo A parte que você precisa fazer está comentada aqui: No aguardo.
  14. @jpaulofsa, você apenas postou um código... sem algum comentário. Do quê se trata? está pronto ou tem alguma dúvidas?
  15. Olá a todos. Não manjo muito, mas vou tentar repassar o que estou supondo: @vitor de jesus, na verdade nenhum dos valores estão sendo deletados, pois o delete[] se refere ao alocamento de memória, e não ao seu conteúdo que está lá. São coisas distintas.. Como você mesmo sugere no título, apenas está "desalocando", ou seja, é o oposto do new()... simplesmente vai deixar aquele espaço disponível para acesso. Ficará liberado. Faria mais sentido chamar o comando de Deallocate[]. Entende? Por quê só alguns valores ficam corrompidos (ou que os outros não são) eu não dizer... apesar de curioso, acho que não é tão importante, apenas que após "deletar" você não poderia mais tentar imprimir (usar aquela variável de qualquer forma), pois ele foi "desalocado"... é como tentar usar um ponteiro que ainda não sofreu um new(), a diferença, suponho eu, é que aquela região ("lixo") de memória já está com a mesma estrutura de quando foi alocada (não deu tempo de ser utilizada por outro recurso do programa ou Sistema Operacional), daí ainda consegue exibir dados sem "dar pau". Se você quer "apagar o conteúdo" que está na variável, ou seja, que na verdade estaria querendo "sobrescrever" por outro valor, ai você poderia usar o que @devair1010 sugere: obs.: aqui está dando um "alerta": Ou seja, o "mais correto" seria simplesmente fazer: for(int i=0;i<10;i++){ Parray[i]=0; } Veja, na computação não existe "deletação", apenas "liberação". Quando você apaga um arquivo do computador, ele não é "excluído", é apenas "marcado como excluído", daí o SO finge que ele não existe. A melhor prova disso é quando você copia uma arquivo grande, como uma ISO de um SO ou um filme em Full HD... perceba que demora certo tempo, mas para apagar é praticamente instantâneo... um "shift+del" é como um "Delete[]". Tipo, se você apagar um filme com ele aberto, o "player" poder continuar rodando ele normalmente. Pois os dados estão lá ainda! Nesse mesmo conceito... existem ferramentas que fazem (tentam fazer) "exclusão definitiva". Nela, além de apagar a referência, é escrito bit a bit algo por cima, como um monte de 0. "Na natureza nada se cria, nada se perde, tudo se transforma." No aguardo.
  16. Está em dúvidas em qual parte? É na parte de retornar o valor ou de encontrar uma resposta para retornar o valor correto? Poste o código e onde está com dúvidas. Em relação à verificação, você precisa encontrar uma forma de identificar que a letra informada está contida no vetor ou não. Uma forma seria utilizando uma flag. Por exemplo, cria-se a variável EXISTE, do tipo inteiro. Inicializa ela com "0", ou seja, a "bandeira" indicando que "a letra que está sendo verificada não 'existe' no vetor". Daí, numa estrutura de repetição, você compara cada posição do vetor com a letra, se a posição for igual a letra, então muda a flag para "1", ou seja, a variável EXISTE mudará de valor... indicando que "a letra que está sendo verificada 'existe' no vetor". Ao final do processo, verifica o valor que está no EXISTE. Se existe for igual a "0", retorna falso ("não é vogal", pois a letra que foi informada não corresponde a nenhuma da vogais que tem no vetor, já que o EXISTE não mudou para 1). Senão, retorna verdadeiro. Entendeu? a flag inicializa com uma "status", se durante o processo de verificação for identificado que é outro status, a flag terá sido alterada. Abaixo um exemplo de função utilizando retorno lógico: algoritmo "Retorna se um número é positivo ou não" funcao ehPositivo(numero:inteiro):logico inicio se (numero>=0) ENTÃO retorne VERDADEIRO senao se (numero<0) ENTÃO retorne FALSO fimSe fimSe fimFuncao var x:inteiro Inicio escreval("Digite um número inteiro") leia(x) se ehPositivo(x)=VERDADEIRO ENTÃO escreval(X," é positivo") senao escreval(X," é negativo") fimSe fimAlgoritmo Na sua função, precisa verificar se a letra existe no vetor ou não. Na parte do código, vai usar essa resposta.
  17. Olá @Felipe_Sant. Seja bem vindo ao Fórum do Clube do Hardware. Não sei se existe um processo mais específico, mas imaginei tendo uma LISTA com as 30 questões (se for usar questão iguais e só mudar a ordem, ou com as N questões que desejar), daí ia sorteando as 30 posições para servi como a ordem que vai aparecer na prova. Só verificar uma forma de sortear sem repetir números. Para exemplificar, tomemos como exemplo que são 5 questões no total. Ai um sorteio deu "3, 5, 2, 1, 4".. ai a prova ficar na ordem da questões.
  18. Olá @jpaulofsa. No While tente usar como parâmetro o tamanho da string , algo como length() ou algo do tipo (ir de 1 até o valor da quantidade de letras que a string tem). A depender mude para for, já que a quantidade é predeterminada e não existe outro parâmetro de parada; Nesse caso você é considerando como uma espécie de dicotomia, ou seja, como se "tudo que não é vogal, é necessariamente uma consoante". E isso não é verdade. Veja que existe ".", ",", "@", "!" entre outros caracteres especiais... logo, apesar de ser uma boa sacada, não é totalmente preciso. No aguardo.
  19. Olá. Ficou bacana. Faltou exibir na tela os vetores... mas nem precisa, olhando pelo painel da "Área das variáveis de memória.." (lado direito do Visualg ) já dá para verificar. Caso queira minúsculo, basta usar a faixa onde começa eles.. acho que a partir do 95. Mas não faz diferença, pois para comparar a sugestão que compare sempre com as maiúsculas. Pode usar a função Maiusc(). (obs.: acho que no Visualg nem precisa, ele já compara com maiúscula por padrão, ou seja, "A" e "a" são tecnicamente diferentes, mas mas o desenvolvedor já implementou para comparar já transformando o minúsculo em maiúsculo) obs.: a instrução: não está sendo utilizada... simplesmente apague do código. Pronto... a base já tem. Agora vai para próxima etapa: Pelo que eu entendi, cada uma das funções irá receber um caractere e retornar um logico. Tente fazer apenas um de cada vez. Por exemplo, chamar de EhVogal(), nela você precisa de alguma forma verifica se a letra que foi passada por parâmetro é igual a alguma das letras que estão no vetor vogal, se sim, retorna Verdadeiro, senão, retorna falso. Exatamente o mesmo será feito para as consoantes. Caso tenha dúvidas sobre funcao em Visualg, dê uma pesquisa e olhe alguns exemplos... sugiro dar uma olhada nas postagens anteriores do Fórum. Abaixo segue um exemplo aleatório: algoritmo "Retorna o sinal do número (positivo, negativo ou neutro)" funcao sinalDoNumero(numero:inteiro):caracter inicio se (numero>0) então retorne "Estritamente Positivo" senao se (numero<0) então retorne "Negativo" senao retorne "Neutro" fimSe fimSe fimFuncao var x:inteiro Inicio x:=14 escreval(X," é ",sinalDoNumero(x)) x:=-7 escreval(X," é ",sinalDoNumero(x)) x:=0 escreval(X," é ",sinalDoNumero(x)) fimAlgoritmo Então, no seu código, precisará retornar "Verdadeiro" ou "Falso", a depender se é vogal ou não. Esse valor que será retornado será utilizado na parte final. Pelo que entendi, aqui, quando a parte de cada função já estiver funcionando, você vai verificar se "é vogal" (se EhVogal() retronou verdadeiro), senão se "é consoante" (se EhConsoante() retornou verdadeiro), senão "não é uma letra". Independente de qualquer coisa, primeiro tente fazer as funções... depois parte para essa etapa. No aguardo.
  20. Olá @saulogoiana. Seja bem vindo ao Fórum do Clube do Hardware. 1) PREENCHIMENTO DOS VETORES Primeiramente foque apenas nesse requisito. O objetivo é ter 2 vetores com as características supracitadas. Após, exiba esse vetor na tela. Essa é a base do programa. Para te ajudar, tem pelo menos duas formas: - "Por preenchimento na tora": para cada posição atribui seu respectivo valor. Ex.: vogal[1]:="a" vogal[2]:="e" vogal[3]:="i" etc O mesmo para as consoantes. - "Por preenchimento automatizado": utilizar das características do ASCII. Nela verás que as letras estão em sequência, o que pode ser aproveitado para preencher o vetor com auxílio de laços de repetições. Veja, dentro da faixa de letras (de "a" a "z"), basta inserir no vetor consoante tudo aquilo que não é vogal. Comandos base: Asc (s : caracter): Retorna um inteiro com o código ASCII do primeiro caracter da expressão. Carac (c : inteiro) : Retorna o caracter cujo código ASCII corresponde à expressão. obs.: sugiro fazer inicialmente pelo primeiro método. Mais pra frente tenta fazer dessa ou de outra forma. 2) RESTANTE DO CÓDIGO Esqueça que isso existe por enquanto... foque apenas no item 1. Como se o programa fosse só aquela parte. Sem ela está funcionando, nada adianta o restante. *** Posta o código aqui para analisarmos e/ou onde está com dúvidas. Lembrando: seu objetivo é apenas criar um vetor de vogais, outro de consoantes e imprimir eles na tela. No aguardo.
  21. Olá. Só complementando: @devair1010, ai seriam 2 trabalhos... mais simples deixar a função retornando real. Ex.: funcao CalcularPontos(gabarito,resposta:caractere):real
  22. Olá @viniciusv21. Só uns adendos: - Você limitou o programa para até 20 números, mas não está tratando da exceção, ou seja, se digitar um número inválido, por exemplo 25, o programa vai travar. Para "resolver" isso você pode usar um laço de repetição até que digite um número válido (1 a 20). - a nomenclatura de uma função está como "dizer_maior_numero", mas elas não está "dizendo", está mais para "retornando" . - acharia mais interessante se declarasse as variáveis i e n como locais, assim como foi feito com a variável a. Obs.: nem tem problema em usar a mesma nomenclatura de variáveis em duas funções/procedimentos diferentes. - não é necessário espaços entre as vírgulas, mas vai do gosto. (não altera em nada o funcionamento do código) - aqui, no Visualg 3.0.6.5, os números depois do "de" (no "i de n") ficam com um espaço a mais (considero como um bug do Visualg). Para corrigir, ou tira o espaço depois do "de" ou deixa com espaço e usa uma formatação no n, ex.: "n:1". - Para efetuar testes, é possível utilizar o "ALEATORIO" ou Randi(). Com ele, os números são "digitados" automaticamente. Se tiver interesse, dê uma pesquisada sobre os comandos. O ALEATORIO é mais prático para implementar.. é possível determinar uma faixa de números também, por exemplo de 1 a 99. No aguardo.
  23. O raciocínio está corretíssimo, apenas estava "errando" ou "dando a entender que está errando" na nomenclatura da operação. Como você sugere, você "já entendia" que não era "tornar negativo", mas ao se referi que era, acaba cometendo essa impressão. Quis reforçar pois é um detalhe importante e interessante. Adendo: talvez o termo "negativo" também se refira a "oposto", ou seja, "o negativo de -7 é +7". Mas... ao falar em "aqui transforma o b em negativo", dá a impressão que esse coeficiente ficará negativo em si (um valor menor que zero).
  24. Olá. Para reforçar: Então precisa corrigir o código: Essa etapa do "b negativo" não é necessária (lembrando que seria "oposto" ou "simétrico". Falar como "negativo" é literalmente um erro). Você pode simplesmente usar algo como: x1:=(-b + sqrt(delta))/(2*a) x2:=(-b - sqrt(delta))/(2*a) Idem para o tal de "x negativo" e "x positivo". Você precisará usar outra terminologia, pois essa relação não existe... e lembrar que precisa tratar dos casos especiais. (nem sempre tem duas raízes reais e distintas!), ou seja, essas resposta "Duas raízes foram achadas: " depende do valor da discriminante. Se não me engano existem 4 possibilidades de resposta! No aguardo.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!