-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
C Elementos consecutivos com maior intervalo
Simon Viegas respondeu ao tópico de Igor Vargas em C/C#/C++
1# Só para esclarecer... @Boko Moko, na sua postagem anterior você citou a minha postagem (como se o código fosse meu...), ou seja, como se tivesse perguntando para mim. (eu tomei a liberdade de editar seu comentário e tornar a citação para o @Igor Vargas). 2# Então foi o que imaginamos mesmo. Então... no caso você colocou apenas "1"... qualquer coisa vez 1, vai continuar sendo qualquer coisa... não muda nada... ali teria que ser -1, ou como @AnsiC e @Boko Moko sugeriram. Mas vamos lá... para que tornar positivo? 3# @Igor Vargas... isso é o problema em si. Precisa tentar desenvolver alguma lógica, e ter dúvidas na lógica!!! Entende? Você postou um código e disse que não está conseguindo fazer, então, mas qual seria a lógica que você quer implementar? o que está dando errado? -
C Elementos consecutivos com maior intervalo
Simon Viegas respondeu ao tópico de Igor Vargas em C/C#/C++
@Boko Moko, não sei se você citou a partir do meu comentário achando que o código foi meu, ou se sua intenção foi verificar junto ao autor mesmo... de qualquer forma fiz o ajuste... Mas aproveitando, então, analisando pela condição do if, acho que ele está tentando verificar se o número é negativo, caso fosse, tentou multiplicar por -1 para tornar positivo. Da mesma forma que @AnsiC pensou: PS: não faria muito sentido multiplicar algo por 1 (elemento neutro da multiplicação). -
VisualG Parâmetros e Procedimentos VisualG
Simon Viegas respondeu ao tópico de DiogoR00 em Programação - iniciantes
A "," seria para "simplificar"... é análogo a declaração de variáveis lá no var das variáveis globais. Veja que um está por referência, e outro por valor. Se ambos fossem referência, poderia ser assim: procedimento Soma(var X:inteiro; var Y: Inteiro) ou no caso, assim: procedimento Soma(var X,Y: Inteiro) -
C Elementos consecutivos com maior intervalo
Simon Viegas respondeu ao tópico de Igor Vargas em C/C#/C++
Olá. @Igor Vargas alguns pontos: 1# Sempre... veja..., SEMPRE deixe seu código indentado e organizado. É de fundamental importância, e não existe desculpa para fazer o contrário . Ex.: #include <stdio.h> #include <stdlib.h> #include <math.h> void leitura() { int vet[8]; int x; int diferenca=0; for(x=0; x<8; x++) { scanf("%d",&vet[x]); if (vet[x]<0) { vet[x]=vet[x]*1; } if (vet[x]<vet[x+1]) { if (vet[x]-vet[x+1]>diferenca) diferenca=vet[x]-vet[x+1]; } else { if (vet[x]-vet[x+1]>diferenca) { diferenca=vet[x]-vet[x+1]; } } } } main() { leitura(); } Veja a diferença... DICA: Desativa a tabulação do seu editor de texto, ou seja, faça que inseria "espaços" ao pressionar tab. obs.: independente da tabulação ou não, a indentação do seu código está errada e possuem erros lógicos... criou dente onde não existe e não deu dente onde deveria... é só comparar. obs.2: claro que não existe uma regra única para indentar, mas tem que ter coerência. Se tiver dúvidas sobre essa parte é só perguntar. 2# Então, esta parte está nas suas mãos... é você que precisar "quebrar um pouco a cabeça" e tentar fazer... Daí você postou um código... mas tá, qual a sua dúvida em relação ao que você tentou fazer? ou seja, você "perguntou como faz" e "postou um código sem dizer o que ele significa ou que problema está dando..". Entende? *** Resumindo: O que você tentou fazer e o que está dando errado? No aguardo. adicionado 15 minutos depois ADENDO: Em relação ao algoritmo para "descobrir" a diferença, sugiro o seguinte... ESQUEÇA o C/C++... tente fazer essa verificação no papel. Se você tivesse uma lista com 8 números, como você encontraria o maior intervalo? -
VisualG Parâmetros e Procedimentos VisualG
Simon Viegas respondeu ao tópico de DiogoR00 em Programação - iniciantes
Olá. De um modo geral o primeiro é mais "correto". Nele, o que se precisa do "mundo externo" é enviado por parâmetro. No segundo, está usando variáveis globais... é mais pobre. adicionado 14 minutos depois A dica é simples... de um modo geral, tudo que um método precisa ou deve ser criado dentro dele, ou é enviado por parâmetro.. Inclusive, as variáveis do parâmetro são próprias também, poderia ser assim: algoritmo "FazSomaProcedimento" var X, Y: Inteiro procedimento Soma(X, Y: Inteiro) inicio escrevaL("Recebi o valor ",X) escreval("Recebi o valor ",Y) escreval("A soma entre os dois e ",Y + X) fimProcedimento inicio X <- 5 Y <- 3 Soma(X, Y) fimAlgoritmo Ou seja, o X e Y ali do parâmetro não tem não tem nada a ver com o X e Y globais (apenas que coincidentemente tem as mesmas nomenclaturas). Essa é uma outra vantagem. Você pode dar as nomenclaturas que quiser... inclusive criar outros métodos com as mesmas... cada método é independente. Outro ponto importante sobre parâmetros, é sobre o seu tipo. Ela pode ser POR VALOR ou POR REFERÊNCIA. Quando é por valor, a variável que está no parâmetro recebe apenas uma cópia do valor da variável utilizada... daí, mesmo que você altere o valor da variável local no procedimento, a variável externa continuará intacta. Já se passar por referência, em vez de receber o valor, vai receber a referência da variável em si.. ou seja, "o endereço de memória". Daí, ao alterar a variável local, vai na verdade alterar a variável global, pois essa variável local é uma referência a variável que foi passada ao invocar o método. Para usar como referência, basta usar o var. Ex.: algoritmo "FazSomaProcedimento" var X, Y: Inteiro procedimento Soma(var X:inteiro; Y: Inteiro) inicio escrevaL("Recebi o valor ",X) escreval("Recebi o valor ",Y) X <- X+1 escreval("Adicionei 1 ao X ",X) Y <- Y+1 escreval("Adicionei 1 ao Y ",Y) escreval("A soma entre os dois e ",Y + X) fimProcedimento inicio X <- 5 Y <- 3 Soma(X, Y) escreval("Valor atual de X",X) escreval("Valor atual de Y",Y) fimAlgoritmo -
VisualG Algoritmos, mostrar quantidade de divisores
Simon Viegas respondeu ao tópico de Marcelo Saldanha em Programação - iniciantes
Olá. @Marcelo Saldanha, na sua pergunta já tem a resposta. Não é para mostrar os divisores, mas sim a quantidade de divisores, logo em vez de mostrar ao encontrar um divisor, vá "contando".. Após mostra a quantidade. Abaixo segue um com essa alteração, mais um conjunto de outras sugestões. Sugiro que tente ajustar o seu próprio código antes... mas caso deseje, dê uma analisada no código e vá comparando abaixo. Tente entender cada mudança. Caso tenhas dúvidas, é só perguntar. Ai, a depender vai implementando uma coisa ou outra no seu. Algoritmo "Atividade 3" Var cabecalho :caractere numero :inteiro //numero sendo verificado (de 1 a 20) quadrado :inteiro //quandro do número cubo :inteiro //cubo do número qtdDivisores:inteiro //quantidade de divisores do número divisor :inteiro //auxiliar para verificar a quantidade de divisores Inicio cabecalho <- "Numero Quadrado Cubo Divisores Primos" escreval(cabecalho) para numero de 1 ate 20 faca //o número em si escreva(numero:4) //quadrado do número quadrado <- numero * numero escreva (quadrado:8) //cubo do número cubo <- quadrado * numero escreva (cubo:8) //quantidade de restos qtdDivisores <- 0 para divisor de 1 ate numero faca se (numero mod divisor = 0) ENTÃO {escreva(divisor:8)} //não é para escrever qtdDivisores <- qtdDivisores + 1 fimse fimpara escreva (qtdDivisores:6) //primo se qtdDivisores = 2 ENTÃO escreva ("":7,"Sim") senao escreva ("":7,"Nao") fimse escreval("") fimpara fimalgoritmo -
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
-
VisualG Reiniciar variável contadora no laço de repetição "para"
Simon Viegas respondeu ao tópico de Fábio Tempesta em Programação - iniciantes
Olá. Não pode usar vetores? sério? vai dar uma trabalheira danada. Já conseguiu resolver, posta o código aqui para analisarmos e se tiver dúvidas, onde... -
Portugol Calcular salário a ser pago
Simon Viegas respondeu ao tópico de Aploxy em Programação - iniciantes
E o enunciado? -
C Codigo para comparar datas não funcionando corretamente
Simon Viegas respondeu ao tópico de GustavoMdancers em C/C#/C++
@isrnick, essa fórmula É absurdamente simples.. mas ao mesmo tempo, talvez, não tão trivial para entender e também para se chegar a ela! Deixa eu vê se eu entendi direito: int compara_datas(int dia1, int mes1, int ano1, int dia2, int mes2, int ano2){ int d; if (d = ano1 - ano2) return d; //se os anos são diferentes, retorne a difirença entre eles if (d = mes1 - mes2) return d; //senão, se meses são diferentes, retorne a diferença entre eles return dia1 - dia2; //senão, retorna a diferença dos dias //no programa principal, se a resposta for negativa, um delete é maior, se positiva, o outro é maior... ou são iguais } Seria isso? (obs.: fiquei com preguiça de associar o positivo e negativo à respectiva ordem) Mas o mais interessante é a sentença do if... pelo que eu entendi, faz uma atribuição na própria sentença, e verifica o valor de d. No caso, usado 0 como "falso" e diferente de 0 "verdadeiro"... Correto? Show de bola! PS: só para deixar mais claro: Seria o mesmo que isso: int compara_datas(int dia1, int mes1, int ano1, int dia2, int mes2, int ano2){ int d; d = ano1 - ano2; if (d) return d; d = mes1 - mes2; if (d) return d; return dia1 - dia2; } Confere? Muito bacana! adicionado 2 minutos depois Tudo indica que sim... tanto pelos cálculos, tanto por testes. ADENDO: Se habilita? -
C Codigo para comparar datas não funcionando corretamente
Simon Viegas respondeu ao tópico de GustavoMdancers em C/C#/C++
@Boko Moko, achei: Ficaria assim: float data1 = (ano1 * 372 + mes1 * 31 + dia1); float data2 = (ano2 * 372 + mes2 * 31 + dia2); obs.: eu tinha a impressão que o pesoM também poderia ser menor, mas me enganei. Então, APARENTEMENTE a fórmula seria: pesoA=maxMes*pesoMes Mas já adianto que NÃO É!!! rs. Teria que se aprofundar mais um pouco para achar... kkkk RESUMINDO: De fato o peso mínimo do ano é menor (372, em vez de 403)... mas o peso do mês fica em 31 mesmo.. isso tudo se usarmos pesoD = 1. Daí, fica faltando apenas achar as fórmulas gerais para os pesos... Correto? Att adicionado 38 minutos depois ps: achei a fórmula geral. Mas por enquanto deixo para quem quiser tentar. Att. -
Outro Como resolvo esse exercício ?
Simon Viegas respondeu ao tópico de Clemilda Nazaré em Programação - iniciantes
@Clemilda Nazaré, por favor, edite sua postagem anterior (clique no botão Editar) Remova o código, e insira novamente utilizando a tag CODE. Basta antes clicar no botão <> e colar o código lá e insere. Depois salva! No aguardo. -
C Codigo para comparar datas não funcionando corretamente
Simon Viegas respondeu ao tópico de GustavoMdancers em C/C#/C++
Olá. @GustavoMdancers, alguma novidade? Como pode ver, já foram apresentados algumas formas diferentes para resolver o mesmo problema: 1# Usando uma fórmula simples com peso: obs.: só que usando LONG no lugar no FLOAT. 2# Utilizando uma cadeia de if/else: 3# Usando struct e uma método: 4# E usando vetores e um método **** Ai, a sugestão seria verificar o que se encaixa melhor para você. Caso deseje, tente implementar um código, ai posta o código completo final, e caso tenha dúvidas, indicar onde. @Boko Moko, para não poluir o comentário... basta abrir o o botão abaixo: -
Outro Criar ficha de cadastro de pessoas. Em whattsapp. Em PDF preferencialmente
Simon Viegas respondeu ao tópico de Hellrais3r em Programação - iniciantes
Eu acho seria isso que estão propondo. Mas se eu não me engano, só consegue abrir arquivos do Word, quem tiver o Word no celular (ou programa que consiga editar). Não serve "formulários onlie", não? Tem por exemplo o do Google: https://docs.google.com/forms/u/0/ adicionado 0 minutos depois *online -
C Trabalho em c para faculdade
Simon Viegas respondeu ao tópico de Anderson Luan Rodrigues em C/C#/C++
Prezado, Seja bem-vindo ao Clube do Hardware; obrigado por sua participação! Quanto à sua dúvida, para podermos lhe ajudar, nós precisamos de mais alguns detalhes, tais como: parte do código que já foi feito; caso não tenha um código feito, qual o algoritmo que você pretende usar para resolver o problema; você tem experiência com esta linguagem de programação? Por favor, não leve para o lado pessoal, mas o nosso objetivo principal aqui é ajudar você a resolver o problema, se simplesmente postássemos um código já pronto, você nunca aprenderia de fato... Atenciosamente, Equipe Clube do Hardware -
Portugol Calcular salário a ser pago
Simon Viegas respondeu ao tópico de Aploxy em Programação - iniciantes
Olá. @Aploxy, qual o enunciado do problema? Pois é necessário analisar as "regras" especificamente, por exemplo: Esse "entre" inclui os 5 e o 7? ou seja, vai suar >= ou >... assim como <= ou <? Veja o exemplo: Por que num lado usou >= e no outro < (sem o =)? Resumindo: Se possível, poste o enunciado completo, assim como o código atual para analisarmos. No aguardo. -
Outro Como resolvo esse exercício ?
Simon Viegas respondeu ao tópico de Clemilda Nazaré em Programação - iniciantes
Olá. Seria algo assim mesmo... eu que não me atentei ao enunciado.. Mas veja, a base é a mesma... "o que muda é pergunta". Ou seja, teria que "coletar" os dados referentes ao que está pedindo... Tenta fazer e posta o código aqui. No aguardo. -
C Codigo para comparar datas não funcionando corretamente
Simon Viegas respondeu ao tópico de GustavoMdancers em C/C#/C++
Já concordamos que de fato não seria Agora estou um pouco ocupado... mais tarde vou tentar dar uma revisada na sua lógica.. PS: eu acho que o peso na verdade será bem menor... como sugerido: Ou seja, ao levar isso em consideração, a conta (acho que) muda. Mas como disse, preciso deixar para mais tarde. Att. -
Outro Como resolvo esse exercício ?
Simon Viegas respondeu ao tópico de Clemilda Nazaré em Programação - iniciantes
Segue um esboço para servi de referência. Perceba a nomenclatura das variáveis e outras pequenas alterações... tentei deixar o código falar por si. var n :inteiro nota :inteiro idade :inteiro nota5, nota4, nota3, nota2, nota1 :inteiro somaIdades :inteiro qtdIdades :inteiro mediaIdades :inteiro INICIO para n de 1 ate 30 faca escreva("INFORME OS DADOS DO PRÓXIMO QUESTIONÁRIO") //LEITURA DOS DADOS DO QUESTIONÁRIO escreva("Opinião (de 1 a 5): ") leia(nota) escreva("Idade : ") leia(idade) //INICIA O PROCESSAMENTO DOS DADOS //verifica e acumula a nota informada se (nota==5) então nota5 = nota5 + 1 senao se (nota==4) então nota4 = nota4 + 1 senao se (nota==3) então nota3 = nota3 + 1 senao se (nota==2) então nota2 = nota2 + 1 senao nota1 = nota1 + 1 somaIdades = somaIdades+1 //acumula as idades qtdIdades = qtdIdades + 1 //atualiza a quantidade de idades fimPara //FINALIZA O PROCESSAMENTOS DE DADOS //calcula a média das idades mediaIdade = somaIdade/qntIdade //EXIBE OS DADOS AQUI É COM VOCÊ FIMALGORITMO Na hora de calcular a média, poderia utilizar n, em vez de qntIdades. Tanto faz No aguardo. -
Outro Como resolvo esse exercício ?
Simon Viegas respondeu ao tópico de Clemilda Nazaré em Programação - iniciantes
Em qual linguagem de programação está sendo feito? Qual o compilador ou site usa para fazer rodar? -
Outro Como resolvo esse exercício ?
Simon Viegas respondeu ao tópico de Clemilda Nazaré em Programação - iniciantes
Não cara, o que estou expondo é: Para todos os fins, o exercício NÃO TEM NADA A VER COM VETORES. Vetores é algo que não existe ainda, sacou? Desapega adicionado 1 minuto depois ....uso de vetores seria uma "visão posterior". Aprender coisas novas (ir além do permitido) -
Outro Como resolvo esse exercício ?
Simon Viegas respondeu ao tópico de Clemilda Nazaré em Programação - iniciantes
Olá. 1# @Clemilda Nazaré, sobre: Então, se não deu vetores, esqueça vetores. Você tem que usar o que já foi dado! 2# Não, não está... talvez essa impressão ocorra, pois ao aprendermos de uma "suposta melhor forma" ou mais tradicional, deixamos de "enxergar" de uma outra. 3# Vamos lá: Segue o enunciado: Eu já comentei sobre como fazer lá no meu primeiro comentário... Talvez não tenha fica tão claro, mas 1. seria com vetores, o segundo sem vetores, ou seja, para fazer esse exercício não necessariamente precisa de vetores... Como não deu vetores ainda, pode fazer dessa forma: Vou tentar reformular... - Você vai ler UM questionário, e acumular os dados, ou seja, vai contato a quantidade de tipos e acumulando as idades. Após, ler mais um questionário... e por ai vai. Veja que não precisa de vetores... os dados lidos não interessam posteriormente, logo não precisa "guardar". Após um questionário, faz o que tem que fazer. Após ler todos os questionário, terá já a quantidade de cada tipo, falta apenas calcular média. Que será o que acumulou de idades dividido pela quantidade de idades. Tente seguir esse algoritmo acima e posta o código aqui, caso tenha dúvidas, é só informar onde. Lembrando: não tem nada a ver com vetores.. no momento essa palavra não existe no nosso vocabulário. ADENDO: Faça inicialmente um questionário com no máximo 3 alunos!!! Mais pra frente ajuste para quantos alunos quiser (a lógica é a mesma) No aguardo. -
C Codigo para comparar datas não funcionando corretamente
Simon Viegas respondeu ao tópico de GustavoMdancers em C/C#/C++
Parei para pensar aqui agora... apenas para efeito didático, acho que o limite inferior do peso do ano está abaixo do necessário, ou seja, está inválido (já que poderia ocorrer do "mes+dia" superar) Vejamos: Partimos do menor para o maior... ou seja, pegar os pesos da direita para esquerda... Então, os dias com seu peso tem que ser menor que 1 mês com o seu peso (pois se com 1 é maior, com qualquer outro valor também será). Algo assim: A condição geral seria: mesX * pesoM > diaY *pesoD Ou seja, o resultado de um mês (mês x peso) de uma data, não pode ser maior que o resultado do dia (dia x peso) para a outra data. Caso contrário, poderia ocorrer de um resultado do dia ultrapassar um resultado de um mês (o que procuramos é que NUNCA ocorra isso). Então, a pior hipótese possível seria a quantidade máxima de dias pela quantidade mínima de meses. Algo assim: mesX = 1 diaY = 31 mesX * pesoM > diaY *pesoD //o mesmo que "1 * pesoM > 31 * pesoD" Logo, 1 * pesoM > 31 * pesoD pesoM > 31pesoD Ou seja, o pesoM tem que ser maior que o pesoD * 31. Para facilitar o raciocínio, daremos pesoD = 1. Logo, de fato pesoM > 31. OK. Agora vamos tentar verificar o peso do Ano (para que NUNCA seja ultrapasso pelo "mes + dia"). Então, da mesma forma, a pior hipótese seria quantidade máxima de dias, mais a quantidade máxima de meses pela quantidade mínima de anos. Algo assim: anoX = 1 diaY = 31 mesY = 12 anoX * pesoA > mesY * pesoM + diaY * pesoD //o mesmo que "1 * pesoA > 12 * pesoM + 31 * pesoD" Logo, 1 * pesoA > 12 * pesoM + 31 * pesoD" pesoA > 12*pesoM + 31pesoD Então, se predefinirmos os pesos anteriores, por exemplo: pesoD = 1 pesoM = 32 (poderia ser 31,000...1 em diante, mas para arredondar) Teríamos algo como: pesoA > 12*32 + 31*1 pesoA > 384 + 31 pesoA > 415 Daí, teríamos: pesoD = 1 pesoM = 32 pesoA = 416 (poderia ser 415,000...1 em diante, mas para arredondar) RESUMINDO: Pelos argumentos apresentados, o menor peso inteiro para o ano seria 416. Correto? Não, acho que não está, rs... pois não estou levando em consideração que um ano vai ser maior que o outro, OU o mês vai ser maior que o outro... logo, teria que rever tudo ai... kkkkk Mas como já escrevi, vou deixar para analisar depois... tô com fome!!! Se alguém quiser arriscar descobrir "os mínimos pesos" fiquem a vontade... T+ -
C Codigo para comparar datas não funcionando corretamente
Simon Viegas respondeu ao tópico de GustavoMdancers em C/C#/C++
Olá a todos. 1# @GustavoMdancers, em relação ao sua lógica inicial, o programa é que você está comparando as datas de forma equivocada... a referência de "data maior" ou "data menor" é uma cascata, ou seja, vem da "maior" referência para "menor".. como assim? então, inicialmente o que importa é só o ANO. É ele que manda! se empatar, vem o MES, se empatar vem o DIA... se empatar são iguais... sacou? (se fosse seguir a cascata, viria a HORA, se empatar viria os MINUTOS... depois SEGUNDOS, depois DÉCIMOS_DE_SEGUNDOS, depois CENTÉSIMOS_DE_SEGUNDOS, MILÉSIMOS_DE_SEGUNDOS.... etc) Só importa a o nível atual... o que vem depois não faz diferença! Veja: Observação inicial: acho que a sintaxe ficou errada também, no caso precisaria dos parênteses para separar as expressões, ficaria algo assim: if ((dia_1 >= dia_2) && (mes_1 >= mes_2) && (ano_1 >= ano_2) && (dia_2 > dia_1) && (mes_2 > mes_1) && (ano_2 > ano_1)) Então, perceba que você compara o dia, o mês e ano como se tivessem no mesmo nível da cascata... ou seja, como se todos os "níveis" tivessem que ser "maior" ou "menor" ao mesmo tempo... mas não precisa... ex.: 30/12/1980 é menor que 20/11/2015. Perceba que o dia e mês não importou... quem decidiu foi o ano... pois ele está no "início da cascata". Entende? "Corrigindo" a sua lógica, ficaria algo assim: #include<stdio.h> int main () { int dia_1, dia_2, mes_1, mes_2, ano_1, ano_2; printf ("Insira a primeira data:\n"); scanf ("%d %d %d", &dia_1, &mes_1, &ano_1); printf ("Insira a segunda data :\n"); scanf ("%d %d %d", &dia_2, &mes_2, &ano_2); if (ano_1 > ano_2) printf("A primeira data é mais recente que a segunda! \n"); else if (ano_2 > ano_1) printf("A segunda data é mais recente que a primeira! \n"); else if (mes_1 > mes_2) printf("A primeira data é mais recente que a segunda! \n"); else if (mes_2 > mes_1) printf("A segunda data é mais recente que a primeira! \n"); else if (dia_1 > dia_2) printf("A primeira data é mais recente que a segunda! \n"); else if (dia_2 > dia_1) printf("A segunda data é mais recente que a primeira! \n"); else printf("As datas são iguais! \n"); return 0; } Uma forma de deixar o código seria assim: #include<stdio.h> int main () { int dia_1, dia_2, mes_1, mes_2, ano_1, ano_2; printf ("Insira a primeira data:\n"); scanf ("%d %d %d", &dia_1, &mes_1, &ano_1); printf ("Insira a segunda data :\n"); scanf ("%d %d %d", &dia_2, &mes_2, &ano_2); if (ano_1 > ano_2) printf("A primeira data é mais recente que a segunda! \n"); else if (ano_2 > ano_1) printf("A segunda data é mais recente que a primeira! \n"); else if (mes_1 > mes_2) printf("A primeira data é mais recente que a segunda! \n"); else if (mes_2 > mes_1) printf("A segunda data é mais recente que a primeira! \n"); else if (dia_1 > dia_2) printf("A primeira data é mais recente que a segunda! \n"); else if (dia_2 > dia_1) printf("A segunda data é mais recente que a primeira! \n"); else printf("As datas são iguais! \n"); return 0; } Perceba que não precisou de ifs para "iguais". Pois são condições mutuamente excludentes, ou seja, se for uma, não pode ser outras... Como assim? então, só existem 3 possibilidades. OU é maior, OU é menor OU é igual. Logo, se não foi uma das duas primeiras, NECESSARIAMENTE será a terceira. Não existe outra possibilidade lógica!!! É uma tricotomia. Ao mesmo tempo que se for uma das duas anteriores não tem como ser uma posterior... logo, entrando a necessidade dos else entre um mesmo nível... ou seja, se ano1 > ano2, não tem como ao mesmo tempo ano2 > ano1... é uma impossibilidade lógica! Obs.: perceba que já entre ano e mês também tem else devido a tal hierarquia da cascata, ou seja, ANO temais mais prioridade que mês, logo, um ano for maior que o outro, não se deve tentar verificar o mês e nada que vêm depois! 2# Ai, uma outra forma seria a demonstrada por @Boko Moko. Perceba que a base é a mesma, ou seja, é voltada na cascata... A ideia continua que o ANO define o maior e menor... se empatar, vem o MES.. se empatar vem o DIA. Então, essa lógica funciona através do peso... ao dar um peso maior, grande o suficiente para um nível superior, fará que os níveis inferiores percam a sua força, suficientemente para não conseguir interferir no resultado final... Veja... ao multiplicar ANO por 10000, a data que tiver o ano maior, sempre terá um resultado (na adição com MES e DIA) maior que a outra data... pois, independente do MES e DIA que o menor tiver, não conseguirá ultrapassa o que o ano do maior ano já deu. Ex.: 1/1/2 e 31/12/1 Na primeira data, teremos 2*10000, que dá 20000. Na segunda, teremos 1*10000, que dá 10000... Até ai o subtotal da primeira data é maior, correto? então, se incluir lá a conta do mês e dia para a segunda data, jamais seria maior que 20000, pois o MES e DIA juntos não tem peso suficiente para ser maior que 10000, logo necessariamente vai dar um valor menor, e a primeira data continuará sendo maior. Obs.: Sobre: Então, o possível problema aqui está na "sintaxe" e características da linguagem, ou seja, a lógica em si parece está certa, mas devido as funcionalidades do C, acabou dando problemas de cálculos computacionais, ou seja, mais uma coisa que precisaria se atentar: "Por que usar um tipo numérico ou outro? *** RESUMINDO: Entendo que a tua base é mais didática... partindo do TUA lógica inicial, e com "auxílios externos"; Já a segunda é mais "evoluída", e parte da lógica de TERCEIROS, ou seja, "necessariamente" teria que "assumir" ao professor/facilitador que "aprendeu" a partir de uma base externa a sua mente. (no caso, que não partiu da sua própria evolução e raciocínio no desenvolvimento do algoritmo). Minha sugestão? Independente de qual for usar, contextualize o aprendizado... num que precisou "corrigir" a sua lógica, noutro que "copiou" de terceiros, mas que conseguiu absorver a lógica. Resumindo: seja honesto... a depender, entrega/mostra os dois códigos! No aguardo. -
Java Uso da estrutura condicional e controle
Simon Viegas respondeu ao tópico de Hokague em Java/Android SDK
Tópico recuperado e movido para o sub-Fórum Java. adicionado 3 minutos depois @Hokague, e sobre: O que acontece quando compila do CMD? O que acontece quando compila no compilador virtual? Então. 1. Poste o código completo que está tentando compilar; 2. Informa qual erro está dando ao tentar compilar, para verificarmos se está relacionado ao código em si, ou alguma configuração do computador ou o que for... 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