-
Posts
3.940 -
Cadastrado em
Tópicos solucionados
-
O post de Simon Viegas em Média errada não encontro erro foi marcado como solução
Pelo contrário... os parênteses do código original não tem utilidade em nível de preferência, ou seja, isso:
É o mesmo que isso:
mpa1 = pro1_1 * 6 + pro2_1 * 4 / 10; mpa2 = pro1_2 * 6 + pro2_2 * 4 / 10;
Em ambos os códigos, primeiro multiplica [1] pro1_1 por 6..., depois multiplica os [2] pro2_1 por 4, após, [3] divide a conta 2 por 10, só depois adiciona a conta [1] a conta [3]. Resumindo: a conta 1 não vai ser dividida por 10.
Já no seu novo código, ficou certo:
mpa1 = ((pro1_1 * 6) + (pro2_1 * 4)) / 10; mpa2 = ((pro1_2 * 6) + (pro2_2 * 4)) / 10;
Que é o mesmo que:
mpa1 = (pro1_1 * 6 + pro2_1 * 4) / 10; mpa2 = (pro1_2 * 6 + pro2_2 * 4) / 10; Veja que os parênteses da multiplicação não são necessário... entretanto, para um melhor efeito didático, deixe da forma que você fez... (visualmente separa as etapas)
Att
-
O post de Simon Viegas em Código para mostrar números pares de 1 até 100 foi marcado como solução
Olá @Vinicius Zancanari.
Sintaxe do for:
//for (int i= 1;i<= 100,i++;) for (i=1; i<=100; i++) {
adicionado 6 minutos depois ADENDO:
Os números pares são em sequência... não precisa ficar verificando. Ex.:
#include <stdio.h> main () { for (int i=1; i<=100/2; i++) { printf ("Numero par: %d\n",i*2); } } ou
#include <stdio.h> main () { for (int i=2; i<=100; i+=2) { printf ("Numero par: %d\n",i); } } Etc
-
O post de Simon Viegas em Como capturar o valor das setas ? foi marcado como solução
Olá @Code guy.
Como o código já está "pronto", vou tentar levantar algumas questões:
1) LEITURA DA TECLA PELO GETCH()
No caso, continua acontecendo o que foi citado:
O programa tem que fazer a leitura duas vezes para poder executar o que se deseja, ou seja, está dando 2 loops para fazer uma coisa só. Pelo testes, o seu código está resultando no que deseja, mas, particularmente, entendo que existe um pequeno erro de lógica aí... pois deveria fazer cada tecla em um único loop.
Para "provar" isso, poderia inserir esse trecho no código:
int cont=0; //usado para contar quantos loops o programa já deu do { system("cls"); cont+=1; printf("Loop %d",cont);
Para corrigir isso, poderia fazer algo como sugerido por @vangodp.
Poderia ficar com algo assim:
seta = getch(); if (seta == 0 || seta == 224) //caso retorne um "pré-código" de setas seta = getch(); //ler novamente (para pegar a segunda parte) Entende? ao pressionar uma seta, o método getch() primeiro retorna um código (224 ou 0)... ao tentar ler novamente uma tecla nova tecla, ele já retorna o código da tecla em si (obs.: a tecla é pressionada uma única vez, mas "consome" duas leituras).
Ai entra questão também das outras possibilidades... como do @cyer ou outras que podem existir...
2) CONDIÇÕES MUTUAMENTE EXCLUDENTES
Tecnicamente, para condições mutuamente excludentes em if, seria "necessário" o uso do else... pois se uma condição for verdadeira, necessariamente jamais poderia ser um outra... logo, não faz sentido verificar. Veja:
Se seta conter 72, JAMAIS, poderá também conter 80 também... logo, precisa do else antes do segundo if. Idem para os if da posicao.
Veja por exemplo o código do @cyer... só vai verificar as próximas, se as anteriores não forem verdadeiras.
3) "ORDEM DOS TRATORES"
Observe que no seu código você está usando ifs antes mesmo ter ter algum valor para seta, ou seja, está comparando algo que não foi inicializado. E não tem motivo para comparar... já que a comparação vem do fato da intenção de querer mudar, ou seja, do usuário ter pressionado uma tecla... se ninguém pressionou nada, por que verificar?
Resumindo: a leitura da seta deve vir antes dos if. Você colocou abaixo.
***
Por ai vai.
Att.
-
O post de Simon Viegas em Função "for" não funciona. foi marcado como solução
Olá @Code guy.
Você inverteu o sinal... seria "<" em detrimento do ">", ou seja, aquela posição no meio do for funciona como um "enquanto a condição resultar em verdadeiro", como o i começa com 0, a condição i>100 já seria falsa, por isso "pulou" o for.
No aguardo.
-
O post de Simon Viegas em VisualG não consigo resolver o exercício foi marcado como solução
Olá @leandromichetti.
Faltou o comando fimAlgoritmo e você colocou uma "/" depois do cust.
Ficaria algo assim:
algoritmo "exercicio11" var cust, perc, total: real inicio Escreval("<><><><><><><><> TABELA DE CUSTOS <><><><><><><><><><><>") Escreva("Qual o preço de custo do produto? R$:") Leia(cust) Escreva("Qual o valor do percentual aplicado? R$:") Leia(perc) Escreval("") {Total <- cust + (cust/*perc/100)} // a fórmula está errada... especialmente na combinação de comandos "/*" Total <- cust + (cust*(perc/100)) Escreval(" O valor de venda do produto é R$:",total) fimAlgoritmo //comando necessário para finalizar o algoritmo OBSERVAÇÃO: A ordem da execução das operações no Visualg é igual na matemática, ou seja, segue o PEMDAS. Nesse sentido, os parênteses poderiam até não ser utilizado, pois primeiro iria multiplicar, depois dividir, depois adicionar... e o resultado seria o mesmo (mas nem sempre dá certo. Considero como coincidência). Entretanto, seguindo um raciocínio lógico, inseri um parêntese para "formalizar" a ordem dos cálculos e garantir que a conta esteja certa... calcula primeiro a porcentagem, depois calcula o valor do acréscimo multiplicando o custo por essa porcentagem, para depois adicionar ao custo e obter o total.
Qualquer dúvida é só postar.
No aguardo.
-
O post de Simon Viegas em Array [Dúvidas] foi marcado como solução
Falta ajustar o 2 bimestre:
//Insira as notas do Segundo Bimestre // for i:=1 to 3 do
Aproveitando, abaixo um sugestão para organização:
for i:=1 to 3 do begin ClrScr; write ('Digite a nota do Segundo Bim de Matemática para ',alunos[i],': '); readln(mat [2,i]); write ('Digite a nota do Segundo Bim de Português para ',alunos[i],': '); readln(port[2,i]); write ('Digite a nota do Segundo Bim de histórias para ',alunos[i],': '); readln(hist[2,i]); write ('Digite a nota do Segundo Bim de Geografia para ',alunos[i],': '); readln(geo [2,i]); write ('Digite a nota do Segundo Bim de Ciências para ',alunos[i],': '); readln(cie [2,i]); end;
***
Faltou identar lá nos if finais..
for i:=1 to 3 do // Este é o Quadro da média begin ClrScr; gotoxy(5, 5); //média de Matemática if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi APROVADO!') else writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!');
***
Sobre usar o TextColor() eu já comentei anteriormente...
***
O if, assim como o else (assim como o For, While etc) só se associa a um comando, caso precise associar a mais de um, precisa usar o begin/end. Aqui aproveito mais uma vez para comentar sobre a importância da identação (estou me baseando pelo que está no fórum)
- A forma como está, veja acima.
- Identando, ficaria assim:
if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi ') //o if termina aqui!!! TextColor(green) writeln('APROVADO!') else //esse else não está vinculado a nada... writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!'); Perceba que só o writeln está dentro do if e como está utilizando else, vai dar erro, pois else tem que vir logo após a estrutura do if, e não de um comando "solto"... como está identado, só olhando para o código dá para ver que está errado... (no mostrado na citação acima não dá, tem que analisar linha por linha ou, como eu faço, idento primeiro)
Em relação a "estrutura" (não corrigir nem testei o código, apenas deixei compilável)
if ((mat[1,i]) + (mat[2,i])) / 2 >= 6 then begin writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,' portanto ele foi '); TextColor(green); writeln('APROVADO!'); end //fim do if else writeln('A média de Matemática do ', alunos[i] ,' foi ', ((mat[1,i] + mat[2,i]) / 2):0:2 ,', portanto ele foi REPROVADO!'); Agora o if em vez ter apenas UM comando, passou a ter UM bloco... o restante é já sabido..
***
No aguardo.
-
O post de Simon Viegas em Duvida sobre Arquivo txt Pascal foi marcado como solução
Olá.
Podemos ajudar... tem pelo menos duas formas: utilizando arquivos de texto, que seria um TXT. Ou utilizando arquivos binários. Cada um tem suas vantagens e desvantagens...
Primeiramente você precisa deixar o seu código basicamente pronto utilizando a memória ram (no modo convencional, sem arquivos)... a depois converte o código para utilizar arquivos...
Por favor, poste o seu código atual e onde tem dúvidas para deixar em funcional... após tentamos passar utilizar arquivos.
No aguardo.
-
O post de Simon Viegas em Faça a tabuada deste número de 1 a 10, alguem me ajuda? foi marcado como solução
Olá.
Você poderia usar uma estrutura de seleção (if), ou seja, só exibe a tabuada se o número for diferente de "0".
PS: se quiser aproveitar, poderia criar um if que verifica se está na faixa de 1 a 10.
-
O post de Simon Viegas em Implementação de Herança foi marcado como solução
Olá.
Creio que usar private ou não é uma questão de padrão de projeto. Se você precisa encapsular, vai usar private mesmo e acessar via getter e setter... senão, usa da forma que ficou acordado.
Eu não lembro como seria, mas acho que pode ser algo como super.getNomeDoAtributo() ou super().getNomeDoAtributo(). Não sei dizer se funciona da um getNomeDoAtributo() direto na subclasse.. Testa ai...
Outra coisa, usar um constrututor ou não, também depende da sua proposta... você pode criar diretamente pelo super mesmo, passando os parâmetros, ou pelos setters... como você já tem todos os dados, seria mais sensato pelo construtor...
No aguardo.
-
O post de Simon Viegas em [Pascalzim/Pzim] Como verificar a existência de um ficheiro? foi marcado como solução
Olá.
Como você já deve saber, o PZim é apenas uma IDE/Compilador que utiliza uma linguagem, no caso Pascal.
Vamos lá. Imagino pelo menos duas possibilidades para verificar se o arquivo já está criado:
utilizando o FileExists(); utilizando o IOResult; (tenta abrir o arquivo, se o IOResult retornar um valor diferente de 0, deu rúim!) Obs. 1: Creio que o FileExists() não funciona no Pascal Zim (a ferramenta tem algumas limitações), mas de qualquer forma vale a pesquisada;
Obs. 2: Cada código retornado pelo IOResult significa alguma coisa. Na intermet deve ter uma tabela... para o seu programa em si, basta saber se foi 0 ou não.
No aguardo.
-
O post de Simon Viegas em Erro com fatorial foi marcado como solução
Olá.
Essa postagem é inicialmente apenas para sugestões de correções de alguns detalhes... ok?
Abaixo seu código até o momento. (juntei o original com correção da sua última postagem)
Vamos lá:
1) Sobre o método ProcessaNumero();
Veja a declaração do método ProcessaNumero().
public double ProcessaNumero(String Mensagem) { Ou seja, ele RETORNA um double. Mas você está usando:
} ProcessaNumero(txt.getText()); //<-- aqui! JOptionPane.showMessageDialog(null, "O fatorial do número " + num + " é: " + fator); } else { Para onde está indo o retorno??? Se você não vai utilizar ele, o método teria que ser void. Entende?
Então, na verdade, acho que o método está no caminho certo, mas o uso que está errado. A ideia do ProcessaNumero é "tentar fazer a conversão, e retornar o valor convertido nela mesma. E caso não consiga, exibir uma mensagem de erro". Mas durante o programa, você está usando um tal de Double.parseDouble(). Ora! Se eu tenho um método que PROCESSA O NÚMERO, por quê eu vou tentar processar eu mesmo? Resumidamente: Use apenas o ProcessaNumero() para converter o número e pronto!
Algo como:
num = ProcessaNumero(txt.getText()); E após isso verifica a sua flag (variável de controle, no caso o processou), entende?
2) Sobre o método Fatorial().
Ué? para que ele foi criado? Experimente apagar o método e compilar para ver o que acontece... (o método não está sendo usado)
Então, ai cai na mesma lógica anterior... o método está mais ou menos já estruturado, falta usar!
Obs.: acho que precisa ajustar ela, pois acredito que não é bom utilizar variável globais em procedimentos, ou seja, talvez seria utilizar variável locais (declaradas dentro do método) e que o valor para cálculo seja repassado por parâmetro...
No aguardo.
-
O post de Simon Viegas em Algoritmo no VisualG que calcula temperatura não funciona os cálculos foi marcado como solução
Olá.
1)
Em relação a seleção, a ideia é a mesma. A diferença é que está utilizando números, em vez de caracteres, entende? Veja que não é preciso declarar os números 1, 2, 3 e 4, pois eles são um "dados", e não uma variável.
Poderia ficar algo mais ou menos assim também:
tempe : literal num, Z, W, X, Y : real e
se (tempe = 'C') então obs.: A letra "C" tem que está em maiúsculo para esse caso.
2)
Faltou inserir o SENÃO, já que se trata de proposições mutuamente exclusivas entre si, o que pode ser considerado um erro de lógica. (oras! se foi escolhido o 1, por quê está verificando o 2, 3 e 4??)
Se achar que já está bom desta forma, avisa também que fechamos o tópico.
No aguardo.
-
O post de Simon Viegas em Desenvolva um algoritmo que receba os dias da semana e mostre suas tarefas nesse dia . galera preciso disso em pascal ,quem puder ajudar agradeço. foi marcado como solução
Olá Victor H Alves.
A ideia é que você tente fazer algo e tire dúvidas aqui no fórum. Pele menos monte estrutura base do programa e indique onde está com dúvidas.
Então.. pelo que eu entendi, precisa fazer uma seleção, ou seja, um if, e exibir a resposta correspondente.
se DOMINGO então escreva "frase de domingo"
senão se SEGUNDA então escreva "frase de segunda"
senão se TERÇA então escreva "frase de terça"
etc
No aguardo.
-
O post de Simon Viegas em Ajuda Exercício Pascalzim foi marcado como solução
Ok.
Obrigado pelo feedback.
Qualquer coisa é só postar...
Abraços
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