С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 19

Списки

24.05.2012, 23:40. Показов 527. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день : (Пишу на Dev-c++)
Задание . Сформировать стек циклического списка и удаляет из него стул заданного материала и максимальной высотой..

Итак, стул заданного материала удаляет, но не получаеться написать цикл чтобы проверял на максимальную высоту.

Читаю два файла :
vhodnoi.txt(

red
100
moskow
gazprom
ivanov
iron
black
200
moskow
gazprom
ivanov
tree
red
300
moskow
gazprom
ivanov
steel
green
400
moskow
gazprom
ivanov
tree
white
500
moskow
gazprom
ivanov
iron
)

и записываю всё в другой файл

вот мой код:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>

#define Lmax 20
#define STUL struct stu
#define CLR while (fgetc (f) != '\n')

STUL
{
char cvet[Lmax];
int visota;
struct
{
char city[Lmax];
char zavod[Lmax];
char fam[Lmax];
}
izgot;
char mater[Lmax];
STUL *next; /* поле указателя на следующую запись */
};


/* прототипы функций */
STUL *stack (char name[]);
void vivod (STUL* stack, char name[]);
STUL* del (STUL* stack);


/* формирование стека стульев. на выходе - имя входного файла */
STUL *stack (char name[])
{
STUL *tek, *stack = NULL; /* изначально список пуст */
FILE *f;

f = fopen (name, "r");
if (f == 0)
puts ("File not found!!!");
else
{
while (! feof (f))
{
/* выделение памяти для новой записи */
tek = (STUL*)malloc (sizeof (STUL));
if (fgets (tek->cvet, Lmax, f))
{
/* другой способ замены '\n' на '\0' */
tek->cvet[strlen (tek->cvet) - 1] = '\0';
fscanf (f, "%d", &tek->visota);
CLR;
fgets (tek->izgot.city, Lmax, f);
tek->izgot.city[strlen (tek->izgot.city) - 1] = '\0';
fgets (tek->izgot.zavod, Lmax, f);
tek->izgot.zavod[strlen (tek->izgot.zavod) - 1] = '\0';
fgets (tek->izgot.fam, Lmax, f);
tek->izgot.fam[strlen (tek->izgot.fam) - 1] = '\0';
fgets (tek->mater, Lmax, f);
tek->mater[strlen (tek->mater) - 1] = '\0';
tek->next = stack;
stack = tek;
}
}
free (tek);
}
return (stack); /* возвращается указатель на вершину стека */
}

/* вывод списка в файл */
void vivod (STUL* stack, char name[])
{
FILE *f2 = fopen (name, "w");

if (! stack)
{
fprintf (f2, "Spisok posle ydalenija pust \n");
}
else
{
fprintf (f2, "Spisok posle udalenija \n");
fprintf (f2, "\n");
/* вывод списка в файл */
while (stack != NULL)
{
fprintf (f2, "cvet:%s\n", stack->cvet);
fprintf (f2, "visota:%d\n", stack->visota);
fprintf (f2, "city:%s\n", stack->izgot.city);
fprintf (f2, "zavod:%s\n", stack->izgot.zavod);
fprintf (f2, "fam:%s\n", stack->izgot.fam);
fprintf (f2, "mater:%s\n", stack->mater);
stack = stack->next; /* движение по списку */
}
}
fclose (f2);
}

/* удаление стульев */
STUL* del (STUL* stack)
{/* результат - указатель на вершину измененного списка */
STUL *tek, *pred; /* указатели на текущую и предшествующую запись */
char mt[Lmax]; /* заданный материал */
int MIN;
printf ("Vvedite material: ");
gets (mt);
tek = pred = stack;
while (stack && tek) /* пока список не кончился и не удален полностью */


if (strcmp (mt, tek->mater) == 0)

{
if (tek == stack) /* удаление первой записи */
{
stack = stack->next;
free (tek);
tek = pred = stack;
}
else /* удаление элемента из середины */
{
pred->next = tek->next;
free (tek);
tek = pred->next;
}
}
else
{
pred = tek;
tek = tek->next;
}
return (stack);
}


main ()
{
STUL *first; /* указатель на вершину стека */
char name1[Lmax], name2[Lmax]; /* имена входного и выходного файлов */


printf ("Vvedite imja vxodnogo faila: ");
gets (name1);
printf ("Vvedite imja vixodnogo faila: ");
gets (name2);
first = stack (name1); /* формирование стека */
if (first != NULL)
{
first = del (first); /* удаление записей */
vivod (first, name2); /* вывод результатов в файл */
printf ("Rezultat naxoditsja v faile %s\n", name2);
}
getch();
}

Добавлено через 6 часов 53 минуты
Цитата Сообщение от winson22 Посмотреть сообщение
Добрый день : (Пишу на Dev-c++)
Задание . Сформировать стек циклического списка и удаляет из него стул заданного материала и максимальной высотой..

Итак, стул заданного материала удаляет, но не получаеться написать цикл чтобы проверял на максимальную высоту.

Читаю два файла :
vhodnoi.txt(

red
100
moskow
gazprom
ivanov
iron
black
200
moskow
gazprom
ivanov
tree
red
300
moskow
gazprom
ivanov
steel
green
400
moskow
gazprom
ivanov
tree
white
500
moskow
gazprom
ivanov
iron
)

и записываю всё в другой файл

вот мой код:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>

#define Lmax 20
#define STUL struct stu
#define CLR while (fgetc (f) != '\n')

STUL
{
char cvet[Lmax];
int visota;
struct
{
char city[Lmax];
char zavod[Lmax];
char fam[Lmax];
}
izgot;
char mater[Lmax];
STUL *next; /* поле указателя на следующую запись */
};


/* прототипы функций */
STUL *stack (char name[]);
void vivod (STUL* stack, char name[]);
STUL* del (STUL* stack);


/* формирование стека стульев. на выходе - имя входного файла */
STUL *stack (char name[])
{
STUL *tek, *stack = NULL; /* изначально список пуст */
FILE *f;

f = fopen (name, "r");
if (f == 0)
puts ("File not found!!!");
else
{
while (! feof (f))
{
/* выделение памяти для новой записи */
tek = (STUL*)malloc (sizeof (STUL));
if (fgets (tek->cvet, Lmax, f))
{
/* другой способ замены '\n' на '\0' */
tek->cvet[strlen (tek->cvet) - 1] = '\0';
fscanf (f, "%d", &tek->visota);
CLR;
fgets (tek->izgot.city, Lmax, f);
tek->izgot.city[strlen (tek->izgot.city) - 1] = '\0';
fgets (tek->izgot.zavod, Lmax, f);
tek->izgot.zavod[strlen (tek->izgot.zavod) - 1] = '\0';
fgets (tek->izgot.fam, Lmax, f);
tek->izgot.fam[strlen (tek->izgot.fam) - 1] = '\0';
fgets (tek->mater, Lmax, f);
tek->mater[strlen (tek->mater) - 1] = '\0';
tek->next = stack;
stack = tek;
}
}
free (tek);
}
return (stack); /* возвращается указатель на вершину стека */
}

/* вывод списка в файл */
void vivod (STUL* stack, char name[])
{
FILE *f2 = fopen (name, "w");

if (! stack)
{
fprintf (f2, "Spisok posle ydalenija pust \n");
}
else
{
fprintf (f2, "Spisok posle udalenija \n");
fprintf (f2, "\n");
/* вывод списка в файл */
while (stack != NULL)
{
fprintf (f2, "cvet:%s\n", stack->cvet);
fprintf (f2, "visota:%d\n", stack->visota);
fprintf (f2, "city:%s\n", stack->izgot.city);
fprintf (f2, "zavod:%s\n", stack->izgot.zavod);
fprintf (f2, "fam:%s\n", stack->izgot.fam);
fprintf (f2, "mater:%s\n", stack->mater);
stack = stack->next; /* движение по списку */
}
}
fclose (f2);
}

/* удаление стульев */
STUL* del (STUL* stack)
{/* результат - указатель на вершину измененного списка */
STUL *tek, *pred; /* указатели на текущую и предшествующую запись */
char mt[Lmax]; /* заданный материал */
int MIN;
printf ("Vvedite material: ");
gets (mt);
tek = pred = stack;
while (stack && tek) /* пока список не кончился и не удален полностью */


if (strcmp (mt, tek->mater) == 0)

{
if (tek == stack) /* удаление первой записи */
{
stack = stack->next;
free (tek);
tek = pred = stack;
}
else /* удаление элемента из середины */
{
pred->next = tek->next;
free (tek);
tek = pred->next;
}
}
else
{
pred = tek;
tek = tek->next;
}
return (stack);
}


main ()
{
STUL *first; /* указатель на вершину стека */
char name1[Lmax], name2[Lmax]; /* имена входного и выходного файлов */


printf ("Vvedite imja vxodnogo faila: ");
gets (name1);
printf ("Vvedite imja vixodnogo faila: ");
gets (name2);
first = stack (name1); /* формирование стека */
if (first != NULL)
{
first = del (first); /* удаление записей */
vivod (first, name2); /* вывод результатов в файл */
printf ("Rezultat naxoditsja v faile %s\n", name2);
}
getch();
}
++++++
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2012, 23:40
Ответы с готовыми решениями:

Списки, как склеить списки между собой?
Ребят, привет всем, есть код, в классе которого описаны несколько методов: добавление элемента в список, удаление и просмотр списка, дак...

списки
Построить класс для работы с односвязным списком. Элементы списка - действительные числа. Создать два упорядоченных по возрастанию списка,...

C++ списки
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;list&gt; using namespace std; int main(void) { list&lt; int &gt; l,...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2012, 23:40
Помогаю со студенческими работами здесь

Списки в С++
#include&lt;iostream.h&gt; #include &quot;time_1.h&quot; #include&lt;time.h&gt; #include&lt;windows.h&gt; char* Rus (const char* text); class List { ...

Списки
вопрос, в каких случаях используют односвязный список заместо двух связного?

Списки
Здравствуйте.Помогите пожалуйста сделать это задание,срочно очень надо. Обьединить 2 сортированных списка в один,чередуя элементы первого...

Списки в c++
Дана задача:&quot;Даны два списка. Образовать новый список LinkedList&lt;string&gt;,состоящий из узлов обоих исходных списков&quot; Вообще-то по...

Списки C++
Уважаемые! Препод задал написать линейный, линейный дважды связанный и линейный цикличный списки с любым количеством элементов для каждого....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru