Sortowanie w C, błąd w programie

0

Witam,
przy próbie napisania programu do zadania http://s20.postimg.org/ymmi8m88d/scr_32.png (rozszerzone do trzech ocen) występuje błąd przy drukowaniu, a mianowicie drukuje dobrze do momentu pierwszego napotkania studenta, który nie zdał, potem już po kolei wstawia wszystkich do tej drugiej grupy, przestaje doliczać do x. Błąd jest pewnie jakiś banalny, ale z uwagi na to, że jestem początkującym w programowaniu jakoś nie mogę go dostrzec. Proszę o pomoc.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct student
    {
        int nr;
        int ocena1;
        int ocena2;
        int ocena3;
    };
    int n,i;
    printf("Podaj ilosc studentow: ");
    scanf("%d",&n);
    struct student a[n];
    for(i=0;i<n;i++)
    {
        printf("Wprowadz numer indeksu studenta: ");
        scanf("%d",&a[i].nr);
        printf("Wprowadz pierwsza ocene: ");
        scanf("%d",&a[i].ocena1);
        printf("Wprowadz druga ocene: ");
        scanf("%d",&a[i].ocena2);
        printf("Wprowadz trzecia ocene: ");
        scanf("%d",&a[i].ocena3);
    }

    int p=n, l=0,x=0;
    struct student t;
    while (p>l)
    {
        while (a[l].ocena1 >2 && a[l].ocena2 >2 && a[l].ocena3 >2 && l<p)
        {
            l=l+1;
            x=x+1;
        }
        while ((a[l].ocena1 < 3 || a[l].ocena2 < 3 || a[l].ocena3 < 3) && l<p)
        {
            p=p-1;
        }
        if (p>l)
        {
            t=a[l];
            a[l]=a[p];
            a[p]=t;
            l=l+1;
            p=p-1;
        }
    }
    //printf("x=%d",x);
    printf("\nZdali egzamin:\n\n");
    for(i=0;i<x;i++)
    {
        printf("Nr indeksu_%d\n",a[i].nr);
    }

    printf("\nNie zdali egzaminu:\n\n");
    for(i=x;i<n;i++)
    {
        printf("Nr indeksu_%d\n",a[i].nr);
    }
    return 0;
}
0

Wywal zmienną 'x', zmienna 'l' wskazuje ci pierwszego z tych co nie zdali.

0

Wskazuje, ale nie wiadomo od jakiego momentu wskazuje. Ta zmienna 'x' była tylko po to by zliczyło, ile jest indeksów do pierwszej grupy

0

Wskazuje poprawnie od właściwego momentu.

0

Już sobie poradziłem. Wystarczyło ustawić p=n-1 i zmienić parametry pętli for

printf("\nZdali egzamin:\n\n");
    for(i=0;i<=x;i++)
    {
        printf("Nr indeksu_%d\n",a[i].nr);
    }

    printf("\nNie zdali egzaminu:\n\n");
    for(i=x+1;i<n;i++)
    {
        printf("Nr indeksu_%d\n",a[i].nr); 

Dzięki za twórcze rady.
Pozdro

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