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

Подскажите,как создать из данного стека двунаправленный линейный стек - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление площади круга http://www.cyberforum.ru/cpp-beginners/thread1193124.html
Пусть элементами круга будут радиус (первый элемент), диаметр (второй элемент), длина окружности (третий элемент). Составить программу, которая по номеру элемента запрашивает его значение и вычисляет площадь круга.
C++ Три отрезка заданы координатами своих концов. Определить, можно ли построить из них треугольник Задача 1. Три отрезка заданы координатами своих концов. Определить, можно ли построить из них треугольник, если - да, то вычислить его площадь. http://www.cyberforum.ru/cpp-beginners/thread1193123.html
Объединить стеки C++
Дано кольцо. Элементом кольца является указатель на стек, а элементом стека – указатель на текстовую информацию. Объединить стеки в единую цепочку так, чтобы при вхождении в n-й стек последовательно проходились все последующие стеки. Для С.
работа с файлами C++
закоментите прогу поподробнее, пожалуйста) #include <iostream> #include <fstream> #include <cstdlib> #include <cmath> using namespace std; bool Prime(int const num)// проверка числа на простоту {
C++ Как зделать второе уровнение? http://www.cyberforum.ru/cpp-beginners/thread1193094.html
http://s018.***********/i515/1405/2c/240cb2131d37.jpg
C++ Считывание числа из файла Здравствуйте, имеется задача. Задан текст, состоящий из «0» и «1». Оставив первый символ в неприкосновенности, заменить каждый следующий символ на «0», если предыдущий не совпадает с рассматриваемым, и «1» – в противном случае. Вот ее код: #include "stdafx.h" #include <iostream> #include <string.h> using namespace std; подробнее

Показать сообщение отдельно
Любовь777
0 / 0 / 0
Регистрация: 24.05.2014
Сообщений: 9

Подскажите,как создать из данного стека двунаправленный линейный стек - C++

29.05.2014, 22:29. Просмотров 188. Ответов 0
Метки (Все метки)

Пожалуйста,подскажите как исправить программу
В программе я создаю стек из записей (структур) с данными о каком-то студенте. Считывается информация из файла.
Как мне сделать не просто стек, а двунаправленный линейный стек?

Программа написана на Си и нужно на Си, а не на С++.
Структура называется Student.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <stdio.h>
#include <string.h>
 
#include <limits.h>
#include <windows.h>
#include <locale>
 
#ifdef Q_OS_WIN32
const char* codecName = "IBM866";
#endif
 
 
 
 
 
#define Lmax 20
#define CLR while(fgetc(f)!='\n')
 
struct Student
{
 
    char Group[Lmax];
    struct
    {
        char Famil[Lmax], Name[Lmax], Otch[Lmax];
                                                        //s_name - surname
    }FIO; //manufacturer - производитель
    struct
    {
        int B[Lmax];
    }uspevaemost;
 
    Student *next, *pred; //поле указателя на следующую запись
};
//формирование стека стульев. На входе - имя входного файла
 
Student* stack(char _name[])
{
 
 
 
 
    Student *tek=NULL, *stack=NULL,*pred=NULL; //изначально список пуст  */
    FILE *f;
    if (!(f=fopen(_name, "r")))
    puts("File not found");
    else
    {
        while(!feof(f))
        {
        tek = new Student;
        if (fgets(tek->Group, Lmax, f))
        {
 
 
 
            tek->Group[strlen(tek->Group)-1]='\0';
 
            fgets(tek->FIO.Famil, Lmax, f);
            tek->FIO.Famil[strlen(tek->FIO.Famil)-1]='\0';
 
            fgets(tek->FIO.Name, Lmax, f);
            tek->FIO.Name[strlen(tek->FIO.Name)-1]='\0';
 
            fgets(tek->FIO.Otch, Lmax, f);
            tek->FIO.Otch[strlen(tek->FIO.Otch)-1]='\0';
            puts("File schitan ne vec");
            //CLR;
 
            fscanf(f,"%d %d %d %d \n",&tek->uspevaemost.B[0],&tek->uspevaemost.B[1],&tek->uspevaemost.B[2],&tek->uspevaemost.B[3]);
 
 
            puts("File schitan vec");
 
 
 
           tek->next=stack;
            stack=tek;
 
            }
        }
 
 
 
//delete tek;
}
     puts("File schitan");
return(stack); //возвращается указатель на вершину стека
}
 
 
 
void vivod(Student* stack, char name[]) //вывод списка в файл
{FILE *f2=fopen(name, "w");
if (!stack)
{
fprintf(f2," list after elements removing is empty\n");
}
else
{
fprintf(f2, " list after elements removing\n");
//вывод списка в файл
while(stack!=NULL)
{
fprintf(f2, "Group:%s\n", stack->Group);
fprintf(f2, "Familia:%s\n", stack->FIO.Famil);
fprintf(f2, "Name:%s\n", stack->FIO.Name);
fprintf(f2, "Otchestvo:%s\n", stack->FIO.Otch);
fprintf(f2, "B1:%d\n",stack->uspevaemost.B[0] );
fprintf(f2, "B2:%d\n",stack->uspevaemost.B[1] );
fprintf(f2, "B3:%d\n",stack->uspevaemost.B[2] );
fprintf(f2, "B4:%d\n",stack->uspevaemost.B[3] );
fprintf(f2, "SrBall:%d\n",(stack->uspevaemost.B[1]+stack->uspevaemost.B[0]+stack->uspevaemost.B[2]+stack->uspevaemost.B[3])/4 );
stack=stack->next; //движение по списку
}
}
puts("File sohranen");
fclose(f2);
}
 
 
 
using namespace std;
 
int main()
{
Student *first; //указатель на вершину стека
char name1[Lmax], name2[Lmax],grup[Lmax]; /* имена входного и
выходного файла */
printf("Input file name: ");
gets(name1);
printf("Output file name: ");
gets(name2);
first=stack(name1); //формирование стека
if (first!=NULL)
{
 
vivod(first, name2); //вывод результата в файл
printf("Results saved in file %s\n", name2);
 
printf("Input group of student: ");
gets(name1);
}
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru