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

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

Восстановить пароль Регистрация
 
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19
18.04.2010, 20:03     Не могу дописать программу #1
Проблема следующая, сделал все из того, что ниже, кроме вставки стула и двусвязного стека. К сожалению сколько я не бился над решением этих задач, ничего толкового так и не вышло. Все еще осложняется тем, что со списками я последний раз работал год назад на паскале, тогда я их знал отлично и подобная задача для меня проблемой не была, но сейчас я все напрочь забыл, хотя, на паскале бы мб вспомнил чего, а вот с Си проблема, да еще сроки поджимают, завтра уже сдать надо все Очень рассчитываю на вашу помощь, заранее спасибо!

Написать программу, которая вводит из файла структуры, размещает их в стеке, реализованном с помощью двунаправленного
циклического списка, и вставляет в список новый стул перед самым низким стулом. Результат (содержимое стека)
выводится в файл
Код
#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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2010, 20:03     Не могу дописать программу
Посмотрите здесь:

C++ не могу дописать функцию перевода текста на 2сс,не могу возвращать переведенный текст
Не могу дописать код программы C++
C++ Не могу дописать программу преобразующую слова в цифры
Не могу дописать программу. Двумерный массив C++
C++ не могу дописать программу! осталось условие на нахождение наибольшего из трёх чисел!
Вычисление последовательности Фибоначчи по заданному n (не могу дописать) C++
C++ Я новичок , не могу дописать программу
C++ односторонний список. не могу написать в) и дописать б)

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

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

Текущее время: 10:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru