0 / 0 / 1
Регистрация: 18.04.2010
Сообщений: 19
|
|
1 | |
Не могу дописать программу18.04.2010, 20:03. Просмотров 435. Ответов 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
|
|
18.04.2010, 20:03 | |
Я новичок , не могу дописать программу Не могу дописать программу. Двумерный массив Не могу дописать программу преобразующую слова в цифры не могу дописать программу! осталось условие на нахождение наибольшего из трёх чисел! |
|
18.04.2010, 20:03 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. не могу дописать функцию перевода текста на 2сс,не могу возвращать переведенный текст Не могу дописать код программы односторонний список. не могу написать в) и дописать б) Не могу дописать пару операторов в конце программы... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |