Перейти к содержанию

Помогите исправить ошибку в задаче на С! Срочно надо! Пожалуйста!!


Рекомендуемые сообщения

Организовать просмотр, удаление элементов структуры в виде списка: Сведения об экзамене содержат следующие данные: дисциплину (программирование, социология, иностранный язык, физика), дату сдачи экзамена (год, месяц, день), сведения о студенте (фамилия, факультет, курс, группа) и экзаменационную оценку. Задан набор сведений об экзаменах, сданных студентами за последние несколько лет; в них факультет и предмет кодируются первыми буквами названия. Определить количество отличников по программированию на технологическом факультете среди студентов первого курса, сдававших экзамены летом 1995 года, вывести на экран их фамилии и группу.

Добавлено спустя 6 минут 14 секунд:

Вот текст который я написал:

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

struct predmet{

int p;

int s;

int r;

int e;

};

struct date {

int year;

int month;

int day;

};

struct info_st {

char familia[10];

int course;

int group;

struct predmet pr;

struct date dt;

info_st*q;

};

void main()

{

int i,n,k;

info_st *head=new info_st;

info_st *pointer=head;

info_st *previous;

printf ("Vvedite kolichestvo studentov: ");

scanf ("%i",&n);

for (i=0;i

pointer->q=new info_st;

printf ("Familia: ");

scanf ("%s",&pointer-> familia);

printf ("Kyrs: ");

scanf ("%i",&pointer-> course);

printf ("Gryppa: ");

scanf ("%i",&pointer-> group);

printf ("Ocenka po programirovaniu: ");

scanf ("%i",&pointer->pr.p);

printf ("Ocenka po fizike: ");

scanf ("%i",&pointer->pr.s);

printf ("Ocenka po inostrannomy: ");

scanf ("%i",&pointer->pr.r);

printf ("Ocenka po socialogii: ");

scanf ("%i",&pointer->pr.e);

printf ("vvedite god sdachi ekcamena: ");

scanf ("%i",&pointer->dt.year);

printf ("vvedite meyacyac sdachi ekcamena ");

scanf ("%i",&pointer->dt.month);

printf ("vvedite den sdachi ekcamena ");

scanf ("%i",&pointer->dt.day);

printf ("______________________________________\n");

pointer=pointer->q;

}

printf ("______________________________________\n\n");

pointer->q=NULL;

pointer=head;

printf (" Spisok stydentov:\n\n");

while (pointer->q!=NULL){

printf ("Familia: %s\n",pointer->familia);

printf ("Date: %i.%i.%i\n",pointer->dt.day,pointer->dt.month,pointer->dt.year);

printf ("Ocenki: %i,%i,%i,%i\n",pointer->pr.p,pointer->pr.s,pointer->pr.r,pointer->pr.e);

printf ("Kyrs: %i\n",pointer->course);

printf ("Gryppa: %i\n",pointer->group);

printf ("______________________________________\n");

pointer=pointer->q;

}

printf ("______________________________________\n\n");

pointer->q=NULL;

pointer=head;

while (pointer->q!=NULL){

if ((pointer->course!=1)&&(pointer->pr.p!=5)&&(pointer->dt.year!=1995)&&((pointer->dt.month!=6)||( pointer->dt.month!=7)||( pointer->dt.month!=8))

&&(pointer==head))

{head = pointer->q;

pointer=pointer->q;

}

if ((pointer->course==1)&&(pointer->pr.p==5)&&(pointer->dt.year==1995)&&((pointer->dt.month==6)||( pointer->dt.month==7)||( pointer->dt.month==8)))

{pointer=pointer->q;

previous = pointer;}

else {

previous->q=pointer->q;

delete pointer;

}

pointer = pointer->q;

}

pointer->q=NULL;

pointer=head;

printf ("Polychenniy spisok:\n\n");

while (pointer->q!=NULL){

printf ("Familia: %s\n",pointer->familia);

printf ("Gryppa: %i\n",pointer->group);

printf ("______________________________________\n\n");

pointer = pointer->q;

}

getch();

}

В конце структура должна пройти условие, и если указатель на данные не проходит условие, то он удаляется, в противном переходит на следующий указатель. И в конце должен выводится список с данными. которые прошли условие. Но увы, нифига не выводится! Мне кажется проблема в указателях!!! Помогите плиззззз)))

Ссылка на комментарий

!= NULL там должно стоять я имел в виду

тыж поинтеру голову приравниваешь значит он с начала списка пойдет

и остановится прямо на первом элементе так как q не равно NULL

Ссылка на комментарий

у тебя вообще странная логика

pointer=pointer->q;

previous = pointer;

ты смещаешь указатель pointer на следующую позицию списка

а потом приравниваешь указателю на предыдущий элемент уже сдвинутый поинтер оО

вот так по сути нужно сделать

info_st *a, *b;

while (a->q!=NULL)
{
if (некоторое условие c "a")
{
вывод а;
b = a;
a = a->q;
}
else
{
b->q = a->q;
delete a;
a = b->q;
}
}

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...