danila Опубликовано 21 июня, 2010 Жалоба Поделиться Опубликовано 21 июня, 2010 Организовать просмотр, удаление элементов структуры в виде списка: Сведения об экзамене содержат следующие данные: дисциплину (программирование, социология, иностранный язык, физика), дату сдачи экзамена (год, месяц, день), сведения о студенте (фамилия, факультет, курс, группа) и экзаменационную оценку. Задан набор сведений об экзаменах, сданных студентами за последние несколько лет; в них факультет и предмет кодируются первыми буквами названия. Определить количество отличников по программированию на технологическом факультете среди студентов первого курса, сдававших экзамены летом 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();}В конце структура должна пройти условие, и если указатель на данные не проходит условие, то он удаляется, в противном переходит на следующий указатель. И в конце должен выводится список с данными. которые прошли условие. Но увы, нифига не выводится! Мне кажется проблема в указателях!!! Помогите плиззззз))) Ссылка на комментарий
Haku-jin Опубликовано 21 июня, 2010 Жалоба Поделиться Опубликовано 21 июня, 2010 while (pointer->q==NULL)у тебя по моему даже цикл не запускается... Ссылка на комментарий
danila Опубликовано 21 июня, 2010 Автор Жалоба Поделиться Опубликовано 21 июня, 2010 Вот теперь попробуй, я исправил, там недочет был!!! Ссылка на комментарий
Haku-jin Опубликовано 21 июня, 2010 Жалоба Поделиться Опубликовано 21 июня, 2010 != NULL там должно стоять я имел в видутыж поинтеру голову приравниваешь значит он с начала списка пойдети остановится прямо на первом элементе так как q не равно NULL Ссылка на комментарий
danila Опубликовано 22 июня, 2010 Автор Жалоба Поделиться Опубликовано 22 июня, 2010 Да,да! Я и эт уже исправил, а все равно фигня выходит!! Ссылка на комментарий
Haku-jin Опубликовано 22 июня, 2010 Жалоба Поделиться Опубликовано 22 июня, 2010 у тебя вообще странная логика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; }} Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти