Ir ao conteúdo

arfneto

Membro Pleno
  • Posts

    6.526
  • Cadastrado em

  • Última visita

Tudo que arfneto postou

  1. Esse código que você postou funcionou? Só mudando o parâmetro de compilação? Poda postar o código como funcionou? Queria rodar no Windows
  2. Antes de declarar main() você deve declarar os protótipos das funções que vem a seguir no texto ou que estão em outros arquivos, algo como escrever bool strings_iguais(char[], char[]); veja o exemplo de @AdrianoSiqueira acima... Assim o compilador sabe ao encontrar a função quais são os parâmetros e o valor de retorno. Não se costuma repetir os nomes dos argumentos porque não interessam nesse ponto. Entenda que essa função poderia estar em outro arquivo, como strings-iguais.c por exemplo... Não entendo a razão de usar um #include e uma biblioteca apenas para poder declarar algo como bool. Zero é falso. Pronto. Bastaria isso. Mas como você queria bool perdeu seu tempo duas vezes. Primeiro porque se tivesse declarado int strings_iguais(char[], char[]); já estaria certo desde antes. Mas como declarou _Bool ainda precisou aprender que era bool. E precisou aprender que precisava de um #include stdbool.h. E você sempre poderia testar if strings_iguais( "casa" "casa" )... se retornasse 1 para true e zero para false por exemplo, desde os anos 70.
  3. ei que tem que encontrar o maior numero 1º, mas depois disso, nao faco ideia de ocmo fazer Esse não é um exercío de programação e sim um exercício de lógica. Se T é o total de valores e você quer o maior termo: basta fazer o que eu acho que você já fez: um loop vê todos os caras e marca o maior. Agora para o n-ésimo maior você tem que N <= T, como no seu exemplo com 8 números. Lógico que para N = T você vai acabar mostrando o menor número, já que ele ficou sózinho... O quarto maior de uma série de 4 vai ser também o menor dos quatro. Para os outros casos, apenas use um loop até N e sempre salve o maior até aqui. E ignore todos maiores que esse valor. Ex: Seguindo essa nomenclatura considere a série [ 6,5,4,3 ] e N = 3. T = 4 claro. O primeiro loop vai definir Max = 6 O segundo loop vai ser igualzinho o primeiro, calcular o maior valor, desconsiderando os valores maiores que o maior até aqui, que era 6. Vai identificar o 5 O terceiro loop vai dar a resposta porque N=3. Vamos passar por todo o vetor para encontrar o máximo, mas desprezando qualquer valor maior que o anterior, 5 Acho que já entendeu: são apenas dois loops e uma variável que você pode chamar de int gatilho = INT_MAX; // o maior valor de um int no seu compilador, ou int gatilho = +2147483647; // o maior valorpositivo com 4 bytes a cada loop você coloca o maior valor lá e esse vai ser o gatilho para pular os maiores achados em passagens anteriores. É só isso. Esse valor tem que ser maior que todos então pode usar essa constante que sempre tem o valor certo, ou simplesmente forçar o maior número como está acima. Outro exemplo: [ 5, 6, 11, 12, 17, 18, 23, 24 ] : T = 8, N = 5, Max = ? Sim, essa é a série do enunciado. Para N = 5 eis o comportamento: 24 no primeiro loop, desprezando os valores >= INT_MAX --- que é o maoir valor possível. Gatilho passa a ser 24 23 no segundo loop, desprezando os maiores >= 24. Gatilho passa a ser 23 18 no segundo loop, desprezando os maiores >= 23. Gatilho passa a ser 18 17 no segundo loop, desprezando os maiores >= 18. Gatilho passa a ser 17 12 no segundo loop, desprezando os maiores >= 17. Gatilho passa a ser 12 Fim
  4. Vamos chamar então de somadora de 2 bits Use uma tabela. São poucas condições. if else if else e tal, de acordo com a tabela. Mais curto
  5. Enquanto você não ler o último não sabe a média. Depois que souber você usa outro loop e simplesmente conta quantos estão acima da média
  6. não tem não. scanf() foi escrita para ler entrada formatada --- daí o nome --- você pode ler um arbitrário número de valores. E não tem esse concceito de linha. Apenas de máscara, o primeiro parâmetro Você está certo de que seu professor reforça essa ideia? É uma ideia besta. Você tem um livro texto ou uma apostila? Entendo não poder usar funções prontas, como as de biblioteca, porque muitas vezes a solução pedida já está na biblioteca, mas comandos da linguagem? Não tem sentido. É como aprender uma linguagem sem poder falar as palavras novas que você ouve, até sua mãe te ensinar alguma "oficialmente" Por falar em funções, porque pow(b,2)? Não gosta de b*b? Seu programa está bom
  7. Vou te mostrar um programa que endereça essas coisas, usando recortar e colar e seu próprio código. Só pra te mostrar como declarar e passar parâmetros e tal. É só um exemplo bem primário para tentar ajudar. Mudei um pouco a declaração das estruturas para ficar mais legível. Preste atenção às diferenças. O programa preenche dois registros em main() e passa para uma função mostrar na tela. Depois tem uma outra só pra tratar o conjunto. Não tem nenhum sentido prático. Só pra você entender. Eis o que sai na tela Nome: Primeiro Telefone +55 (12) 9 1234-5678 Endereco Rua: Rua um Numero: 1234 Bairro: Vila 1 Cidade: Cidade 1 CEP: 32000-123 Nome: Segundo Telefone +56 (34) 9 8765-4321 Endereco Rua: Rua Dois Numero: 45 Bairro: Jardim 2 Cidade: Cidade 23 CEP: 12345-678 Nome do primeiro funcionario: Primeiro CEP do segundo funcionario: 12345-678 E o programa /*Repita o programa anterior criando um vector que permita guardar ate 20 contactos. O programa devera: o pedir o numero de contactos a inserir o permitir inserir os n contactos o perguntar qual o numero do contacto que pretende visualizar o mostrar contacto pretendido o repetir todo o processo se o utilizador assim o desejar*/ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> struct s_endereco { char rua[50]; char numero[6]; char bairro[30]; char cidade[30]; char codigo_postal[10]; }; typedef struct s_endereco Endereco; struct s_pessoal { char nome[50]; char telefone[25]; Endereco endereco; }; typedef struct s_pessoal Pessoal; void funcionarios(Pessoal[]); void mostra(Pessoal); int main() { Pessoal cadastro[20]; // primeiro strcpy(cadastro[0].nome, "Primeiro"); strcpy(cadastro[0].telefone, "+55 (12) 9 1234-5678"); strcpy(cadastro[0].endereco.rua, "Rua um"); strcpy(cadastro[0].endereco.numero, "1234"); strcpy(cadastro[0].endereco.bairro, "Vila 1"); strcpy(cadastro[0].endereco.cidade, "Cidade 1"); strcpy(cadastro[0].endereco.codigo_postal, "32000-123"); // segundo strcpy(cadastro[1].nome, "Segundo"); strcpy(cadastro[1].telefone, "+56 (34) 9 8765-4321"); strcpy(cadastro[1].endereco.rua, "Rua Dois"); strcpy(cadastro[1].endereco.numero, "45"); strcpy(cadastro[1].endereco.bairro, "Jardim 2"); strcpy(cadastro[1].endereco.cidade, "Cidade 23"); strcpy(cadastro[1].endereco.codigo_postal, "12345-678"); mostra(cadastro[0]); mostra(cadastro[1]); funcionarios(cadastro); return; } void mostra(Pessoal funcionario) { printf("\n"); printf("Nome: %s\n", funcionario.nome); printf("Telefone %s\n", funcionario.telefone); printf("Endereco\n"); printf("Rua: %s\n", funcionario.endereco.rua); printf("Numero: %s\n", funcionario.endereco.numero); printf("Bairro: %s\n", funcionario.endereco.bairro); printf("Cidade: %s\n", funcionario.endereco.cidade); printf("CEP: %s\n", funcionario.endereco.codigo_postal); return; }; // mostra() void funcionarios(Pessoal f[20]) { printf("\n"); printf("Nome do primeiro funcionario: %s\n", f[0].nome); printf( "CEP do segundo funcionario: %s\n", f[1].endereco.codigo_postal); return; }; // funcionarios()
  8. Ainda está um pouco longe de funcionar... funcionarios(0); Que pretende com essa linha? for (int i = 0; i < n; i++) { printf("Digite o Nome do funcionario: "); // Estrutura Pessoal scanf("%s", funcionario[20].nome); printf("Digite o Telefone do funcionario: "); // Estrutura Pessoal scanf("%s", funcionario[20].telefone); ... E aqui? Você reservou um índice para ler os funcionários, esa variável 'i'. Mas está sempre usando o índice ]20] que sequer existe, já que eles vão de 0 a 19 inclusive. Era pra usar o indice Acho que não precisa ler todos os 20 sempre ou vai levar uma época pra testar isso. Melhor você permitir que o cara entre com um e pergunte se ele quer ler mais, até 20. Melhor ainda seria você não ler nenhum noo começo. Apenas crie dois constantes e termine o programa. O enunciado é tão ruim que além de ter aquele título sem sentido mostra uma descrição de endereço com 5 campos e a estrutura com 4... Sumiu o bairro. Então você lê até os 20 ou até o usuário dizer que não quer mais entrar com contatos. E aí mostras essas operações para ele e executa até ele dizer que quer terminar....
  9. Ao menos as duas que perdeu, certo? Você não tem um livro-texto? Uma apostila ao menos? cin cout e cerr são como filtros, chamados de stream nessa linguagem. cout e cerr mostram a princípio na tela o que recebem e cin lê do teclado. char c; cout << "Entre com uma Letra: "; cin >> c; por exemplo
  10. /*Repita o programa anterior criando um vector que permita guardar até 20 contactos. O programa deverá: o pedir o número de contactos a inserir o permitir inserir os n contactos o perguntar qual o número do contacto que pretende visualizar o mostrar contacto pretendido o repetir todo o processo se o utilizador assim o desejar*/ Não entendi. Primeiro você diz que não conseguiu e depois que não sabe se está correto. Se você sabe que não conseguiu sabe que não está correto. Você listou 5 itens no início. Seu programa está funcionando para qual deles? Devia postar outro tópico para outro problema, assim é mais fácil de alguém ver e poder ajudar. E postar um link com um pdf e o número do problema é um pouco chato para alguém que quer ajudar. Precisa clicar num link, baixar um anexo, abrir em outro programa... Compare com isso: E isso Pronto. Teria todo o necessário aqui. Note que o título Sumário: Representações estruturadas de dados não homogéneos. Não faz sentido. Para uma struct{} tanto faz se os dados são homogêneos ou não. Trata-se apenas da função de agregar dados em um registro. É mesmo essa a grafia aí: homogéneos e não homogêneos? Sobre seu programa número dois: Você está perguntando ANTES quantos contatos vai processar. Isso não condiz com o enunciado: O utilizador pode consultar dois contatos e depois querer ver outro sem saber antes que queria ver 3. Apenas coloque uma opção no menu para terminar as consultas. O número que você pergunta antes é o total de contatos a inserir, Depois de inseridos os N contatos --- até 20 --- você deve usar outro loop para permitir as consultas enquanto o usuário quiser, ou mesmo inserir algum outro contato.
  11. F6? não seria control-shift-B para build ou F5 para rodar com o debugger e Control-F5 para rodar direto? Veja o roteiro que tem nesse endereço. Pode ser que os arquivos que controlam a compilação e execução foram apagados por engano, ou você mudou algo sem querer. Está usando Windows e compilando para Windows? https://code.visualstudio.com/docs/cpp/config-msvc De todo modo pode clicar em Terminal e depois na última opção, para configurar o Build que é como ele cria o programa. E tem o botão para rodar o programa lá em cima
  12. Olá! Consiga um livro! É mais produtivo. Tente cursos online. Tem muitos grátis. Na primeira tela da primeira pesquisa tem esse com 24 aulas em português https://gyncursos.com.br/curso/curso-de-programacao-em-linguagem-c/ Não estou recomendando. Não conheço. Mas precisa de um roteiro
  13. Então você fez o programa que mostra se um número de até 8 dígitos pode ser escrito como a soma dos quadrados de 4 primos consecutivos. E como testar esse trem? Bonus: a tabela pra ajudar a testar o programa Imagine que exista a função unsigned int proximo_primo(unsigned int); que devolve a cada chamada o próximo primo. E você chama com zero para iniciar a sequência. Então esse código // lista os numeros N da forma N = A*A + B*B + C*C + D*D // onde A B C e D sao primos consecutivos unsigned int p1, p2, p3, p4; // os 4 primeiros unsigned int N; proximo_primo(0); p1 = proximo_primo(1); // 2 p2 = proximo_primo(1); // 3 p3 = proximo_primo(1); // 5 p4 = proximo_primo(1); // 7 int seq = 1; while (1) { N = (p1*p1) + (p2*p2) + (p3*p3) + (p4*p4); if (N > 10000000) break; printf( "%3d: %10d = %ld + %ld + %ld + %ld\ \t[%d,%d,%d,%d]\n", seq, N, (p1*p1), (p2*p2), (p3*p3), (p4*p4), p1, p2, p3, p4 ); seq += 1; p1 = p2; p2 = p3; p3 = p4; p4 = proximo_primo(1); }; // while() Mostra que tem 247 valores, e as parcelas e os primos usados 1: 87 = 4 + 9 + 25 + 49 [2,3,5,7] 2: 204 = 9 + 25 + 49 + 121 [3,5,7,11] 3: 364 = 25 + 49 + 121 + 169 [5,7,11,13] 4: 628 = 49 + 121 + 169 + 289 [7,11,13,17] 5: 940 = 121 + 169 + 289 + 361 [11,13,17,19] 6: 1348 = 169 + 289 + 361 + 529 [13,17,19,23] 7: 2020 = 289 + 361 + 529 + 841 [17,19,23,29] 8: 2692 = 361 + 529 + 841 + 961 [19,23,29,31] 9: 3700 = 529 + 841 + 961 + 1369 [23,29,31,37] 10: 4852 = 841 + 961 + 1369 + 1681 [29,31,37,41] ... 241: 9443740 = 2319529 + 2343961 + 2380849 + 2399401 [1523,1531,1543,1549] 242: 9536020 = 2343961 + 2380849 + 2399401 + 2411809 [1531,1543,1549,1553] 243: 9622540 = 2380849 + 2399401 + 2411809 + 2430481 [1543,1549,1553,1559] 244: 9697180 = 2399401 + 2411809 + 2430481 + 2455489 [1549,1553,1559,1567] 245: 9765820 = 2411809 + 2430481 + 2455489 + 2468041 [1553,1559,1567,1571] 246: 9847252 = 2430481 + 2455489 + 2468041 + 2493241 [1559,1567,1571,1579] 247: 9922660 = 2455489 + 2468041 + 2493241 + 2505889 [1567,1571,1579,1583] Listados 247 valores Pra quando você está com a calculadora na mão e uma tabela de primos e quer conferir as parcelas. Mas pode ser que você só queira os números mesmo e aí é só mudar a impressão: proximo_primo(0); p1 = proximo_primo(1); p2 = proximo_primo(1); p3 = proximo_primo(1); p4 = proximo_primo(1); printf("Iniciando com [%d,%d,%d,%d]\n", p1, p2, p3, p4); seq = 0; N = 0; N = (p1*p1) + (p2*p2) + (p3*p3) + (p4*p4); while (N < 10000000) { seq += 1; printf("%8ld ", N); if (seq % 8 == 0) printf("\n"); p1 = p2; p2 = p3; p3 = p4; p4 = proximo_primo(1); N = (p1*p1 + p2*p2 + p3*p3 + p4*p4); }; // while() printf("\n\nListados %d valores\n\n", seq); E ver a tabela toda 87 204 364 628 940 1348 2020 2692 3700 4852 5860 7108 8548 10348 12220 14500 16732 18580 21100 23500 26380 30460 34420 38140 41668 44140 46708 52228 57940 64828 71380 77452 83092 88972 96220 101908 109036 116428 122620 131212 138532 145300 152140 160180 172660 185380 198220 207988 215380 221932 232492 244252 256300 270580 281020 291700 301492 309220 321628 339148 356908 374788 389428 404740 421588 444028 465340 480388 495700 509980 527308 546340 564148 580780 599260 616420 637012 661252 680884 705844 726052 743212 762220 778060 799420 819220 837340 853828 874420 899068 925780 956692 980260 1002172 1032532 1057060 1096732 1136860 1175668 1219108 1250188 1277020 1299700 1327300 1355188 1387948 1416220 1440100 1464220 1486108 1508068 1537780 1572892 1605652 1641100 1669348 1692748 1716220 1750540 1782460 1814668 1855228 1893700 1938052 1988524 2039572 2085460 2128900 2163988 2199460 2235220 2268220 2307532 2341060 2387380 2443468 2506588 2566780 2621452 2663572 2693020 2722540 2752420 2802700 2853220 2903860 2944708 2986228 3027940 3069748 3111748 3165268 3219028 3283900 3360172 3415492 3471052 3523300 3568468 3625588 3682948 3740668 3798748 3845740 3896908 3960460 4020340 4076620 4125052 4169932 4210852 4252012 4309972 4351612 4410244 4460692 4503052 4580020 4644580 4709260 4769908 4804948 4844548 4897588 4955308 5013340 5108260 5189980 5281420 5378020 5447980 5527540 5598220 5669380 5745988 5818108 5890588 5958628 6002620 6051700 6115972 6190612 6305980 6411652 6497740 6574180 6610132 6656500 6703012 6739300 6780868 6838420 6890860 6953980 7098052 7226980 7367068 7513300 7618180 7734772 7874572 8003740 8088580 8156788 8202580 8260060 8323420 8381140 8439100 8509132 8597092 8685172 8767660 8820940 8856628 8904340 8976292 9078700 9193612 9327460 9443740 9536020 9622540 9697180 9765820 9847252 9922660 Listados 247 valores Se alguém precisar o programa está aqui e inclui aquela função gentil. Eu tinha postado isso meses atrás na verdade. #define _CRT_SECURE_NO_WARNINGS #include "limits.h" #include "math.h" #include "stdio.h" unsigned int proximo_primo(unsigned int); int retorna_um_se_primo(unsigned int); int main() { // lista os numeros N da forma N = A*A + B*B + C*C + D*D // onde A B C e D sao primos consecutivos unsigned int p1, p2, p3, p4; // os 4 primeiros unsigned int N; proximo_primo(0); p1 = proximo_primo(1); // 2 p2 = proximo_primo(1); // 3 p3 = proximo_primo(1); // 5 p4 = proximo_primo(1); // 7 int seq = 1; //if (seq == 0) return 0; while (1) { N = (p1*p1) + (p2*p2) + (p3*p3) + (p4*p4); if (N > 10000000) break; printf( "%3d: %10d = %ld + %ld + %ld + %ld\ \t[%d,%d,%d,%d]\n", seq, N, (p1*p1), (p2*p2), (p3*p3), (p4*p4), p1, p2, p3, p4 ); seq += 1; p1 = p2; p2 = p3; p3 = p4; p4 = proximo_primo(1); }; // while() // tinha passado: soma antes printf("\n\nListados %d valores\n\n", seq-1); proximo_primo(0); p1 = proximo_primo(1); p2 = proximo_primo(1); p3 = proximo_primo(1); p4 = proximo_primo(1); printf("Iniciando com [%d,%d,%d,%d]\n", p1, p2, p3, p4); seq = 0; N = 0; N = (p1*p1) + (p2*p2) + (p3*p3) + (p4*p4); while (N < 10000000) { seq += 1; printf("%8ld ", N); if (seq % 8 == 0) printf("\n"); p1 = p2; p2 = p3; p3 = p4; p4 = proximo_primo(1); N = (p1*p1 + p2*p2 + p3*p3 + p4*p4); }; // while() printf("\n\nListados %d valores\n\n", seq); }; // main() int retorna_um_se_primo(unsigned int n) { if (n < 2) return 0; if (n == 2) return(1); if (n % 2 == 0) return(0); unsigned int maior = (unsigned int)sqrt((double)n); unsigned int fator = 3; while (fator <= maior) { if (n % fator == 0) return 0; fator += 2; } // end while return 1; } // end retorna_zero_se_primo() unsigned int proximo_primo(unsigned int n) { static int iniciado = 0; static int proximo = 0; if (n == 0) // inicia a serie { iniciado = 1; proximo = 2; return 1; } // end if if (iniciado == 0) return 0; // erro: tem que chamar com 0 antes if (proximo == 2) { proximo = 1; return 2; } // end if // normal: a a partir daqui retorna o proximo primo for (int i = proximo + 2;; i += 2) if (retorna_um_se_primo(i)) { proximo = i; return proximo; } // end if } // end proximo_primo() // fim do texto adicionado 18 minutos depois Esqueci de postar... como já resolveu o problema, pode comparar com o programa de teste que eu tinha postado, e com a correção de que falei acima, em https://github.com/ARFNeto-CH/chc-4primos ou só ver o programa aqui https://github.com/ARFNeto-CH/chc-4primos/blob/master/cp4.c A saída é algo assim: [Max 8 digitos] Entre com N: 87 2^2 + 3^2 + 5^2 + 7^2 [Max 8 digitos] Entre com N: 204 3^2 + 5^2 + 7^2 + 11^2 [Max 8 digitos] Entre com N: 364 5^2 + 7^2 + 11^2 + 13^2 [Max 8 digitos] Entre com N: 628 7^2 + 11^2 + 13^2 + 17^2 [Max 8 digitos] Entre com N: 940 11^2 + 13^2 + 17^2 + 19^2 [Max 8 digitos] Entre com N: 1348 13^2 + 17^2 + 19^2 + 23^2 [Max 8 digitos] Entre com N: 9922660 1567^2 + 1571^2 + 1579^2 + 1583^2 [Max 8 digitos] Entre com N: 9000000 Nao e possivel a representacao [Max 8 digitos] Entre com N: 41668 97^2 + 101^2 + 103^2 + 107^2 [Max 8 digitos] Entre com N: 0 Encerrando... Era o enunciado afinal Bons estudos!
  14. Como agora o programa roda para vários números tem um erro no que eu escrevi. É preciso reiniciar a quadrilha no início de cada cálculo. Então logo depois do primeiro do{} seria um bom lugar para escrever p1=2; p2=3, p3=5; p4=7; // para um novo N Também pode só atribuir os valores, usando ',' e não ';' e deixando a declaração onde está. p1 = 2, p2 = 3, p3 = 5, p4 = 7;
  15. Essa época nunca chegou pra mim. Sempre tenho o que perguntar Bom que resolveu afinal
  16. Se você não tem um livro texto (não me respondeu) Se você não tem uma apostila (não me respondeu) Se você não acesso às aulas EAD onde teria aprendido isso Foi muito bom ter conseguido resolver 29 de 30 exercícios de sua lista! Graças ao prof. Márcio em https://www.inf.pucrs.br/~pinho/LaproI/ComandosDeRepeticao/Repeticao.html pode ler esse texto em português com exemplos dos 3 comandos de loop que você pode usar aqui em seu último de 30 programas. E tem um exemplo de cada. Veja o que acha. Se tiver uma dúvida, poste aqui
  17. algo como if ( dias < 1 )... if (dias >30 )... if ( km < 1 )... if ( km > 1000 ) .... o operador Ou em C++ é || então pode escrever se quiser if ( (dias<1) || (dias>30) ) num teste só, mas não precisa. imagino que tenha usado algum tipo de loop nas aulas anteriores. Tem ou não tem um livro-texto? uma apostila?
  18. Você não tem um livro-texto? Apostilas? Acesso a aulas anteriores? Sobre os limites, foi você que explicou: a pessoa pode ficar com o carro de 1 a 30 dias. A pessoa pode rodar com o carro de 1 a 1000 km. Você já fez 29 de 30 programas apenas dessa lista. Então deve saber testar esses valores usando algo como if. Ou não?
  19. porque não testou os limites como está no enunciado?
  20. Se colocar o loop todo dentro disso vai rodar até o cara entrar com zero desde que consiga ler algo. Dentro do segundo do{}while está o programa todo claro. Só tem duas maneiras de sair: ou sim ou nao para o numero. E aí volta para ler outro. Sem mais adicionado 0 minutos depois Claro, o código original é a parte que está entre { ... }
  21. nem sei porque ue perguntei mais um loop então adicionado 6 minutos depois if(next < n) { prime = FALSE; while (next < n && prime == FALSE) { prime = TRUE; for (i=3; i < next && prime == TRUE; i+=2) { if (next % i == 0) prime = FALSE; } Não entendi esse trecho. O que pretende fazer? Testou se next está de fato com o próximo primo, como colocando um printf() ali ou usando o debugger? adicionado 17 minutos depois if (next > n) { printf("Nao e possivel a representacao\n"); return 0; }; // if() // se ainda da, rodamos a tabela de primos p1 = p2; p2 = p3; p3 = p4; p4 = next; // e continuamos }; // while() O final pode ser só isso. Despreza o menor primo e continua igualzinho adicionado 20 minutos depois // p4 e o ultimo primo // nas proximas linhas vamos definir next como // sendo... o proximo primo depois de p4 int achou_proximo = FALSE; next = 0; for (long int i = p4 + 2; !achou_proximo; i = i + 2) { unsigned long int maior = (unsigned long int)sqrt((double)i); unsigned long int fator = 3; while (fator <= maior) { if (i % fator == 0) { // entao 'i' nao e primo // forca sair do loop fator = 100000000; // tanto faz } else { fator = fator + 2; } } // end while if (fator != (100000000)) { next = i; achou_proximo = TRUE; }; // if() }; // for() // saindo daqui temos o primo depois de p4 em next Esse trecho funciona. Leia com atenção e teste. Falta só tirar o sqrt(). Mais uns minutos adicionado 30 minutos depois Ok ok troque por essas 3 linhas long int maior = 0; for (maior = 7; (maior * maior) < i; maior += 1); maior = maior - 1; // passou 1 da conta no for E não precisa de math.h
  22. Rodei sim. Mas acho que esse trecho não está ok ainda. Estou conferindo. Coloque uma mensagem lá. Uma raiz quadrada tambem estaria condenada aqui?
  23. Esse é um jeito bem infantil de tentar ensinar. Meio estúpido eu diria. Em especial no caso de matemática ou computação. Mas se é assim não dá pra discutir. Apenas fica mais complicado. E essa dificuldade adicional não vai te ensinar nada.Uma função por exemplo é só um trecho de código com um nome. Só que você chama em um loop sem ter que repetir tudo. Entendeu as coisas que eu falei? Vou ler agora o seu programa considerando as restrições de que falou. Vi que corrigiu muitos dos problemas. adicionado 0 minutos depois Usar um vetor também está off-limits? adicionado 15 minutos depois // o ideal aqui seria passar para o proximo primo direto // mas sem funcoes nao da next = p4 + 2; // p4 e impar if (next > n) { printf("Nao e possivel a representacao\n"); break; }; // if() if (next < n) { prime = FALSE; Por enquanto o programa testa para apenas um número então pode retornar se (next > n) Talvez seja o caso de declarar um novo int, tipo proximo_primo, calcular o valor e a partir dai fazer a rotação deles, desprezando o p1 e voltando ao loop. Acho que é só isso que falta.
  24. Mas você não pergunta nada. Aí fica difícil. Consegue rodar os programs de teste? Tem algo em especial que não entendeu? Quer escolher um problema em particular para olhar em separado?
  25. Não precisa: 0 é false. O resto é true em C. Não pode usar funções? Sei que já perguntei isso. Pode usar labels? Uma versão chique de dizer que o número pode ter até 8 dígitos. O loop não acrescenta nada. Use um valor constante ou o próprio argumento da linha de comando para testar. Depois em 5 minutos você põe um loop Então os primos são consecutivos mesmo? Isso simplifica MUITO as coisas. Perde um pouco da graça, mas simplifica. adicionado 1 minuto depois Entendo quando o instrutor diz que você não pode por exemplo usar qsort() em seu programa de sort, ou strtok() no seu programa de manipulação de strings, mas um break? um continue? Qual o propósito?

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!