Fabiana Santos Posted January 27, 2021 at 11:04 AM Report Share #621081 Posted January 27, 2021 at 11:04 AM algo esta errado com meu codigo e eu nao sei o que é, será que alguem pode me dar uma ajuda. Algumas coisas estao em alemao, já peco desculpas por isso. #include <stdio.h> #include <math.h> #include <stdlib.h> void main() { int gesundHeute = 0; int gesundGestern = 0; int krankeHeute = 0; int krankeGestern = 0; int immuneHeute = 0; int immuneGestern = 0; int anzahlTage = 0; int tage = 0; int gesamtPopulation; float infektionsrate; float immunisierungsrate; int Gesundethousand; printf_s("Infektionsrate:\n"); scanf_s("%f", &infektionsrate); printf_s("Immunisierungsrate:\n"); scanf_s("%f", &immunisierungsrate); printf_s("Gesamtpopulation:\n"); scanf_s("%d", &gesamtPopulation); printf_s("Kranke heute:\n"); scanf_s("%d", &krankeHeute); printf_s("Kranke gestern:\n"); scanf_s("%d", &krankeGestern); printf_s("Anzahl der Tage:\n"); scanf_s("%d", &anzahlTage); for (int i = 0; i <= tage; i++) { gesundHeute = gesundGestern - infektionsrate * (gesundGestern * krankeGestern / gesamtPopulation); printf_s("%d\n", gesundHeute); gesundGestern = gesundHeute; immuneHeute = immuneGestern + immunisierungsrate * krankeGestern; printf_s("%d \n", immuneHeute); immuneGestern = immuneHeute; krankeHeute = gesamtPopulation - gesundHeute - immuneHeute; printf_s("%d \n", krankeHeute); krankeGestern = krankeHeute; Gesundethousand = gesundHeute * (100000 / gesamtPopulation); printf_s("%d\n ", Gesundethousand); } } Link to comment Share on other sites More sharing options...
antseq Posted January 27, 2021 at 02:02 PM Report Share #621083 Posted January 27, 2021 at 02:02 PM viva, o programa parece bem... excepto o ciclo "for" que não faz muito sentido. tens uma variável "int tage = 0" depois um "for (int i = 0; i <= tage; i++)", ou seja, o ciclo "for" só vai correr 1 única vez, para "i=0". cps, Link to comment Share on other sites More sharing options...
AshKetshup Posted January 27, 2021 at 09:37 PM Report Share #621087 Posted January 27, 2021 at 09:37 PM 10 horas atrás, Fabiana Santos disse: scanf_s("%f", &infektionsrate); Boas @Fabiana Santos, vou direto ao assunto: Segundo a pesquisa que fiz acho que a função scanf_s espera não 2 argumentos mas sim 3, sendo o 3º argumento o tamanho esperado do input. Se estiveres já com a variavel previamente declarada com o seu tamanho definido então podes facilmente usar o sizeof([variavel]) no lugar do 3º argumento. Tendo isto em consideração, experimenta o seguinte: scanf_s("%d", &infektionsrate, sizeof(infektionsrate)); source: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=msvc-160 Por favor tem em conta que não testei se funciona. Espero ter te conseguido ajudar. Mas façam o que fizerem nunca façam: sudo apt remove python Link to comment Share on other sites More sharing options...
Fabiana Santos Posted January 28, 2021 at 11:40 AM Author Report Share #621094 Posted January 28, 2021 at 11:40 AM 21 horas atrás, antseq disse: viva, o programa parece bem... excepto o ciclo "for" que não faz muito sentido. tens uma variável "int tage = 0" depois um "for (int i = 0; i <= tage; i++)", ou seja, o ciclo "for" só vai correr 1 única vez, para "i=0". cps, Muito obrigado por responder. Link to comment Share on other sites More sharing options...
Fabiana Santos Posted January 28, 2021 at 11:40 AM Author Report Share #621095 Posted January 28, 2021 at 11:40 AM 14 horas atrás, AshKetshup disse: Boas @Fabiana Santos, vou direto ao assunto: Segundo a pesquisa que fiz acho que a função scanf_s espera não 2 argumentos mas sim 3, sendo o 3º argumento o tamanho esperado do input. Se estiveres já com a variavel previamente declarada com o seu tamanho definido então podes facilmente usar o sizeof([variavel]) no lugar do 3º argumento. Tendo isto em consideração, experimenta o seguinte: scanf_s("%d", &infektionsrate, sizeof(infektionsrate)); source: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=msvc-160 Por favor tem em conta que não testei se funciona. Espero ter te conseguido ajudar. Muito obrigado! Link to comment Share on other sites More sharing options...
rbsrbs_dev Posted January 28, 2021 at 04:00 PM Report Share #621098 Posted January 28, 2021 at 04:00 PM (edited) Boas @AshKetshup , os argumentos adicionais de tamanho são só para os especificadores de conversão %c, %s e %[.@Fabiana Santos para a próxima deves esclarecer melhor o problema e explicares qual o comportamento que estavas à espera, para te podermos ajudar melhor. Mas adiante: Como já foi dito, o teu ciclo for deve ser for (int i = 0; i < anzahlTage; i++) {. Nota o < em vez de =<, caso contrário estarias a iterar mais uma vez já que i está inicializado a 0. Podes eliminar a variável tage. ___ Assumindo que a intenção seja implementares o modelo SIR e pelo facto de estares a iniciar gesundGestern a 0 o que não faz sentido e estares a reescrever krankeHeute sem o utilizares antes, parece-me que este pedido: printf_s("Kranke heute:\n"); scanf_s("%d", &krankeHeute); deveria ser: printf_s("Gesund gestern:\n"); scanf_s("%d", &gesundGestern); ___ Não estás a inicializar a contagem de imunes antes do ciclo: immuneGestern = gesamtPopulation - (gesundGestern + krankeGestern); ___ Nas linhas: gesundHeute = gesundGestern - infektionsrate * (gesundGestern * krankeGestern / gesamtPopulation); immuneHeute = immuneGestern + immunisierungsrate * krankeGestern; Gesundethousand = gesundHeute * (100000 / gesamtPopulation); estás a fazer divisões inteiras o que de certeza não é o que pretendes. Deves fazer o cast de pelo menos uma das variáveis para float e no terceiro exemplo podes tornar o 100000 num literal float com .0 e se quiseres o sufixo f para ficar mais bonito. Convêm também depois fazer a reconversão para inteiro e melhor ainda arrendondares com a função round . Eg: gesundHeute = gesundGestern - (int)round(infektionsrate * (gesundGestern * krankeGestern / (float)gesamtPopulation)); immuneHeute = immuneGestern + (int)round(immunisierungsrate * krankeGestern); Gesundethousand = (int)round(gesundHeute * (100000.0f / gesamtPopulation)); Outras observações: A função main deve ser neste caso int main(void). Podes eliminar os includes math.h (caso não uses round()) e stdlib.h, já que não estás a utlizar nada presente neles. Edited January 28, 2021 at 04:03 PM by rbsrbs_dev 1 Report Link to comment Share on other sites More sharing options...
PsySc0rpi0n Posted April 30, 2021 at 10:16 PM Report Share #622170 Posted April 30, 2021 at 10:16 PM @rbsrbs_dev também é preciso saber se a OP sabe o que são type casts e divisões inteiras e para que serve o 'f' e etc... Se ela não souber, estiveste a escrever chinês. 😛 Kurt Cobain - Grunge misses you Nissan GT-R - beast killer Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now