Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. Olá @danilo001. Então, a primeira coisa que precisamos fazer é entender o problema... o enunciado já dá uma boa dica: Pelo que eu entendi, você precisa fazer a adição 1+2+3+4+5+6+7+...+98+99+100. Correto? (só precisa ver se vai incluir o 1 e 100 ou não! Acho que vai) Então, o que é isso? Se não me engano, matematicamente seria uma soma de uma PA (Progressão Aritmética). Tendo (supostamente) entendido o problema, agora só partir para uma possível solução. Por um momento esquecermos que deverá ser um algoritmo computacional, como você faria essa conta no papel ou na calculadora? Tente ver os passos que você seguiu ou seguiria e traduza para a linguagem de programação desejada... Obs.: veja que a faixa de valores já é dada...: "De 1 a 100"... não há necessidade de ler nada do usuário... só calcular e pronto. No aguardo.
  2. Olá @carssio. Favor editar sua postagem e inserir o código dentro da tag CODE. Em caso de dúvidas, favor acessar tópico abaixo:
  3. Olá @Tuufee. 1) SE ou SE..SANÃO Nesse trecho abaixo também cabe um senão, pois por si só o "sex=1" é excludente em relação a "sex=2" (obs.: nas condições tem um E, logo são necessariamente dependentes dos sex). Se entrar no primeiro se, não entrará no segundo... Se (pecas >= 36) e (Sex = 1) então MC <- MC+1 fimse Se (pecas <= 30) e (sex = 2) então FA <- FA+1 fimse 2) PADRONIZAÇÃO DE ALINHAMENTO Nesse trecho observam-se que o alinhamento de um texto não está correspondendo ao do outro... a texto em si também está diferente... um em ":" o outro não. Se (sex = 1) ENTÃO Escreval("O sexo do operário é : Masculino ") senao Se (sex = 2) ENTÃO escreval("O sexo do operário é Feminino ") fimse fimse Poderia utilizar o laço de repetição para "traduzir" apenas a variável, ou seja, utilizando uma outra variável que conterá o texto ou "masculino" ou "feminino". Inicializaria essa variável com algo genérico, como "<não cadastrado>"... o se alterará para um dos dois textos de acordo com a código do sexo.. ai usa essa variável no texto após o se..senao...se. (ou vai aparecer o texto genérico ou vai aparecer o sexo por extenso) 3) QUEBRA DE ESTRUTURA Aqui algo que já queria comentar antes, mas deixei para depois... se (matri = 0) ENTÃO interrompa No momento não sei explicar (nem provar) o que eu quero dizer, mas essa estrutura de "forçar o interrompimento do laço" deve ser evitada, ou seja, não é considerado um "boa prática de programação"... A recomendação seria utilizar um se para justamente fazer continuar (em vez de "forçar interromper"). Algo como "se matri<>0 então". Percebe a diferença? obs.: caso for alterar, para reidentar, basta selecionar o texto e pressionar "tab".. daí toda o texto selecionado vai uma casa pra frente. Se quiser fazer recuar, pressiona "shift+tab". 4) REANALISE DE ESTRUTURAS DE SELEÇÃO Não consegui entender a parte da verificação, antes de exibir os dados, entre maiorsalario e menorsalario. Se (maiorsalario <> menorsalario) ENTÃO (e as outras estruturas relacionadas....) Então, só vão ser iguais em duas situações: ou só existe um; ou todos os salários finais são iguais. Logo, ou ajusta o texto para quando for igual, ou simplesmente não verifica isso. Em relação a restrição que o enunciado impõe: ...aí tem que analisar para saber se o empate se refere à mesma categori ou se é empate entre as categorias, ou seja, se, por exemplo, 2 ou mais operários tem um maior maior salário, ou se o salário do maior e do menor são iguais... mas veja, para o segundo caso, o maior e o menor também, sempre, incluirá a mesma pessoa. Como ocorrerá o que citei acima em vermelho, ou só ele foi cadastrado ou todos são iguais, logo ele também será igual a a ele mesmo... (o salário dele será o menor e maior ao mesmo tempo) *** No aguardo.
  4. Olá @Fernando Ferreira C. Nesse caso sugiro que faça o seu programa do zero. Tente fazer inicialmente o item 1. E aos poucos vai acrescentando outras funcionalidades. Qualquer coisa posta o código atual aqui e onde está com dúvidas. No aguardo.
  5. ADENDO: O cálculo da média está conceitualmente errado... a média «"é obtida dividindo-se a soma das observações pelo número delas», ou seja, "somatório dos números, dividido pela quantidade de números", mas no seu código está assim: Ou seja, está utilizando a mesma variável para acumular e também ser o resultado.Vai funcionar? vai, mas um algoritmo não é só entregar uma resposta certa, a forma como foi feita também conta... Dizer que média é igual a média dividido por 10 fica estranho... (na minha opinião). Resumidamente: use outra variável para acumular, e a média será essa variável divido por 10. Obs.: Essa informação não é solicita, logo não sendo necessário.
  6. Olá. Em relação ao menor, está faltando inicializar a variável... uma forma seria colando um valor alto como "99999"... ou atribuir o primeiro valor valor lido como sendo o inicialmente o menor. Veja, ao iniciar o programa, as variáveis são zeradas, logo, menor fica com o valor 0, daí, nenhum salário irá ser menor que ele... inicializando como citado acima, resolverá esse problema.
  7. Olá @Fernando Ferreira C. Qual o contexto de conversão? Qual o objetivo de converter de uma linguagem "mais avançada" para uma "mais simples"?
  8. Olá @Victor_Pereira_ufsj, por favor, poste o texto do código em vez da imagem, pois assim fica mais fácil para testarmos... obs.: para postar o código, clique antes no botão "<>", cola o texto e insere. Mas vamos lá: (vou fazer de cabeça, estou com preguiça de digitar para fazer os testes na prática, rs) 1) READLN X READ Evite usar read, prefira readln. Um pouco sobre aqui: 2) OPERADOR LÓGICO OR No seu código, você não está utilizando o operador, daí não sei o que estava fazendo errado, mas a utilização de operadores lógicos são relativamente simples... O principal ponto aqui é que para cada comparação é necessário informar qual variável vai ser comparada com qual valor (ou variável), ex.: until (NUM=1) or (NUM=2) or (NUM=3) or (NUM=4); Não poderia ser: until (NUM=1 or 2 or 3 or 4); //não vai funcionar (eu acho) Ou seja, para o Pascal, a "expressão lógica" no until verifica cada "operação lógica" de forma independente. Cada operação resulta em true (verdadeiro) ou false (falso) e o operador lógico (no caso o or) irá "calcular essa conta". Ex.; Se NUM = 3, teremos algo assim: (NUM=1)=false (NUM=2)=false (NUM=3)=true (NUM=4)=false Segundo o operador lógico or, se uma das opções for true, a expressão resulta em true, logo teríamos um "until true"... *until = até; true = verdadeiro, logo o repeat para!!! Com NUM = 8, tudo iria se false, logo resultando em false, e o "até" não estaria satisfeito, fazendo repetir novamente. 3) OPERADORES RELACIONAIS Como se trata de uma sequência, ou seja, "de 1 a 4, inclusos", poderia utilizar um operador relacional. Ex.: until (NUM>=1) and (NUM<=4); obs.: nesse caso também precisou do operador lógico and, que resumidamente funciona como "para ser verdadeiro, tudo tem que ser verdadeiro, caso contrário é falso". Se NUM fosse 2. 2 é maior que 1 E é menor que 4, logo o repeat para. 4) OUTRAS FORMAS Uma outra forma seria utilizando uma estrutura "que eu não sei como chamá-la", como visto abaixo: until NUM in {1,2,3,4}; *** Para seu contexto, recomendo a 3). No aguardo adicionado 0 minutos depois PS: qual o seu compilador? adicionado 8 minutos depois Outra coisa que esqueci de comentar: 5) ESTRUTURA DE SELEÇÃO (if) Perceba que lá no segundo repeat..until, você está utilizando 2 if em sequência, mas acontece que as condições utilizadas neles são mutuamente excludentes, ou seja, se for primeira, não tem como ser a segunda. Desta forma, seria recomendado a utilização do "if...else". Se ainda não viu sobre o else, ignore!. (ou pesquise sobre o tema e adiante o seu lado)
  9. Olá @carlosmixz. Não tem problema. Se quiser, tente refazer a partir desse código e as minhas sugestões.. Qualquer coisa é só postar. No aguardo. adicionado 37 minutos depois Abaixo segue um exemplo de código para demonstração de funcionamento: Program Testesparachl0e; const {caminho = 'C:\Users\Usuario\Desktop\chl0e\chl0e_data\pos,mau.dat';} //aqui está usando o caminho absoluto, ou seja, escolhendo onde vai gerar caminho = 'arqPosMau.txt'; //usando o camino relativo, ou seja, gera o arquivo na pasta do programa var posmau :array [1..50] of string; i :integer; frase :string; arq_posmau :text; BEGIN assign(arq_posmau,caminho); //assinala o arquivo com o seu respectivo caminho (para o Pascal saber onde está o arquivo) rewrite(arq_posmau); //cria ou recria o arquivo no caminho que foi assinalado e abre em MODO DE ESCRITA (o pronteiro de escrita fica na primeira linha) writeln('Digite a frase e pressione ENTER'); for i:=1 to 5 do begin write ('Frase ',i,':'); readln(frase); writeln(arq_posmau,frase); //escreve o conteúdo da variável frase no arquivo. Também escreve "ENTER" (faz descer linha, devido ao ln), ou seja, o "ponteiro de escrita" ficará na linha de baixo end; reset(arq_posmau); //reabre o arquivo de texto no "MODO LEITURA", ou seja, reposiciona o "ponteiro de leitura" lá no início do programa for i:=1 to 5 do readln(arq_posmau,posmau[i]); //ler, a partir do ponteiro de leitura, a próxima linha e joga o dado na variável posmau[i]. O "ln" faz o ponteiro de leitura descer para linha de baixo for i:= 1 to 5 do writeln(posmau[i]); close(arq_posmau); //fecha o arquivo (libera para o windows) readln; END. Geralmente o arquivo de texto (já que escolheu text) vai ficar na mesma pasta onde tá o ".exe" que o Pascal gerará... Se o programa rodar corretamente aí, verá que dentro do arquivo terá as linhas que você digitou. Lembrando que para esse código, toda vez que executar o programa, o arquivo de texto será recriado, ou seja, perderá o conteúdo que tinha antes... Para abrir um arquivo de texto qualquer (ou no caso o do programa), poderia utilizar o append desta forma, o arquivo será aberto com o "ponteiro de escrita" no final do arquivo, daí ao escrever algo nele, ficará logo abaixo a última linha. Como já citei no código, o reset é o que abre para leitura.
  10. Olá. 1) CONDIÇÃO DA CATEGORIA Você ainda está separando as categorias com valores individuais (31, 32, 33...), mas a categoria deveria ser por faixa ("de 31 a 35")... É um se só!!! Esse é justamente um motivos para usar uma fórmula geral. 2) REFORMULAÇÃO DAS NOMENCLATURAS Acho que precisa dá uma revisada nessas nomenclaturas.... pois na segunda linha você está dividindo algo que chamou de "porcentagem" por 100 novamente, ou seja, "porcentagem" por si só sugere que já está sendo dividido por 100... dividir novamente por 100 soa estranho... Dessa vez vou tentar adiantar pra você. Uma maneira mais simples ficaria algo assim: salarioFinal <- salarioBase + ((pecas - faixaPecas) * (salarioBase * taxaB)) e usar: taxaA <- 0/100 taxaB <- 3/100 taxaC <- 5/100 3) MAIOR E MENOR Essa condição não faz sentido: Maior nunca vai ser menor que menor... Revise o conceito de descobrir o maior e também descobrir o menor... Outra coisa, ao encontrar o maior e menor, você precisará de outros dados, como solicitado no enunciado: No aguardo.
  11. Olá @rugier732. A multiplicação de "x" por "y" é o mesmo que "x*y", mas como ele cita "recursividade", possivelmente deve está se referindo a efetuar a multiplicação utilizando apenas adição... ex.: 4*5= 4+4+4+4+4=20, ou seja, fazer o processo manual da operação. Dê uma pesquisada sobre "recursividade em programação", e para facilitar, também sobre "recursividade em pascal". A parte sobre "multiplicar utilizando adição" já comentei acima... O seu algoritmo seria efetuar essa multiplicação utilizando a recursividade. PS: a minha sugestão é que se aprofunde bastante na recursividade... inicialmente não parece ser algo muito trivial, mas após entender a estrutura, fica mais fácil. No aguardo.
  12. Olá @AlexandreKG. Qual o seu compilador? Vamos lá: Não, não não pode! (traduzindo: sim, pode declarar) a divisão de inteiros resulta em real mesmo (por exemplo, o n3 não poderia ser integer também... ou os 3 poderiam ser real, pois real/real = real)... Teoricamente a declaração está certa!. Tente se atentar ao erro informado (nem sempre acerta, mas geralmente é um bom indicativo). Veja: Em "Line/.." (acho que deve ser Line/Column), na "9/7" tem ": Traduzindo (Google Translator) fica: Ou seja, HINT = Dica! É uma sugestão... Ele não diz que está errado, apenas que existe outras possibilidades... Mais a baixo em 12/1 tem: Traduzindo: Ou seja, está dando algum erro com o seu programa de compilação. Acusa erro no arquivo gerado, ou seja, o programa gerado está sem alguma permissão... Se foi gerado, possa ser que o "FistPascal" não esteja conseguindo abrir devido ao Windows (ou SO que use), pois a permissão contida no arquivo não permite... Ou devido a alguma falha, o compilador não conseguiu "linkar" os componentes necessários para o seu programa funcionar (tecnicamente falando, poderia ser a "linkagem" de alguma biblioteca de comandos do Pascal, como a System, ao seu algoritmo, ou seja, pode não está conseguindo juntas as coisas... obs.: isso é apenas um suposição apenas para contextualização!!! ). Em relação a última parte, diz que "compilou com sucesso". Ai não entendi se compilou com sucesso mesmo e o erro sobre a permissão negada foi para abrir o programa (o arquivo foi criado, mas não conseguiu abrir), ou se esse "sucesso" foi apenas dizer que chegou a fim da compilação (tentou gerar o arquivo, mas não conseguiu..). (entra no contexto de "nem sempre acerta", pelo menos com precisão). Outros programas estão funcionando nesse seu compilador??? Tente ir na pasta onde está esse executável que foi gerado na compilação e tente abrir... Testei no Free Pascal Compiler e funcionou perfeitamente. Código testado: program Exercicio_23 ; var n1 :integer; n2 :integer; n3 :real; begin n1:=1; n2:=2; n3:=n1/n2; writeln(n3); readln; end. No aguardo.
  13. Eu estava me referindo ao outro código da Universidade... Nesse código, daria para mudar para escolha..caso no trecho:
  14. É.. pelo que eu vi a base dos programas são semelhantes... para mim tá OK! obs.: como as condições para calcular o desconto e para contar a quantidade por curso são as mesmas, poderia juntar ou coisa com a outra, ou seja, lá contar a quantidade ao calcular o preço... Nesse código eu também colocaria um escolha..caso no lugar do conjunto de se..senao. Ou troca para ambos os conjuntos ou deixaria um só mesmo como sugeri acima. No aguardo.
  15. Ola.@Joao emilioborges, para outro algoritmo, por favor, crie outro tópico..
  16. Olá @Joao emilioborges. Primeiro você precisaria me dizer o que você entendeu do que está sendo pedido... É para apenas ignorar o cadastro do cara ou seria para ler novamente o curso? Pelo seu código eu entendi que apenas exibiria uma resposta e ignoraria os dados dele... contaria apenas como "Foram Fazer Inscrição". Logo, acho que ficou tudo certinho agora... NO SENTIDO DE APRIMORAMENTOS: Sugestão 1: acho poderia troca os se que conta o total por curso para escola...caso. Terá exatamente o mesmo resultado, mas ficará mais organizado. Algo assim: escolha Candidatos[i,4] caso "informatica" TOTALinformatica:= TOTALinformatica+1 caso "administracao" TOTALadm:= TOTALadm+1 fimEscolha Obs.: ":=" está funcionando? não seria "<-" ??? Sugestão 2: peça para alguém que não participou da criação fazer testes... o ideal é chamar alguém da casa, e pedir para rodar o programa... não dizer nada, apenas que tente seguir os passos... entende? deixe usar sozinho, sem que você dê dicas... tente analisar os possíveis problemas (vai aparecer! rs), analisar se vale apenas ou não tentar corrigir. Esse passo é também interessante pois pode encontrar erros de fato (não só melhorias em si). Ai, tem que corrigir mesmo! Sugestão 3: ...por ai vai. No aguardo.
  17. Olá @Paulo Rubens de M. Leme Jr. Seja bem vindo ao Fórum do Clube do Hardware. 1) INDENTAÇÃO DE CÓDIGO Um dos pontos que considero mais importante é que o código sempre deve está bem indentando, pois no mínimo facilita para identificar a estrutura do código... mais aqui. Abaixo seu código reindentado: Algoritmo "media" Var // Seção de Declarações das variáveis nota1, nota2, nota3, nota4, nota5, nota6, nota7, nota8, nota9, nota10, media:real aluno:caracter opcao: logico Inicio // Seção de Comandos, procedimento, funções, operadores, etc... escreval("Favor informar o nome do aluno:") leia(aluno) escreval("Bom dia ",aluno,", informe a primeira nota:") leia(nota1) escreval("Informe a segunda nota:") leia(nota2) escreval("Você gostaria de calcular a média apenas dessas notas?(s/n)") leia(opcao) se opcao -> "s" então media <- (nota1 + nota2)/2 se media >= 7 então escreval("O aluno ",aluno," teve média ",media," e portanto foi aprovado.") senao escreval("O aluno ",aluno," teve média ",media," e portanto foi reprovado.") fimse senao escreval("Informe a terceira nota:") leia(nota3) escreval("Você gostaria de calcular a média apenas dessas notas?(s/n)") leia(opcao) se opcao -> "s" então media <- (nota1 + nota2 + nota3)/3 se media >= 7 então escreval("O aluno ",aluno," teve média ",media," e portanto foi aprovado.") senao escreval("O aluno ",aluno," teve média ",media," e portanto foi reprovado.") fimse fimse Fimalgoritmo Então, só analisando visualmente percebemos que está faltando um fimSe, no caso para o primeiro "se..senao" (antes do fimAlgoritmo). Veja, não estou analisando a sua intenção, ou seja, apenas a estrutura da sintaxe. 2) SINTAXE DO VISUALG Nos se você está utlizando "->", mas esse não é um operador relacional válido... se quer um "igual", seria "=" mesmo. 3) TIPO DE DADOS Você está usando o tipo logico (é um tipo especial que só aceita VERDADEIRO ou FALSO) para a variável opcao, mas está solicitando ao usuário que ele insira uma letra ("s" ou "n"), ou seja, opcao deveria ser do tipo caractere. Execute o seu código antes de corrigir e veja como a variável opcao fica como FALSO quando digitar alguns valores... obs.: fiz uns testes aqui, e ele fica VERDADEIRO quando digita algo começado com "v", como "verde"... rs. Mas eu estou entendendo isso como um bug!!!! RESUMINDO: opcao :caractere obs.: você está usando caracter, falta um "e" no final (não sei dizer se é mesma coisa, mas use o que é recomendado) *** No aguardo
  18. Olá @Tuufee. Tinha imaginado... comentei mesmo para reforçar... Para o seu contexto só existe 3 taxas: 0% por peça ou 3% por peça ou 5% por peça. Eu não sei se o termo correto é "taxa" mesmo, mas "a taxa" que me refiro é o que está relacionado à categoria... Veja: Ou seja, independente de quanto ele vendeu, a taxa, por exemplo, para categoria B é 3%... o mesmo vale para outras. Não muda! Tente focar no processo, e não no resultado! Não necessariamente... como sugerido acima, para o mundo da programação não é só importante o resultado final, mas também o processo para chegar ao resultado. Veja, por que para calcular o salário bruto da categoria B você usa vários se: e para 36 em diante usa uma fórmula? Então vou tentar extrapolar o que estou tentado explicar, na minha interpretação, perde um pouco de coerência "usar uma regra para Chico, e outra para Francisco", ou seja, se são exatamente o mesmo contexto, porque utilizar de duas formas diferentes para resolvê-lo? entende? (poderia fazer? talvez até poderia, mas para mim seria melhor ajustar, é incoerente*) Ainda nessa minha visão, para maior de 36 você deveria fazer o mesmo... um para 36, outro para 37, outro para 38... até o infinito (ou limite de vendas por peças para um vendedor). Logo, ou simplesmente utilizaria uma fórmula também para categoria B. Só frisando: a mesma fórmula vale para 3 categorias. (não confundi "mesma fórmula" com "mesmo valores", por isso podemos utilizar variáveis). Extrapolando mais ainda o que estou tentando demonstrar é que SE SÓ o resultado fosse importante, para a categoria A e B, poderia simplesmente usar um tabela, já que o salário base é fixo, e o valor por peça extra também. Mas não, a minha sugestão é que "use uma fórmula para tudo", precisando "calculando o número de peças extras" e "selecionando a categoria" no caminho... veja, tente imaginar que não existe categoria e o patrão sempre paga por quantidade de peças uma taxa sobre o salário base... agora tente incluir as categorias, ou seja, só muda a taxa, a conta é a mesma. RESUMIDAMENTE: Essa "mesma" fórmula: Vale para as 3 categorias. Entretanto, a única coisa que inicialmente precisa ajustar é o que chamei de "taxa", ou seja, em vez de 5 (no contexto seria 5/100, com o 100 que você separou), seria "taxaX" (taxaA, taxaB ou taxaC). Daí que entra a minha sugestão: salarioBase = 888; taxaA = 0 taxaB = 3 taxaC = 5 Na fórmula você pode deixar como "taxa" mesmo, e antes, de acordo com a categoria, diz qual o valor dela, algo como "taxa = taxaX" (X=A, B, ou C) OU usa direto na fórmula a taxaA ou taxaB ou taxaC, de acordo com a categoria. No aguardo.
  19. Olá. Escolha um exercício! tente fazer, poste aqui o código e onde está com dúvidas. No aguardo
  20. Olá @danilo001. 1) INTERDEPENDÊNCIA DE COMANDOS Não existe dependência! Os comandos são todos independentes entre si... para o Pascal, não existe nenhum correlação entre o write e o readln. Apenas são dois comandos... cada um sua finalidade. Um escreve algo na tela, o outro ler algo do teclado, simples assim. O uso deles, como a ordem que podem ficar no algoritmo está relacionado a lógica do programador, ou seja, organizar os comandos e estruturas do código é o que vai fazer ele se comportar como desejado... Por exemplo, se você retirasse a write, apenas iria ocorrer que o usuário poderia não saber o que deveria digitar..., mas o resto do programa iria funcionar exatamente como antes! Colocar aquela "mensagem de ordem" para digitar o sexo, é apenas uma forma coerente de solicitar uma informação, que pelo contexto será armazenada numa variável depois..., ou seja, apenas uma estratégia... indicar o que está sendo solicitado, e após ler o que for digitado. 2) ESTRUTURA DE REPETIÇÃO Então, o Pascal apenas é apenas um "executor de instruções", ou seja, você manda ele fazer, e ele faz... a ordem de execução é "da esquerda para direita, de cima para baixo" (geralmente usamos um embaixo do outro, mas no Pascal é possível colocar lado a lado por exemplo), exatamente da mesma forma que nós ocidente lemos e escrevemos um texto. Vamos tentar entender os passos que você ordenou ao Pascal: Abaixo peguei o trecho o código e inserir comentários em cada linha para tentar explicar como o programa irá funcionar ao ser executado. Ou seja, o usuário vai ver os caracteres " Digite o sexo : ". Após o programa vai ficar aguardando um ENTER, ou seja, se ele digitar algo no teclado e após ENTER, o Pascal vai "coletar" o que ele digitou e vai jogar na variável que está entre "()". Supondo que ele digitou "masculino", a variável "F" terá masculino nela!. Após, o programa vai ficar aguardando outro enter... Veja que já ficaria confuso para o usuário, mas supondo que ele der outro ENTER para fazer o programa continuar... daí, a variável "M" irá conter "" (nenhum caractere... nada escrito...). Ai no while, o Pascal vai analisar a expressão lógica: "F" é diferente de "M"?, traduzindo seria algo: "o que tem dentro da variável F é igual ao que tem dentro da variável M"? ou seja, "masculino" é diferente de ""? A resposta é SIM, ou seja, resulta em VERDADEIRO (true). Logo o laço de repetição irá iniciar... a próxima linha é um begin, logo o Pascal entenderá que é um "bloco de instruções" e executará, em sequência, o que está dentro... ai vem o write, que escreverá "É do sexo, ".... (os caracteres apareceram na tela). Após vem um writeln, que irá escreve "" (ou seja, nada), e pulará para linha de baixo (devido a ter o ln). Ao chegar no end;, o Pascal sabe que é do while e volta para a expressão lógica e faz a verificação... como F e M não foram alterados, a expressão continuará a resultar em VERDADEIRO (true), e fará novamente as escritas...... Como o valores nunca se alterarão, ficará em um loop infinito (repetindo indefinidamente). Seria necessário que dentro do while, as variáveis envolvidas na expressão fossem modificadas de algumas forma... Então, o caractere "F" ou "M" seria A RESPOSTA DO USUÁRIO e não o nome da variável, ou seja, esses caracteres deveriam, teoricamente, se referir a "F" de "Feminino" e "M" de "Masculino"... resumindo: A variável e trecho do código poderia ficar assim: Program Exercicio_23; var sexo :string; BEGIN write ('Digite o sexo: '); readln(sexo); A variável que dei a nomenclatura sexo, na lógica do problema proposto, servirá para "armazenar o sexo" que será informado pelo usuário. Usar o nome "sexo" é apenas uma forma de ajudar o programador a identificar a função dessa variável no algoritmo, mas poderia ser qualquer outro nome válido, como A, B, BoraBahea, apartamento, adsadg3244252dfae, xxxx... para o Pascal não importa!!! Se você chamar de IDADE, o programa funcionará EXATAMENTE da mesma forma que se você chamar de sexo, só ficaria "estranho" na nossa cabeça (pois "idade é um número"... só que não!)... entende? (obs.: existe uma regra para nomenclatura, como não podendo começar com números, ter um limite máximo de letras etc). Já o While funciona como uma "estrutura de repetição", onde enquanto a expressão lógica que foi informada resultar em VERDADEIRO, ela continuará repetindo. Essas expressões lógicas podem utilizar de operadores, como visto aqui. Resumindo: a condição no while sempre deverá resultar em VERDADEIRO (true) ou FALSO (false), e assim como usamos o nome "sexo" para o código fazer sentido, devemos uma usa condição que faça sentido para o seu problema!!! Ou seja, o conteúdo da variável sexo deverá ser diferente do caractere "F" e o conteúdo da variável sexo deverá ser diferente de "M". Como são vários detalhes, vai um exemplo de código: Program Exercicio_23 ; var sexo :string; BEGIN write (' Digite o sexo: '); readln(sexo); while (sexo <> 'M' ) and (sexo <> 'F' ) do begin writeln('Favor inserir "M", para Maculino ou "F" para Feminino'); readln(sexo); end; if (sexo='M') then writeln('Sexo informado foi MASCULINO'); if (sexo='F') then writeln('Sexo informado foi FEMININO'); readln; //aguarda um ENTER antes de fechar END. Observe como dentro do laço de repetição a variável de controle (sexo) está sendo relida, para então assim poder ser alterada e possibilitar a verificação da condição mudar... Tente entender o fluxo do programa... tentar interpretar cada linha do código e assimilar alguns conceitos.. daí vá tentando reformular e ajustar... faça testes... insira valores diferentes e veja se a resposta está batendo com o esperado... Qualquer dúvida é só perguntar. No aguardo.
  21. Olá. Use a condição do While a variável sexo diferente de "M" e sexo diferente "F". Poste o que já conseguiu fazer e onde está com dúvidas.
  22. Olá @Tuufee. Então, é preciso revisar os conceitos e os seus termos para não nos confundirmos... o "<=30" não é uma variável, é apenas uma "condição". (não identifiquei se "disse errado" ou está "entendendo errado") Então, a programação estruturada como para o VisuAlg e seu algoritmo apenas vai seguindo etapas... vai "lendo linha a linha e fazendo o que cada linha ordena"... os "se" (ou if para outras linguagens) funcionam APENAS como estrutura de seleção, ou seja, "seleciona qual caminho o código vai seguir de acordo com o resultado da "expressão lógica" que contém nela (na condição do se), ou seja, "se der VERDADEIRO, ele executa o que está dentro do se, caso seja falso ele pula e vai para a próxima instrução (após o fimSe, ou vai pro senão, caso esteja usando). Faça o seguinte... pegue o seu código e vá pressionando F8 e vai acompanhando a linha azul no lado esquerdo e as variáveis no lado direito do VIsuAlg. Justamente... são X% para cada peça, ou seja: Tente refazer, e poste o seu código atual e onde está com dúvidas. No aguardo.
  23. @Chrystian Miguel Dos Santos , favor editar a sua postagem anterior... apagar o código que tá lá e inserir novamente utilizando a tag CODE. (antes de colar um código, pressione o botão <> na barra de ferramentas e cole só o código nele). No aguardo
  24. Olá @Tuufee. Vamos lá: 1) ESTRUTURAS DE SELEÇÃO No VisuAlg existe basicamente 2: SE e ESCOLHA. Sendo subdivididas em: "se..fimSe" e "se..senão..fimSe"; e "escolha..caso..fimCaso" e "escolha..caso..outroCaso..fimCaso". Como você optou por utilizar o se lá na conta do salário, deverá utilizar o recurso do senao também, pois as condições que "estão sendo selecionas" são mutuamente excludentes, ou seja, se for "escolhido" uma opção, uma outra necessariamente não vai mais ocorrer, logo não faz mais sentido continuar "selecionando" (a estrutura senão controlará isso)... Por favor, dê uma revidada sobre as diferenças entre "se" e "se/senão". Lá na verificação do sex, também deve se utilizar o se..senao, faz sentido perguntar: "É do sexo masculino?", digamos que sim, e após ainda perguntar "É do sexo feminino?", ou seja, se é um anterior, não faz sentido continuar perguntando... (são condição mutuamente excludentes). Para esse caso é pior: é uma dicotomia, ou seja, se não é masculino, necessariamente será feminino, nem precisaria perguntar... entretanto, como é um dado informado pelo usuário, e ele pode digitar errado, poderia deixar os 2 se, mas incluindo um senao antes do segundo (obs.: vide sintaxe do se..senao). 2) AINDA SOBRE ESTRUTURAS DE SELEÇÃO Percebo que no seu código, ainda na parte da conta do salário, você está utilizando "se"s individuais para cada inteiro da faixa de valores, mas o mais coerente seria utilizar um "se" para cada faixa... você meio que já sabe fazer isso: Mas tem um errinho ai... pois seria "E", e não "OU"... Vou tentar explicar (e servi também para quem tem a mesma dúvida). Veja, assim como os "se"s, podem ter o senao ou não ter, eles também permitem utilizar mais de uma condição na expressão lógica dele, ou seja, um "conjunto de operações lógicas que resultará em VERDADEIRO ou FALSO"... A "combinações das respostas é que valerá na condição em si"... no exemplo acima, são três "perguntas": "peça é maior igual a 31?", outra sendo "peças é menor igual a 35?" e por fim "é um coisa OU é outra?". São 3 operações envolvidas, veja: A - "peças >= 31", com um operador relacional >=; (resulta em verdadeiro ou falso) B - "peças <= 35", com outro operador relacional <=; (resulta em verdadeiro ou falso) C - e um "OU" entre eles, que é um operador lógico OU. (resulta em verdadeiro ou falso) Traduzindo, seria: "se A ou B então" Vamos fazer um "teste de mesa"... Tomemos como exemplo o valor 32. Para contexto do problema deveria resultar em verdadeiro ou falso? resp.: VERDADEIRO! Então... A=verdadeiro, B=verdadeiro... segundo a tabela verdade do OU (disjunção) , temos, "verdadeiro ou verdadeiro" resultando em "verdadeiro". OK Mas se eu tomarmos o 20? deveria ser FALSO, correto? pelo código, A=falso, B=verdadeiro, pela tabela verdade teríamos VERDADEIRO também! logo, tem algo errado ai!!! Como já citei, o operador lógico seria E (conjução), pois AMBAS AS respostas DEVEM SER VERDADEIRAS... para esse contexto... deve ser "menor maior igual a 31 E ao mesmo tempo menor igual a 35". ADENDO: todo número é maior igual a 31 OU menor igual 35... nunca vai seria falso! Sobre operadores em VisuAlg: http://www.apoioinformatica.inf.br/produtos/item/09-operadores 3) CÁLCULOS DE SALÁRIO A fórmula é universal... tanto que você fez uma para "pecas >= 36". É a mesma fórmula para os outros números, só que a taxa também é variável (de acordo com a categoria). Ou seja, por que usar uma fórmula para a faixa ">=36" (que seria de "36 a infinito"), e não usar para "31 a 35"? Para cada categoria, use a mesma fórmula, mudando apenas a taxa. Sugiro usar variáveis, como: salarioBruto, salarioBase, taxaA, taxaB e taxaC. (cada se usaria uma taxaX específica). O salarioBase, taxaA, taxaB e taxaC podem ser inicializado logo no início do programa, ai dentro dos "se" utilizam elas... *** No aguardo.
  25. Olá @Tuufee. Vamos lá... 1) ELABORAÇÃO DO ALGORITMO A dica é simples: não tente fazer tudo de uma vez. Faça por partes e vá adicionado novos recursos aos poucos, por exemplo, tente fazer apenas ele calcular e exibir o salário de cada funcionário.. até que esteja tudo certo... só após tente inserir um novo recurso, como "o total dos salários pagos pela fábrica". Testa e vai para o próximo.. por ai vai. 2) SINTAXE DO CASE Fiz alguns testes, e a forma que eu encontrei para sintaxe do caso para o seu contexto seria utilizando o "até". Veja: escolha pecas caso 0 ate 30 escreval("teste de 0 a 30 ok") caso 31 ate 35 escreval("teste de 31 a 35 ok") caso 36 ate 1000 escreval("teste maior que 36") fimEscolha Aqui comigo não funcionou usando "<=" e afins... Ai só esperando outra pessoa te ajudar (quero saber também, rs) Ou simplesmente tire o caso e use um conjunto de se/senao. 3) PROPRIEDADE MATEMÁTICA / TEORIA DOS CONJUNTOS (ou algo do tipo) Para calcular o total, você está somando 3 variáveis do tipo real, mas está usando uma variável do tipo inteiro para armazenar o resultado, ou seja, "são tipo incompatíveis" (não dá para armazenar o tipo real dentro do inteiro). RESUMINDO: total tem que ser real também. 4) CÁLCULOS DE SALÁRIO Você precisa dá uma revisada nos critérios, veja: A "comissão" é referente a categoria, mas ao mesmo tempo é calculada sobre cada peça!!! Não é fixo! *** 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!