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

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

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

Не могу дописать программу - C++

18.04.2010, 20:03. Просмотров 310. Ответов 0
Метки нет (Все метки)

Проблема следующая, сделал все из того, что ниже, кроме вставки стула и двусвязного стека. К сожалению сколько я не бился над решением этих задач, ничего толкового так и не вышло. Все еще осложняется тем, что со списками я последний раз работал год назад на паскале, тогда я их знал отлично и подобная задача для меня проблемой не была, но сейчас я все напрочь забыл, хотя, на паскале бы мб вспомнил чего, а вот с Си проблема, да еще сроки поджимают, завтра уже сдать надо все Очень рассчитываю на вашу помощь, заранее спасибо!

Написать программу, которая вводит из файла структуры, размещает их в стеке, реализованном с помощью двунаправленного
циклического списка, и вставляет в список новый стул перед самым низким стулом. Результат (содержимое стека)
выводится в файл
Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

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

CHAIR
{
	char color[Lmax];
	int height;
	struct
	{
		char city[Lmax], factory[Lmax], sname[Lmax];
	}
	manufactur;
	char mater[Lmax];
	CHAIR *prev; // Указатель на предыдущую запись
	CHAIR *next; // Указатель на следующую запись
};

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

	f=fopen(name,"r");
	if(f==NULL)
	{
		puts("File not found");
		exit(1);
	}
	else
	{
		while(!feof(f))
		{
			//Выделение памяти для новой записи
			tek=(CHAIR*)malloc(sizeof(CHAIR));
			if(fgets(tek->color,Lmax,f))
			{
				tek->color[strlen(tek->color)-1]='\0'; // Замена \n на \0
				fscanf(f,"%d",&tek->height);
				CLR;
				fgets(tek->manufactur.city,Lmax,f);
				tek->manufactur.city[strlen(tek->manufactur.city)-1]='\0';

				fgets(tek->manufactur.factory,Lmax,f);
				tek->manufactur.factory[strlen(tek->manufactur.factory)-1]='\0';

				fgets(tek->manufactur.sname,Lmax,f);
				tek->manufactur.sname[strlen(tek->manufactur.sname)-1]='\0';

				fgets(tek->mater,Lmax,f);
				tek->mater[strlen(tek->mater)-1]='\0';

				tek->next=stack;
				//tek->prev=stack;
				stack=tek;
			}
		}
		free(tek);
	}
	return(stack); // Возврат указателя на вершину стека
}

// Вставка стула
// Результат - указатель на вершину измененного списка
CHAIR* Insert(CHAIR *stack)
{
	CHAIR *tek, *prev, *p; // Указатель на текущую запись
	int MinHeight=32768; // Указатель на стул с минимальной высотой

	tek=stack;
	// Поиск стула с минимальной высотой
	while(stack && tek)
	{
		if(tek->height<MinHeight)
		MinHeight=tek->height;
		tek=tek->next; // Движение по списку
	}
	printf("\nMinHeight %d\n",MinHeight);
	return(stack);
}

void print(CHAIR* stack)
{
	while(stack!=NULL)
	{
		printf("\n");
		printf("Color: %s\n", stack->color);
		printf("Height: %d\n", stack->height);
		printf("Material: %s\n", stack->mater);
		printf("City: %s\n", stack->manufactur.city);
		printf("Factory: %s\n", stack->manufactur.factory);
		printf("Surname: %s\n", stack->manufactur.sname);
		stack=stack->next;
	}
}

// Вывод результата в файл
void Output(CHAIR* stack, char name[])
{
	FILE *f2=fopen(name,"w");

	// Вывод списка в файл
	while(stack!=NULL)
	{
		fprintf(f2,"Color: %s\n",stack->color);
		fprintf(f2,"Height: %d\n",stack->height);
		fprintf(f2,"City: %s\n",stack->manufactur.city);
		fprintf(f2,"Factory: %s\n",stack->manufactur.factory);
		fprintf(f2,"Surname: %s\n",stack->manufactur.sname);
		fprintf(f2,"Material: %s\n",stack->mater);
		stack=stack->next; // Движение по списку
	}
	fclose(f2);
}

main()
{
	CHAIR *first; // Указатель на вершину стека
	char namei[Lmax], nameo[Lmax]; // Названия входного и выходного файла

	printf("Enter name of input file: ");
	gets(namei);
	//printf("Enter name of output file: ");
	//gets(nameo);
	first=stack(namei); // Формирование стека
	print(first);
	first=Insert(first);
	print(first);
	/*if(first!=NULL)
	{
		Output(first,nameo);
		printf("The result put to file %s\n",nameo);
	}*/
	return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2010, 20:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу дописать программу (C++):

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

Не могу дописать программу. Двумерный массив - C++
Дана целочисленная прямоугольная матрица. Определить количество строк, содержащих хотя бы один нулевой элемент, и номер столбца, в...

Не могу дописать программу преобразующую слова в цифры - C++
Здравствуйте форумчане у меня есть к вам вопрос насчет одной программы. Задача: Напишите программу, преобразующую слова &quot;нуль&quot;, &quot;два&quot;...

не могу дописать программу! осталось условие на нахождение наибольшего из трёх чисел! - C++
Помогите дописать программу #include &lt;iostream.h&gt; #include &lt;math.h&gt; void main() { int a,b,c,d; cout &lt;&lt;&quot;\n Vvedite 1oe chislo: &quot;;...

не могу дописать функцию перевода текста на 2сс,не могу возвращать переведенный текст - C++
void itoa(char str){ int i; char buf; char url; char yn; int x=0; i=0; while(str){ _itoa_s( (unsigned char)str, buf, 2);...

Не могу дописать код программы - C++
создать структуру типа: Код: struct employee {char*name; float salary; int stage; }; осуществить поиск элементов в...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 20:03
Привет! Вот еще темы с ответами:

односторонний список. не могу написать в) и дописать б) - C++
Використовувати (лінійні) односпрямовані списки без заголовної ланки (мал. а) або з заголовною ланкою (мал. б) при наступному їхньому описі...

Вычисление последовательности Фибоначчи по заданному n (не могу дописать) - C++
Ребята, не могу дописать программу, срочно нужно! Знаю, что есть где то на форуме, но искать нету времени, заранее спасибо!!! Дописать...

Не могу дописать пару операторов в конце программы... - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { system (&quot;cls&quot;); setlocale(LC_ALL,&quot;Rus&quot;); double a,...

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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