Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2017, 08:55   #1
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию Односвязный список С++, структура Student

Добрый всем день, не могу разобраться с данной программой. На С++ и вообще программировании не специализируюсь, дали для общего образования. Односвязные списки в ступор ввели вообще, вот задание:

Создать структуру с именем Student с полями: фамилия, имя, номер группы, успеваемость (массив из пяти элементов). Сформировать односвязный список. Затем напечатать этот список в отсортированном по выбранному полю порядке. Затем удалить из списка информацию о тех студентах, у которых имеется по крайней мере две «2». И снова напечатать список.

Прошу помочь, пожалуйста.
Ossuary вне форума Ответить с цитированием
Старый 11.04.2017, 09:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Покажите свои наработки, конкретные вопросы и т.п.

Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.04.2017, 09:27   #3
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

Вот мой код, то есть ступор у меня именно на том, чтобы удалить как раз этих студентов с 2-мя или более двойками. Не пойму.

Код:
//Листинг программы
#include <stdio.h>
#include <windows.h>
#include <conio.h>
struct Subject
{ char FIO[20], group[20];
  int perfomance[5];
  Subject *next;
};
Subject *head=0;  //адрес головы списка
Subject *current, *min;
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 char c;
 printf("Ввести данные о субъекте? д/н");
 c=getche();     
 //формирование списка с клавиатуры
 while (c=='д' || c=='Д')  
 {
  if (head) 
  { 
	current->next=new Subject; 
  	current=current->next; 
  }
  else     
  { head=new Subject; 
    current=head;   
  }
  system("cls");
  printf("\nВведите данные о субъекте:\n");
  printf("Фамилия:");
  scanf("%s", current->FIO);
  printf("Имя:");
  scanf("%s", current->group);
  printf("Успеваемость:");
  scanf("%d", &current->perfomance);
  current->next=0;
  printf("Ввести данные о еще одном субъекте? д/н");
  c=getche();
 }
 if(head)//если список не пуст
 {
  system("cls");
  printf("Список введенных субъектов:\n");
  current=head;
  while(current!=0)
  { printf("Группа: %10s, ФИО: %10s, Успеваемость: %4d\n",current->group, current->FIO, current->perfomance);
    current=current->next;
  }
  getch();
  printf("Удаляем тех, у кого есть более 2-х двоек...\nСписок субъектов после удаления:\n");
Ossuary вне форума Ответить с цитированием
Старый 11.04.2017, 09:53   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Чтобы в списке:

1.jpg

удалить (для примера 2-й узел), нужно выполнить две операции:
- непосредственное удаление (раз ты используешь "new", то и удалять нужно "delete"-м... но сначала нужен какой-то указатель на удаляемый узел).
- переделка связи списка (организация новой связи). Как на картинке:

2.jpg

___________________________________ _____________________________
___________________________________ _____________________________

Вот, что сделай:
1) Нарисуй свой список (как я сделал; с данными; если их много и неудобно представлять данные- можешь упростить свою структуру).
2) Выведи адрес в памяти (и сами данные) узла №2. Покажи скриншот консоли. Ты умеешь делать скриншоты?
3) Попробуй удалить 2-й экземпляр структуры у себя и вывести всего списка на экран. Скриншот.
4) В какой среде программируешь?
ura_111 вне форума Ответить с цитированием
Старый 11.04.2017, 09:59   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

И ещё одно, расскажи о "*head" что знаешь:
Что это такое?
Его можно менять?
Насколько он важен?
Как переводиться с английского?
ura_111 вне форума Ответить с цитированием
Старый 17.04.2017, 07:26   #6
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

ura_111, Head - это голова списка, можно сказать нулевой элемент ( ну или первый ) . Задаёт начало списка.

Работаю в среде Dev C++, про рисунки немного не понял.

Последний раз редактировалось Ossuary; 17.04.2017 в 07:28.
Ossuary вне форума Ответить с цитированием
Старый 17.04.2017, 08:09   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а в чем именно проблема? Надо просто проходить список в цикле и проверять значения, если элемент соответствует условию, то удалить его. Для удаления надо поменять указатель на следующий элемент (next) у предыдущего элемента (или присвоить новый head если это первый) + освободить память (delete).

Рисунки (ручкой на бумаге, или где вам удобно) могут помочь лучше понять

А что с вводом (и выводом) успеваемости? Разве надо не 5 чисел вводить (в цикле)?

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Покажи скриншот консоли
А чего не фото монитора сразу?
Из консоли вообще-то можно копировать текст.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура Student Kiper_ Общие вопросы C/C++ 1 20.03.2014 05:12
структура с именем STUDENT Alexandra777 Помощь студентам 3 09.05.2012 12:34
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
структура STUDENT hochy_ecshe C# (си шарп) 2 06.05.2011 00:30
структура STUDENT! Jereme Общие вопросы C/C++ 2 17.01.2010 19:19