Problem z wyszukiwaniem najmniejszej średniej w listach jednokierunkowych.

0

Witam, mam problem dotyczący niżej umieszczonej funkcji. Debugger nie jest w stanie pomóc, bo automatycznie wyrzuca błąd. Od początku co funkcja ma robić.

  1. Wczytaj nazwę pod którą zostanie utworzony plik.
  2. Przejdź przez pierwszą listę (po pierwszym wydarzeniu), jeśli napotkasz uczestników tego wydarzenia (warunek if(strcmp(pom->identyfikator,pom2->identyfikator3)==0) sumuj ich wiek, następnie policz z tych lat średnią i ustaw jako początkową najmniejszą średnią.
  3. Przejdź przez kolejne listy. Jeśli napotkasz średnią mniejszą od najmniejszej, to ta zamienia się w najmniejszą.
  4. Na koniec wypisz nazwę wydarzenia dla którego średnia jest najmniejsza oraz wypisz tę średnią.
  5. Zamknij plik.

(OBECNY_ROK to 2017)

Może ktoś zauważy błąd w kodzie i będzie w stanie pomóc?
Pozdrawiam.

void MinWydarzenie(ADRES pierwszy,ADRES2 pierwszy2)
{
    int i;
    int suma=0;
    float srednia=0.0;
    float srednia_min=0.0;
    char min_wydarzenie[50];
    ADRES2 pom2=pierwszy2;
    ADRES pom=pierwszy;
    char nazwa[50];
    do
    {
        printf("\nPodaj nazwe z formie (nazwa.txt) (maksymalnie 50 liter)\n");
        printf("Podana nazwa bedzie sluzyla jako nazwa pliku. Podana nazwa musi roznic sie od poprzedniej.\n");
        scanf("%s",&nazwa);
    }while(strcmp(nazwa,"Wydarzenia.txt")==0 || strcmp(nazwa,"Uczestnicy.txt")==0);
    FILE *plik7=fopen(nazwa,"w");
    if(!plik7)
    {
    printf("BLAD");
    return;
    }
    while(pom==pierwszy)
    {
        while(pom2!=NULL)
        {
            if(strcmp(pom->identyfikator,pom2->identyfikator3)==0)
            {
                suma=suma+(OBECNY_ROK-(pom2->rok_urodzenia2));
                i++;
            }
            pom2=pom2->nast2;
        }
        if(i==0) return;
        srednia=((float)suma/i);
        srednia_min=srednia;
        strcpy(min_wydarzenie,(pom2->nazwa2));
        pom2=pierwszy2;
        pom=pom->nast;
        i=0;

    }
    i=0;
    pom=pierwszy->nast;
    pom2=pierwszy2;
    while(pom!=NULL)
        suma=0;
        srednia=0.0;
    {
        while(pom2!=NULL)
        {
            if(strcmp(pom->identyfikator,pom2->identyfikator3)==0)
            {
                suma=suma+(OBECNY_ROK-(pom2->rok_urodzenia2));
                i++;
            }
            pom2=pom2->nast2;
        }
        if(i==0) return;
        srednia=((float)suma/i);
        if(srednia<srednia_min)
        {
            srednia_min=srednia;
            strcpy(min_wydarzenie,(pom2->nazwa2));
        }
    }
    fprintf(plik7,"Srednia wieku jest najmniejsza dla %s i rowna %2f.",min_wydarzenie,srednia_min);
    fclose(plik7);

}

0

bledow tu masz duzo - poczawszy od returnow ze srodka funkcji (zostawiasz otwart plik. poprzez scanf("%s",&nazwa); ktore zadziala przypadkiem jedynie, ale zapis jest niepoprawny, az po

while(pom!=NULL)
        suma=0;

ktore albo w ogóle sie nie wykona, albo w nieskonczonosc bedzie ustawialo 0 w zmiennej suma... A to tylko przez szybkie spojrzenie.
Rada:

  1. uporzadkuj kod
  2. pozbadz sie ewidentnych bledow - pisz tak abys nie musial uzywac returna ze srodka funkcji
  3. jaki blad wyrzuca ci debugger? i w ktorym miejscu?
0

Debugger wyrzuca mnie od razu po wejściu do pętli, a co do tego bałaganu z funkcji, już się go pozbyłem.

0

pierwszy2, pom2, plik7, identyfikator3... Panie, litości. Na dodatek typ ADRES okazuje się być listą. Już pomijam to, że uppercase przyjęło się używać do makr.
I dlaczego funkcja wyszukująca najniższą średnią ma coś wyświetlać, coś pobierać i na dodatek dłubać w plikach?

0

Takie jest zadanie tej funkcji, wynik najmniejszej średniej wpisać do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1