Jump to content

Error no código


Fabiana Santos

Recommended Posts

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

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

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

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 by rbsrbs_dev
  • Vote 1
Link to comment
Share on other sites

  • 3 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.