Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
winson22
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 19
#1

Списки - C++

24.05.2012, 23:40. Просмотров 280. Ответов 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();
}
++++++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2012, 23:40     Списки
Посмотрите здесь:

Списки - C++
Всем привет!) У меня есть вопрос..как создать два списка? Просто мне нужно из списка В переместить содержимое в список А. Как это сделать и...

C++ списки - 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,...

Списки в C++ - C++
Нужно написать программу которая создает список и упорядочивает его элементы по возрастанию.

Списки С++ - C++
Помогите,пожалуйста......в списке продублировать все отрицательные элементы(одна функция) и удалить из списка все чётные элементы(другая...

Списки с С++ - C++
Срочно надо, пожалуста помогите: написать функцию, которая определяет количество вхождений у список елемента, который задан...

Списки - C++
Помогите пожалуйста с задачей: В списке L найти такой элемент &quot;y&quot; (если существует), что &quot;y&quot; больше всех предыдущих и меньше всех...

списки - C++
Организуйте помещение вводимых чисел в список, так чтобы получился список, упорядоченный по возрастанию помогите,пожалуйста,прошу...

Списки - C++
Здравствуйте, не могу в написать программу, обеспечивающую работу с двунаправленным нециклическим списком, где можно добавлять/удалять...

Списки - C++
Здравствуйте! Помогите пожалуйста с программой.... Надо вывести список поездов , а потом вывести поезда которые отправляются в...

списки с++ - C++
Помогите! Организовать список. Информационная часть должна содержать целые числа. Определить количество элементов с заданным ключом в...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru