-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
Portugol código em portugol nível hard
Simon Viegas respondeu ao tópico de Filipe Gomes em Programação - iniciantes
@Filipe Gomes, antes de tudo: Que migué foi esse aí? deixou a quantidade como um texto!!! As mesas livres e ocupadas vão aparece sempre iguais! Vamos lá: A lógica do algoritmo não me parece funcional. De um modo simplificado de falar, está misturando as contas das mesas. Todos os pedidos me parecem que estão indo para a mesma mesa. O correto é cada mesa ter os seus pedidos e sua própria conta! Exemplo: Mesa 2: Garçom 2 3 Pizzas Médias; 2 refrigerantes Mesa 5: Garçom 1; 1 Pizza Grande; 4 refrigerantes. Mesa 7: Garçom 1; 2 Pizza Grande; 4 refrigerantes. Quando for finalizar uma conta, precisa calcular de acordo com os itens da mesa... OU de uma maneira mais simples, apenas utilizar uma mesa por vez, ou seja: perguntar qual o número da mesa seria apenas uma questão estética. Ao finalizar, iria acumulando os 10% de cada garçom. Se for atendendo várias mesmas ao mesmo tempo, vou tentar exemplificar um desenvolvimento a partir do meu código anterior. Veja: Mudei de se/senao para escolha/caso; Inseri o conceito de garçom; algoritmo "Pizzaria" var vetQtdRefri : vetor [1..8] de inteiro vetQtdPizzaP, vetQtdPizzaM, vetQtdPizzaG : vetor [1..8] de inteiro vetGarconDaMesa : vetor [1..8] de inteiro //0 = disponível numMesa, numItem, numGarcom : inteiro opcao : caractere procedimento MenuCardapio() inicio escreval("[1] Refrigerante R$ 10,00") escreval("[2] Pizza P R$ 20,00") escreval("[3] Pizza M R$ 35,00") escreval("[4] Pizza G R$ 50,00") escreva ("==>") fimProcedimento procedimento MenuOpcoes() inicio escreval("[P] Inserir pedido") escreval("[F] Fechar a mesa ") escreval("[S] SAIR ") escreva ("==>") fimProcedimento inicio repita LimpaTela() MenuOpcoes() leia(opcao) escolha opcao caso "P" LimpaTela() escreva ("Número da Mesa: ") leia(numMesa) se (vetGarconDaMesa[numMesa] = 0) entao escreval("Mesa ainda não aberta") escreva ("Número do garçom: ") leia(numGarcom) vetGarconDaMesa[numMesa] <- numGarcom fimSe escreval("") LimpaTela() MenuCardapio() leia(numItem) escolha numItem caso 1 vetQtdRefri[numMesa] <- vetQtdRefri[numMesa]+1 caso 2 vetQtdPizzaP[numMesa] <- vetQtdPizzaP[numMesa]+1 fimEscolha //numItem caso "F" escreva ("Em construção...") timer 2000 timer 0 fimEscolha //opcao ate opcao = "S" fimalgoritmo Inserir menu de opções as quantidade já pedidas na mesa; procedimento MenuCardapio(mesaAtual : inteiro) inicio escreval("[1] Refrigerante R$ 10,00", vetQtdRefri[mesaAtual]) escreval("[2] Pizza P R$ 20,00", vetQtdPizzaP[mesaAtual]) escreval("[3] Pizza M R$ 35,00", vetQtdPizzaM[mesaAtual]) escreval("[4] Pizza G R$ 50,00", vetQtdPizzaG[mesaAtual]) escreva ("==>") fimProcedimento Ou seja: vai aparecer a quantidade para a mesa em questão. Mostrar no Cardápio o número do Garçom; procedimento MenuCardapio(numGarcom, mesaAtual : inteiro) inicio escreval("") escreval(" MESA: ", mesaAtual:1, "Garçom: ", numGarcom:1) escreval(" Qtd") escreval("[1] Refrigerante R$ 10,00 ", vetQtdRefri[mesaAtual]:3) escreval("[2] Pizza P R$ 20,00 ", vetQtdPizzaP[mesaAtual]:3) escreval("[3] Pizza M R$ 35,00 ", vetQtdPizzaM[mesaAtual]:3) escreval("[4] Pizza G R$ 50,00 ", vetQtdPizzaG[mesaAtual]:3) escreva ("==>") fimProcedimento Entende? vai implementado aos poucos! Vai vendo se está dando certo ou não... eu creio que vai... pois lá no início, já tinha uma noção que vou conseguir pegar a quantidade de cada mesa. Vai inserindo mais coisas. Possibilitar adicionar mais de um item de um vez Opção cancelar para o cardápio; repita MenuCardapio(numGarcom, numMesa) leia(numItem) escolha numItem caso 1 vetQtdRefri[numMesa] <- vetQtdRefri[numMesa]+1 caso 2 vetQtdPizzaP[numMesa] <- vetQtdPizzaP[numMesa]+1 fimEscolha //numItem escreva ("Adicionar novo item? (S/N)") leia(repetir) ate repetir = "N" Sair do cardápio pelo número do item, em vez de fazer uma pergunta repita limpaTela() MenuCardapio(numGarcom, numMesa) leia(numItem) escolha numItem caso 1 vetQtdRefri[numMesa] <- vetQtdRefri[numMesa]+1 caso 2 vetQtdPizzaP[numMesa] <- vetQtdPizzaP[numMesa]+1 fimEscolha //numItem ate numItem = 0 ... Por enquanto cheguei a isso: algoritmo "Pizzaria" var vetQtdRefri : vetor [1..8] de inteiro vetQtdPizzaP, vetQtdPizzaM, vetQtdPizzaG : vetor [1..8] de inteiro vetGarconDaMesa : vetor [1..8] de inteiro //0 = mesa disponível disponível numMesa, numItem, numGarcom : inteiro opcao, repetir : caractere procedimento MenuCardapio(numGarcom, mesaAtual : inteiro) inicio escreval("") escreval(" MESA: ", mesaAtual:1, "Garçom: ", numGarcom:1) escreval(" Qtd") escreval("[1] Refrigerante R$ 10,00 ", vetQtdRefri[mesaAtual]:3) escreval("[2] Pizza P R$ 20,00 ", vetQtdPizzaP[mesaAtual]:3) escreval("[3] Pizza M R$ 35,00 ", vetQtdPizzaM[mesaAtual]:3) escreval("[4] Pizza G R$ 50,00 ", vetQtdPizzaG[mesaAtual]:3) escreval("") escreval("[0] CANCELAR") escreva ("==>") fimProcedimento procedimento MenuOpcoes() inicio escreval("[P] Inserir pedido") escreval("[F] Fechar a mesa ") escreval("[S] SAIR ") escreva ("==>") fimProcedimento inicio repita LimpaTela() MenuOpcoes() leia(opcao) escolha opcao caso "P" LimpaTela() escreva ("Número da Mesa: ") leia(numMesa) se (vetGarconDaMesa[numMesa] = 0) entao escreval("Mesa ainda não aberta") escreva ("Número do garçom: ") leia(numGarcom) vetGarconDaMesa[numMesa] <- numGarcom fimSe escreval("") LimpaTela() repita limpaTela() MenuCardapio(numGarcom, numMesa) leia(numItem) escolha numItem caso 1 vetQtdRefri[numMesa] <- vetQtdRefri[numMesa]+1 caso 2 vetQtdPizzaP[numMesa] <- vetQtdPizzaP[numMesa]+1 fimEscolha //numItem ate numItem = 0 caso "F" escreva ("Em construção...") timer 2000 timer 0 fimEscolha //opcao ate opcao = "S" fimalgoritmo Cada coisa nova pode ir sendo inserida ao poucos... vai da criatividade e necessidade... assim como pode pensar em uma nova estruturação e ir modificando... a dica é que tentar ir fazendo aos poucos e tendo uma noção se está dando certo ou não... Uma questão que me veio à cabeça:... quando é feito um pedido, é logo entregue na hora? pela lógica não, mas, para simplificar o algoritmo, podemos considerar que sim... Vamos tentar implementar mais uma coisa... Finalizar uma conta Acúmulos dos 10% do garçom. algoritmo "Pizzaria" var vetQtdRefri : vetor [1..8] de inteiro vetQtdPizzaP, vetQtdPizzaM, vetQtdPizzaG : vetor [1..8] de inteiro vetGarconDaMesa : vetor [1..8] de inteiro //0 = disponível saldoGarcom : vetor [1..2] de real numMesa, numItem, numGarcom : inteiro opcao, repetir : caractere valorPedidos, valorConta, valorServico : real procedimento MenuCardapio(numGarcom, mesaAtual : inteiro) inicio escreval("") escreval(" MESA: ", mesaAtual:1, "Garçom: ", numGarcom:1) escreval(" Qtd") escreval("[1] Refrigerante R$ 10,00 ", vetQtdRefri[mesaAtual]:3) escreval("[2] Pizza P R$ 20,00 ", vetQtdPizzaP[mesaAtual]:3) escreval("[3] Pizza M R$ 35,00 ", vetQtdPizzaM[mesaAtual]:3) escreval("[4] Pizza G R$ 50,00 ", vetQtdPizzaG[mesaAtual]:3) escreval("") escreval("[0] CANCELAR") escreva ("==>") fimProcedimento procedimento MenuOpcoes() inicio escreval("[P] Inserir pedido") escreval("[F] Fechar a mesa ") escreval("[S] SAIR ") escreva ("==>") fimProcedimento inicio repita LimpaTela() MenuOpcoes() leia(opcao) escolha opcao caso "P" LimpaTela() escreva ("Número da Mesa: ") leia(numMesa) se (vetGarconDaMesa[numMesa] = 0) entao escreval("Mesa ainda não aberta") escreva ("Número do garçom: ") leia(numGarcom) vetGarconDaMesa[numMesa] := numGarcom fimSe escreval("") LimpaTela() repita limpaTela() MenuCardapio(numGarcom, numMesa) leia(numItem) escolha numItem caso 1 vetQtdRefri[numMesa] := vetQtdRefri[numMesa]+1 caso 2 vetQtdPizzaP[numMesa] := vetQtdPizzaP[numMesa]+1 fimEscolha //numItem ate numItem = 0 caso "F" escreval("Número da mesa") leia(numMesa) se (vetGarconDaMesa[numMesa] = 0) entao escreval("Mesa não tem conta aberta") senao valorPedidos := 0 valorPedidos := valorPedidos + vetQtdRefri[numMesa] * 10.00 valorPedidos := valorPedidos + vetQtdPizzaP[numMesa] * 20.0 valorPedidos := valorPedidos + vetQtdPizzaM[numMesa] * 35.00 valorPedidos := valorPedidos + vetQtdPizzaG[numMesa] * 50.00 valorServico := valorPedidos * 10/100 valorConta := valorPedidos + valorServico escreval("Valor da Conta R$ ", valorPedidos:3:2) escreval("Valor do Servico R$ ", valorServico:3:2) escreval("") escreval("TOTAL R$ ", valorConta:3:2) saldoGarcom[vetGarconDaMesa[numMesa]] := saldoGarcom[vetGarconDaMesa[numMesa]] + valorServico fimSe escreval("") escreval("Aguarde...") timer 2000 timer 0 escreval("") fimEscolha //opcao ate opcao = "S" fimalgoritmo Veja... cada implementação vai sendo como um esboço. Mas precisa ter uma noção que os dados que vai precisar vão está disponíveis... ou seja: como pensei possibilitando ter varias mesas ao mesmo tempo, pensei em utilizar vetores de modo que consiga armazenar e recuperar o que preciso. Por ai vai... Se futuramente tiver interesse de dar continuidade a esse meu código ou quiser tentar reformular para uma nova lógica, pensar em outra maneira de como poderia ser feito, estou á disposição. -
@arfneto, o que eu quero dizer é que precisaria fazer o que é foi solicitado. Existe um código pré-fornecido, daí, se quer que insira uma nova função (de acordo com a estrutura atual). Concordo que o nome utilizado para definir algo tem sim a sua importância! sou defensor disso também, rs (tanto acho interessante, que estamos debatendo)... mas não é o cerne do contexto em si (mais mesmo assim relevante, é claro). Veja: Tanto faz nome! Sacou? seria basicamente dizer: Fulano, essa função aqui pode servir para o que foi pedido: Mas oh! o código não está utilizando "bicicleta de rodinha". Esse nome não tem algo a ver!!! Muito estranho! Isso aí tá mais para um xxxxxxxx. Entende? se eu vou no restaurante e peço: "Por favor: um x-egg, mas com apenas pão e ovo". Entendo que o cara tem que me trazer um "pão e ovo"... e não um "pão, carne, ovo e queijo" (eventualmente também presunto) por que disse "x-egg". Ele poderia até dizer: - "Senhor, no caso o senhor quer um Americano?". - Hum! É isso mesmo. Desculpe, não lembrava do nome. Por favor, apenas pão e ovo!! O garçom, dando uma de maldoso, poderia até cobrar como um x-egg (quer supostamente é mais caro) e trazer o tal do "pão com ovo"... mas o que importa que vou comer meu "pão com ovo". rs Sobre a "lista estática" do contexto penso assim: o termo "estático" seria uma alusão ao uso de vetores (termo errado ou não). Usar ponteiros já seria como dizer algo como: "lista encadeada"... no caso, podendo até chamar de "lista estática encadeada"?. Para mim, não é o caso. O exercício serve essencialmente para "treinar manipulação de vetores (com os [])" (e não manipulação de ponteiros (encadeamentos)). De um modo geral, entendo como nesse documento, por exemplo: http://wiki.icmc.usp.br/images/a/ac/Lista_Sequencial_Estatica_09.pdf
-
VisualG Não estou conseguindo fazer alguns exercícios sobre programação básica
Simon Viegas respondeu ao tópico de LCS19 em Programação - iniciantes
Agora também não está exibindo resposta para quando inserir 1. Sobre: Primeiramente precisar saber qual a resposta correta... existe um valor para 0! ? se sim, qual seria?... e como algo implícito no estudo: por que não teria um valor OU porque tem esse valor que ele tem? (como conhecimentos gerais) Beleza! uma forma seria utilizar uma estrutura se/senao. se valor é negativo então uma resposta adequada senao se valor igual a zero outra resposta adequada senao calcula o fatorial e dar o resultado adequado É preciso exercitar a abstração. Temos 2 problemas distintos aí: inserir a questão de exibir uma resposta para o valor 1 (que parou de funcionar com a nova alteração para parar de exibir repetido, ou seja: resolveu um problema, mas criou outro). inserir a questão de exibir uma resposta para o valor 0. adicionado 27 minutos depois PS: o uso de se/senao já solve o 2. Para resolver o 1, ficará apenas dentro do último senão. OU, atém mesmo, colocar outro se verificando se o valor é igual a 1. se valor é negativo então uma resposta adequada senao se valor igual a zero então outra resposta adequada senao se valor igual a 1 então uma resposta adequada senao calcula o fatorial e dar o resultado adequado adicionado 37 minutos depois Como é mais provável que seja maior que 0, dar para mudar a ordem: se valor é maior que 1 então calcula o fatorial e dar o resultado adequado senao se valor igual a 1 então uma resposta adequada senao se valor igual a zero então outra resposta adequada senao uma resposta adequada //aqui para um valor que será negativo Veja que não existe A resposta correta, mas sim UMA, possível, resposta correta. Dá para melhor, ou piorar, ou mesmo não ser uma resposta válida.... por aí vai. -
VisualG Não estou conseguindo fazer alguns exercícios sobre programação básica
Simon Viegas respondeu ao tópico de LCS19 em Programação - iniciantes
Sempre deixe o código completo. Faltou o "algotitmo" ali no topo; Não está exibindo uma resposta quando insere 0; Está exibindo respostas duplicadas para valores maiores que 2. -
Essa mudança apenas, nos resultados em tela, indica que algo foi inserido, mas não diz onde! Cada função tem um propósito. A primeira apenas dizer se está vazia, a segunda se já enchu e a última o seu tamanho. Se quer saber se inseriu no fim, uma boa forma seria imprimir a lista completa. Ou cria uma função que exibe a posição do elemento que está inserido etc. adicionado 48 minutos depois @arfneto, para este contexto, creio que estaria criando pelo em ovo... o cerne da questão é simplesmente implementar novas funções para o algoritmo que já foi fornecido. Não importa o nome dado a estrutura... o autor do enunciado OU o autor da postagem chamou de "lista estática". Poderia ter chamado de "bicicleta de rodinha", entende?, ou seja: no final, o que deve ser feito é o que solicitado. A foco da questão aqui não é o que é correto ou não, ou o que poderia ser melhorado etc. Vide: Que lista? a lista que está lá no código. Ainda essa questão... De qualquer modo, quando se disse, "lista estática", ficou implícito, pelo menos de algum modo para mim, que está se tratando de um vetor (ou array, não sei o nome em C técnico... mas aquilo que usam os "[]"). Já ao propor algo como, por exemplo: Você está sugerindo a mudança do algoritmo atual (que é um ponteiro de struct que tem um vetor de outra struct... ou o que seja, rs) para uma coisa diferente (uma estrutura de encadeamento de ponteiro, ou algo do tipo). Lá, ele já tem uma estrutura (e quer, e deve ser, assim). Veja... o cerne do termo "estático" está na estrutura do armazenamento (estrutura estático, representado por uso de um vetor), e não no tamanho (algo qualquer que não mude de tamanho), ou seja: no máximo, com a nova estrutura, você iria está criando uma "estrutura dinâmica" com "tamanho estático", sacou? E mesmo que um vetor com [] venha também a não ser estático, no sentido do tamanho (que dê para redimensionar ou não), a questão é que ele tem um sentido de ser (estático)... pelo menos para o contexto. Resumindo: Entendi que o @Rafael LXP teria que fazer isso: Que seria mais ou menos isso:
-
VisualG Não estou conseguindo fazer alguns exercícios sobre programação básica
Simon Viegas respondeu ao tópico de LCS19 em Programação - iniciantes
É uma formatação de números. Algo como: variavel:x:y //onde x = qtd de casas reservadas à esquerda; e y = quantidade de casas decimais Obs.: para inteiros só seria necessário o "x". Na minha postagem anterior coloquei o "y", mas não seria necessário. Por favor, poste o código para analisarmos e, eventualmente, poder servir de base para outros visitantes. adicionado 19 minutos depois Outro exemplo: algoritmo "FCdH" var vet : vetor[1..9] de inteiro i, j : inteiro inicio para i de 1 ate 9 faca vet[i] := randi(120) fimPara para i de 1 ate 3 faca para j de 1 ate 3 faca escreva (vet[(i*3-2) + (j-1)]) fimPara escreval("") fimPara fimAlgoritmo Ficaria assim: Com auxilio da formatação: escreva (vet[(i*3-2) + (j-1)]:4) Ao utilizar ":4", estou exigindo que o VisualG utilize no mínimo 4 caracteres para cada número. Vai ser algo assim: Vai ser impresso: ou ---0 ou --00 ou -000 Onde cada "-" representa um "espaço reservado" e cada "0" um dígito do número Perceba que os números possível vão de 0 a 119, só ocupando entre 1 e 3 espaços. Reservei 4 para dar um espaço a mais (caso contrário ficaria colado no anterior) -
@arfneto e @AdrianoSiqueira, o exercício é para uma lista estática... Provavelmente a lista foi entregue pronta... daí faltando implementar o que foi solicitado. adicionado 4 minutos depois @isrnick, não daria simplesmente para passar o aluno por parâmetro? em C não sei exatamente como faria... mas creio que faria mais sentido passar todo o objeto. Sobre: Essas atribuições não faria sentido ficar dentro da função... pois o objetivo dela seria simplesmente adicionar à fila. adicionado 7 minutos depois Algo assim: nsere_no_fim_da_lista(listaAlunos, novoAluno);
-
VisualG Não estou conseguindo fazer alguns exercícios sobre programação básica
Simon Viegas respondeu ao tópico de LCS19 em Programação - iniciantes
Teu cálculo está errado... o juros tem que ser calculado a cada mês. No teu código, o juros mensal está igual, ou seja: está calculando como se fosse um juros simples! mas o exercício é de juros compostos. Você também está confundindo juros com taxa de juros. Segue um exemplo: algoritmo "FCdH" var capital, taxaJuros, montante : real periodo, t : inteiro inicio escreval("Digite o capital") leia(capital) //escreval("Juros (em %)") //leia(juros) escreval("Taxa de Juros (em %)") leia(taxaJuros) escreval("Período (em meses)") leia(periodo) montante := capital para t de 1 ate periodo faca montante := montante * (1 + taxaJuros/100) escreval("Mês ", t:1,": R$", montante:1:2) fimPara escreval("Capital inicial : R$ ", capital:1:2) escreval("Montante final : R$ ", montante:1:2) escreval("Periodo : ", periodo:1:0, " meses") escreval("Taxa de Juros : ", taxaJuros:1:2, "%") escreval("Juros totais : R$", montante-capital:1:2) fimAlgoritmo Ou utilizando uma terminologia mais próxima: algoritmo "FCdH" //M é o montante final obtido na aplicação, ou seja, o saldo após a aplicação // do juros; //i é a taxa de juros aplicada, em porcentagem; //C é o capital ou valor inicial aplicado; //t é o tempo total da aplicação var C, i, M : real t : inteiro inicio escreval("Capital") escreva ("R$ ") leia(C) escreval("Taxa de Juros (em %)") leia(i) i := i/100 escreval("Período (em meses)") leia(t) M := C * (1 + i)^t escreval("") escreval("Capital inicial : R$ ", C:1:2) escreval("Montante final : R$ ", M:1:2) escreval("Periodo : ", t:1:0, " meses") escreval("Taxa de Juros : ", i*100:1:2 , "%") escreval("Juros totais : R$", M-C:1:2) fimAlgoritmo Sugestão: pegue esse segundo código e coloque para exibir o montante a cada mês. (retire a fórmula que calcula o montante final de uma vez e substitua pela fórmula que calcula mês a mês como no código anterior). adicionado 23 minutos depois Pesquise mais sobre o que é um fatorial. Entenda como funciona o cálculo. Por sinal, a lógica para calcular é bem próxima da outra questão. -
@Leonardo Yuji, 2 pontos iniciais: para resolver um problema, precisa-se saber do que o problema se trata. Por favor, poste o enunciado completo. você testou o teu código, ele funcionou normalmente ou está dando erro em algum lugar? o que está acontecendo de erro? adicionado 8 minutos depois Para adiantar: Creio que essa atribuição não funciona para "string". Pelo que eu sei, poderia fazer assim: strcpy(andar, "PRIMEIRO"); E lá no topo do código insere a diretiva correspondente: #include <string.h> Faz o mesmo para as outras "string".
-
Portugol Algoritmo no Portugol Studio
Simon Viegas respondeu ao tópico de Lukinh4s em Programação - iniciantes
/* 1- Faça um algoritmo que receba vários números inteiros * positivos (o algoritmo deverá encerrar quando um número * negativo for digitado). Ele deverá exibir o maior * número digitado; */ programa { funcao inicio() { inteiro numero, maior = 0 escreva("Digite números positivos (ou um número negativo para sair) ") escreva("\n\n") faca { escreva("Número : ") leia(numero) se (numero > maior) { maior = numero } } enquanto(numero >= 0) escreva("Maior número informado: ", maior) } } -
Portugol Algoritmo no Portugol Studio
Simon Viegas respondeu ao tópico de Lukinh4s em Programação - iniciantes
@Lukinh4s, você postou 2 códigos iguais. Creio que você não está criando a estrutura se/senao e faca/enquanto corretamente... no caso, ou coloca as estruturas separadas, ou seja: um depois o outro, ou coloca uma estrutura completa dentro da outra, nunca intercalados. No teu código, por exemplo, você fechou o se, iniciou um enquanto, e depois colocou um senao. Acho que seria algo assim: faca { se (yyyyy) { } senao { } } enquanto (xxxxx) Um segredo é entender o problema e fazer o que está dendo pedido. Veja: Exemplo de base inicial: programa { funcao inicio() { inteiro idade escreva("Digite 10 idades") para (inteiro i = 1; i<=10; i++) { escreva("Idade: ") leia(idade) } } } Eu não sei se o código acima está certo, pois estou sem um compilador/interpretador aqui... Complementando: programa { funcao inicio() { inteiro idade inteiro qtdAdolescente = 0 //12 a 17 anos escreva("Digite 10 idades") para (inteiro i = 1; i<=10; i++) { escreva("Idade: ") leia(idade) se (idade >=12 e idade <=17) { qtdAdolescente = qtdAdolescente+1 } } escreva("Quantidade de adolescentes: ", qtdAdolescente) } } Obs.: estou sem um compilador aqui para testar, mas a base da lógica poderia ser algo do tipo. Resumindo: leia 10 idades; a medida que ler uma idade, se for adolescente, atualiza a quantidade de adolescentes; ao final, exibe a quantidade de adolescente. Sobre: Acho que poderia ser algo como: enquanto um número lido não for negativo, leia um novo número (use um faca/enquanto); a medida que ler um novo número, se esse número for maior que o maior número, então passa a ser o maior; ao final, exibe o maior número. Por aí vai... -
@arfneto, resumidamente, como poderia ficar este código?
-
VisualG Contador Inteligente de números
Simon Viegas respondeu ao tópico de Kaio Lukas em Programação - iniciantes
@Ciktriz, alguns pontos: O primeiro se ficou incompleto. Deve ter acontecido alguma coisa na hora de você copiar...: Como na imagem, seria: se (i < f) entao O teu algoritmo NÃO resolve o enunciado: Ou seja: deve exibir duas sequências!!! Algo como eu fiz: RESUMINDO: uma solução SEMPRE deve ser baseada no problema. Um exemplo que costumo dar é algo assim: "se o cliente pede um cachorro-quente ao garçom, nada adianta ele trazer um hambúrguer delicioso no lugar"... Afinal, o cara quer um cachorro-quente, oras!. O enunciado é um contrato. Se não concorda com ele, poderia propor uma mudança. "Senhor!, não temos cachorro quente, o senhor aceita um hambúrguer no lugar? não vai ter acréscimo de valor!"... ele pode aceitar ou não!... mas não traga o que ele não pediu. Att. -
Vamos lá: @Ace Flamel, segue: Você está misturou "compilar" com "rodar". O erro narrado é na execução do programa, ou seja: o código já está compilado. Um dos erros é porque está utilizando d, que é para número inteiros... só que você está utilizando um bouble, daí poderia utilizar lf. Como no exemplo: Um outro problema parece que é realmente sobre o "lixo" da leitura anterior... pelo que eu vi, a dica básica é seroa colocar o espaço antes da "%c". Exemplo: #include<stdio.h> #include<stdlib.h> int main() { double altura; char sexo; printf("Digite a sua altura:\n"); scanf("%lf", &altura); printf("Digite o seu sexo M ou F:\n"); scanf(" %c", &sexo); return 0; } Creio que tem várias formas de resolver esse "lixo" de leituras... Não sei qual seria a melhor forma de resolver... mas assim parece ser suficiente. Creio que não... isso inclusive foi recentemente comentado: Daqui: https://www.clubedohardware.com.br/forums/topic/1443793-como-comparar-2-chars-com-if/?do=findComment&comment=7762810 Ou seja: talvez até funcione em alguns contextos, mas não seria sempre, ou seja: tem um comportamento "indefinido" (acho que relacionado aos diferentes compiladores e Sistemas Operacionais... algo por aí) adicionado 1 minuto depois Ah! tá! isso mesmo.
-
Portugol Algoritmo no Portugol Studio
Simon Viegas respondeu ao tópico de Lukinh4s em Programação - iniciantes
@Lukinh4s, por favor, poste seu código atual completo e onde está com dúvidas. Obs.: para postar um código, primeiro clique no botão <>, como indicado abaixo: -
C Como transformo essa matriz em uma matriz 4x5
Simon Viegas respondeu ao tópico de klayfor em C/C#/C++
Se você estava se referindo ao próprio código, OK! Eu tinha entendido errado. Eu tinha entendido que estava se referindo ao código do @devair1010... ou seja: seria "mais ou menos" pois poderia está "correto" para o quê o próprio @devair1010 propôs, OK!, mas não necessariamente para o que @klayfor precisa... Seria análogo a fazer um delicioso e perfeito hambúrguer, mas o cliente tivesse pedido um cachorro-quente. (o que importa é o enunciado... no caso o que foi pedido). Ainda nesse código, e se ele quisesse as 4 últimas linhas, por exemplo? o atual não serviria... Observação: eu acho que o objetivo era outro: Ou seja: poderia está querendo resolver o enunciado (que eu só recuperei depois de vocês terem respondido). Vide: Mas em fim: se não tivesse o enunciado ainda... acho que antes teria que descobrir qual era, ou seja: "para quê você quer transformar essa matriz em uma matriz 4x5". A alteração sem um contexto para mim ainda não faria sentido. Resumindo: ou ele queria resolver o enunciado lá; ou queria alterar para algum outro motivo que ainda não ficou claro (pelo menos para mim). adicionado 1 minuto depois Essa imagem acima tirei do link lá... @Mirabell, ali o código 166. adicionado 10 minutos depois @devair1010, seria a mesma coisa fazer assim, correto? printf("%dª Linha -> ", i+1); PS: vi que nos testei ficou normal, mas testei online e não funcionou... Fica um caractere "estranho" no lugar do "ª". Colocando a caractere direto no código apareceu normal neste site... Creio que deve existir alguma diferença de codificação entre compiladores... Existe alguma forma de forçar uma codificação? -
C Como transformo essa matriz em uma matriz 4x5
Simon Viegas respondeu ao tópico de klayfor em C/C#/C++
Sobre: Mais ou menos! rs. Analisando todo o contexto, eu suspeito que o @klayfor pegou um algoritmo pronto (que serve para gerar uma matriz identidade), e queria alterar para servir para resolver o seu próprio problema... adicionado 0 minutos depois Não, vai gerar uma matriz identidade... -
C Como transformo essa matriz em uma matriz 4x5
Simon Viegas respondeu ao tópico de klayfor em C/C#/C++
@Mirabell, @devair1010 e @arfneto, para uma melhor contextualização, existia uma enunciado na postagem original, segue: Como porventura também sou um moderador do fórum, tomei a liberdade de recuperar o conteúdo na postagem inicial. Att, -
VisualG Problemas com equanto faça no VisualG
Simon Viegas respondeu ao tópico de LucasRossiabi em Programação - iniciantes
@LucasRossiabi, vamos lá? Sobre: No caso você não sabia o erro, pois agora já sabe qual foi... Só para dar uma luz...: No caso, o erro que seria necessário informar é o sintoma, ou seja: dizer o que está ocorrendo de anormal. Você precisa entender o que está acontecendo, para assim tentar descobrir como resolver. Por exemplo: Peguei teu código original e rodei. Deu isso: Você poderia dizer algo como: "quando eu executo o programa, ele já finaliza direto. Não aparece o menu". Daí, só de "para para entender qual é o erro", já poderia investigar o que está acontecendo... no caso, que não está entrando no enquanto/faca. Se lá está compara a variável opção, poderia descobrir qual valor está nele naquele momento... No caso, ele está com 0, daí, 0 NÃO é maior que 0, assim não iniciando o laço. A causa desse problema já foi identificada e resolvida (basta inicializar opcao com um valor diferente de 0). Vide: Sobre: Veja: o problema NÃO era esse!! pois sequer estava entrando no laço de repetição, ou seja: Agora é outro filme!!!... é um novo problema... antes "não entrava no menu", agora "ele volta para o menu"... mas tá? o que exatamente ocorre? não ficou claro também! ou seja: para descobrir precisaríamos que você fornecesse outros detalhes. Mas para adiantar, fiz um teste: Funcionou normalmente! Será que você não percebeu que o resultado está aparecendo ali em cima? ou será que aí no seu computador realmente nem está entrando para perguntar os números? o que está ocorrendo?... sacou? Para ter uma solução para um problema, é necessário antes informar qualquer é o problema... Sobre: Depende! atribuindo ali antes antes do enquanto/faca? se for, não tem qualquer relação... pois o valor da variável opcao está sendo lida do usuário posteriormente e, por consequência, substituída por um novo valor. O valor inicial da opcao só influencia para fazer entrar no laço de repetição (pois ele estava com 0.. e tal). Para evitar que o "novo menu" aparece logo, poderia fazer dar um pausa. Exemplo: se opcao = 0 entao escreval( "VOCÊ SAIU DO MENU") fimse escreval("") escreval("") escreva ("Pressione ENTER para voltar para o MENU") leia(temp) //usado apenas para aguardar um ENTER do usuário fimEnquanto fimEnquanto Nesse exemplo vai aguardar um ENTER para terminar o loop e assim reaparecer o menu. Para complementar, você pode colocar para limpar a tela antes de mostrar o menu, ex.: inicio opcao := -1 enquanto (opcao <> 0) faca limpaTela() escreval (" ESCOLHA UMA DAS OPÇÕES ABAIXO:") Obs.: ao colocar para limpar a tela antes do menu, você já deverá ter algo para "esperar" antes de voltar para o menu, caso contrário, a respostas iria aparecer, mas logo depois iria ser apagada. Iria dar a impressão que a resposta não foi informada.. (mas iria... apenas seria apagada logo em seguida, pois o programa simplesmente vai seguindo o fluxo). Se o erro for outro, por favar de outros informações sobre o que está ocorrendo. No aguardo. adicionado 12 minutos depois ADENDO: para utilizar o leia(temp), precisaria declarar a variável temp... ex.: var opcao, num1, num2: inteiro resultado: real temp : caractere Obs.: poderia utilizar qualquer nome de variável ali no leia() ou reutilizar alguma outra... (mas preferir separar as coisas). A ideia é que simplesmente precisamos aguardar um ENTER, certo?... assim foi usado para ler um valor do teclado (pois para ler do teclado, precisa aguardar um ENTER)... No Pascal, por exemplo, que é o pai do VisualG, não precisaria de uma variável... bastaria colocar algo como leia() (sem nada dento... obs.: lá seria readln();). Mas no VisualG, se não colocar uma variável dentro, dá erro! (o desenvolvedor do VisualG não implementou para funcionar assim. Então simplesmente colocamos para ler qualquer coisa). -
C Como transformo essa matriz em uma matriz 4x5
Simon Viegas respondeu ao tópico de klayfor em C/C#/C++
Caro usuário, Seja bem-vindo ao Fórum do Clube do Hardware. No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware. Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício. Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal. Esperamos que compreenda. Atenciosamente, Equipe Clube do Hardware -
@Cordas, vejamos: Uma questão qual? ou seja: primeiro é preciso saber do que se trata... o que você quer fazer. Primeiro entendem-se o problema, depois buscam-se uma solução. No caso, você está propondo uma solução (uso de fmod()) antes de definir exatamente qual é o problema. Afinal, que tipo de média quer calcular? Qual a relação do uso de "restos de uma divisão" para o cálculo de médias? Sobre: @cpusam, creio que mediana seja "o valor que separa a metade maior e a metade menor de uma amostra", ou seja: a mediana de 2, 5, 8, 4 e 1 seria o 4 (pois é o número que, literalmente, separa as metades). Se tivesse uma quantidade par de números, a mediana seria a semi-soma dos dois elementos médios. Ex.: a mediana de 2, 5, 8, 4, 6 e 1 seria 4,5 (a metade de 4+5). @Cordas, por favor, poste o enunciado completo da questão que está tentando resolver.
-
VisualG Relogio com "despertador" no VisualG
Simon Viegas respondeu ao tópico de joaquim_2k em Programação - iniciantes
@joaquim_2k, aí está apenas interrompendo o para/faca mais interno, daí indo para o próximo ciclo do para/faca anterior. Uma forma bruta seria sair interrompendo um por um, ex.: para hr <- 0 ate 23 faca para min <- 0 ate 59 faca para seg <- 0 ate 59 faca escreval(hr, " horas", min, " minutos", seg, " seg") se (hr = hrd) e (min = mind) e (seg = segd) entao interrompa fimse fimpara se (hr = hrd) e (min = mind) e (seg = segd) entao interrompa fimse fimpara se (hr = hrd) e (min = mind) e (seg = segd) entao interrompa fimse fimpara adicionado 3 minutos depois Ou utilizando uma flag, ex.: var ... tocarAlarme : logico inicio ... para hr <- 0 ate 23 faca para min <- 0 ate 59 faca para seg <- 0 ate 59 faca escreval(hr, " horas", min, " minutos", seg, " seg") se (hr = hrd) e (min = mind) e (seg = segd) entao tocarAlarme := VERDADEIRO interrompa fimse fimpara se tocarAlarme entao interrompa fimse fimpara se tocarAlarme entao interrompa fimse fimpara ... adicionado 12 minutos depois Ou mudando a lógica... uma forma mais natural poderia ser algo assim: repita seg := seg + 1 se seg > 59 entao seg := 0 min := min + 1 fimSe se min > 59 entao min := 0 hr := hr + 1 fimSe se hr > 23 entao hr := 0 fimSe escreval(hr, " horas", min, " minutos", seg, " seg") ate (hr = hrd) e (min = mind) e (seg = segd) -
VisualG Problemas com equanto faça no VisualG
Simon Viegas respondeu ao tópico de LucasRossiabi em Programação - iniciantes
@LucasRossiabi, faltou dizer qual erro está ocorrendo... mas vamos lá: Sobre: A variável opcao começa com o valor 0, daí não está entrando no enquanto. Atribua um valor qualquer diferente de 0 para ela amtes. Ex.: opcao := -1 enquanto (opcao <> 0) faca Outro ponto: a leitura dos números está sendo iguais para qualquer operação. Dar para simplificar. Basta ler os números antes da sequência de se. No aguardo. -
VisualG Contador Inteligente de números
Simon Viegas respondeu ao tópico de Kaio Lukas em Programação - iniciantes
@Ciktriz, por favor, poste o texto do código (em vez de uma imagem). -
Python Converter de C para Python
Simon Viegas respondeu ao tópico de by Owen em Programação - outros
@by Owen, por favor, poste o que conseguiu fazer e onde está com dúvidas.
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