include windows SetConsoleOutputCP SetConsoleCP include stdio printf f

  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
#include <windows.h> // SetConsoleOutputCP, SetConsoleCP
#include <stdio.h> //printf , fgets
#include <conio.h> // getch
#include <string.h> // strcpy, strncmp, strchr
//---------------------------------------------------------------------------
struct TInfo{
char Name[31];
int Znach;
};
struct TElem { // моделирование стека на основе односвязного списка
TInfo Info; // или struct TInfo Info;
TElem *Next; // или struct TElem *Next; здесь и далее
};
TElem* PushStack(TElem *St, TInfo Info){ // добавить элемент в стек
TElem *Elem= new TElem;
Elem->Info.Znach = Info.Znach;
strcpy(Elem->Info.Name, Info.Name);
Elem->Next = St;
return Elem; // Адрес новой вершины
}
TInfo PopStack(TElem **PSt){ //извлечь элемент из стека
TElem *Elem = *PSt;
TInfo Info = Elem->Info;
*PSt = Elem->Next;
delete Elem;
return Info;
}
void TopToTop (TElem **PSt1, TElem **PSt2){
TElem *Elem, *StTop=*PSt1, *Dop=*PSt2;
Elem = StTop;
StTop = StTop->Next; // или StTop=(*StTop).Next;
Elem->Next = Dop;
Dop = Elem;
*PSt1 = StTop; *PSt2 = Dop; // сохранить новые адреса вершин по адресам PSt1 и PSt2
return;
}
TElem* CreateStack(TElem *St){
TInfo Info;
char Znachs[5];
char s1[50];
char s2c[3];
int s2;
FILE*f1;
f1 = fopen("input.txt", "wt+");
while (1){
fscanf(f1,"%s", s1);
if (strcmp(s1,"end")==0){break;} //признак конца - названия end
strcpy(s1,St->Info.Name);
fscanf(f1,"%s", s2c); St->Info.Znach=atoi(s2c);
St = PushStack(St, St->Info);
}
fclose(f1);
printf("Press any key to continue");
getch();
return St;
}
void OutputStack(TElem *St1){
TElem *Dop=NULL;
while (St1){
printf("%30s %3d\n", St1->Info.Name, St1->Info.Znach);
TopToTop(&St1, &Dop);
}
while(Dop) TopToTop(&Dop, &St1);
printf("Press any key to continue");
getch();
return;
}
TElem* FreeStack(TElem *St){
TInfo Info;
while (St){
Info = PopStack(&St);
}
return St;
}
TElem* Decide(TElem **PSt1,TElem *St2){
TElem * St1= *PSt1, *Dump=NULL, *Dop=NULL, *DopDop=NULL;
St2 = FreeStack(St2);
while (St1){
if (St1->Info.Znach < 20){ TopToTop(&St1, &Dop);}
else{
if (St1->Info.Znach>100) {
St1->Info.Znach=100;
PushStack(St2, St1->Info);
TopToTop(&St1, &Dop);
}
else {
PushStack(St2, St1->Info);
TopToTop(&St1, &Dop);
}
}
}
while(Dop) {
TopToTop(&Dop, &St1);
}
printf("Press any key to continue");
getch();
*PSt1 = St1; // новый адрес через параметр (изменение по адресу)
return St1; // новый адрес через результат функции вернется
}
int main()
{
TElem *StackTop1=NULL, *StackTop2=NULL;
StackTop1=CreateStack(StackTop1);
Decide(&StackTop1, StackTop2);
return 0;
}