#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
//односвязный список
typedef struct gms_t
{
int data; //дата
int temp_vozducha; //температура воздуха
int temp_vodi; //температура воды
int atm_davl; //атмосферное давление
struct gms_t* next //указатель на следующий элемент
}gms;
typedef gms* pelem; //тип-указатель
pelem HEAD = NULL; //"голова" списка
int NN = 0; //текущее количество элементов
int N_MAX = 10; //максимум списка
int main()
{
int menu;
puts("\n Menu :");
puts("\n1) Dobavlenie elementa.");
puts("\n2) Redaktirovanie.");
puts("\n3) Udalenie elementa.");
puts("\n4) Sortirovka po polju temperatura vozduha.");
puts("\n5) Vyvod vseh dannyh.");
puts("\n6) Formirovanie spiska jelementov s temperaturoj vody nizhe zadanogo znachenija.");
puts("\n7) Vyvod daty s maksimal'noj temperaturoj vozduha i vody.");
puts("\n8) Formirovanie spiska jelementov s atmosfernym davleniem vyshe 760 mm rt.st..");
puts("\n0) THE END");
do
{
printf("\nVvedite nomer zadachi : ");
scanf("%d",&menu);
switch(menu)
{
case 1 : ad();break;
case 2 : ed(pelem p); break;
case 3 : del(char obj_data[]); break;
case 4 : sort(); break;
case 5 : rd(pelem p); break;
default:
if (menu!=0)
puts("\n\n \t\tVveden nepravil'nyj nomer zadachi!"); } }
while (menu!=0);
puts("\n ********THE END******** \n");
return 0;
}
pelem ad() //добавление элемента
{
pelem neo = (pelem) malloc(sizeof(gms));
//добавление элемента в начало
if (HEAD == NULL)
{
HEAD = neo;
neo->next = NULL;
}
else
{
neo->next = HEAD;
HEAD = neo;
}
NN++;
if (NN < N_MAX)
{
pelem p = ad();
ed(p);
}
else
{
printf("List is full\n");
}
return neo;
}
void ed(pelem p) //редактирование элемента
{
pelem ad();
//ввод данных
gms dan;
printf("Data: ");
scanf("%d", &dan.data);
printf("Temperatura vodi: ");
scanf("%d", &dan.temp_vodi);
printf("Temperatura vozducha: ");
scanf("%d", &dan.temp_vozducha);
printf("Atmosphere davlenie : ");
scanf("%d", &dan.atm_davl);
dan.next = p->next;
*p = dan;
system("cls");
char obj[40];
printf("Edit object : ");
scanf("%s", obj);
if (HEAD)
{
pelem p = find(obj);
if (p)
{
ed(p);
}
}
else
{
printf("List is empty\n");
}
}
void rd(pelem p) //чтение элемента
{
int i;
if (p)
{
for (i = 0; i < 80; i++)
{
printf("_");
}
printf("\n");
printf("Data: %d\n", p->data);
printf("Temperatura vodi: %d\n", p->temp_vodi);
printf("Temperatura vozducha: %d\n", p->temp_vozducha);
printf("Atmosphere davlenie: %d\n", p->atm_davl);
for (i = 0; i < 80; i++)
{
printf("_");
}
printf("\n");
pelem p = HEAD;
if (p == NULL)
{
printf("List is empty\n");
}
else
while (p != NULL)
{
rd(p);
p = p->next;
}
}
}
pelem find(char obj_data[]) //поиск элемента
{
pelem p = HEAD;
do
{
if (!strcmp(p->data, obj_data))
{
return p;
}
p = p->next;
}
while (p);
printf("Ne naydenu\n");
return p;
}
void del(char obj_data[])
{
if (HEAD)
{
pelem p = find(obj_data);
if (p)
{
if (p == HEAD) //если голова - и есть искомый объект
{
if (NN > 1)
{
HEAD = HEAD->next;
}
else
{
HEAD = NULL;
}
}
else
{
pelem father = HEAD;
while (father->next != p)
{
father = father->next;
}
father->next = p->next;
}
free(p);
NN--;
printf("Udaleno: %s\n", obj_data);
char obj[40];
printf("Delete item : ");
scanf("%s", obj);
if (HEAD)
{
del(obj);
}
else
{
printf("List is empty\n");
}
return;
}
}
}
void sort() //сортировка
{
int j;
for (j = 0; j < NN; j++)
{
pelem p = HEAD;
pelem son = p->next;
if (p->temp_vozducha < son->temp_vozducha)
{
p->next = son->next;
HEAD = son;
son->next = p;
}
p = HEAD;
while ((p->next)->next)
{
pelem father = p;
p = p->next;
pelem son = p->next;
if (p->temp_vozducha < son->temp_vozducha)
{
father->next = son;
p->next = son->next;
son->next = p;
}
p = father->next;
}
sort();
pelem p = HEAD;
if (p == NULL)
{
printf("List is empty\n");
}
else
while (p != NULL)
{
rd(p);
p = p->next;
}
}
}
while (c != '0');
}
}
/*int main()
{
char c;
do
{
printf("Menu\n"
"Count: %d/%d\n"
"[1] add\n"
"[2] list\n"
"[3] edit\n"
"[4] delete\n"
"[5] sort\n"
"[0] exit\n"
">>", NN, N_MAX);
c = getch();
system("cls");
if (c == '1') //добавление элемента
{
if (NN < N_MAX)
{
pelem p = ad();
ed(p);
}
else
{
printf("List is full\n");
}
}
if (c == '2') //просмотр списка
{
pelem p = HEAD;
if (p == NULL)
{
printf("List is empty\n");
}
else
while (p != NULL)
{
rd(p);
p = p->next;
}
}
if (c == '3')
{
char obj[40];
printf("Edit object : ");
scanf("%s", obj);
if (HEAD)
{
pelem p = find(obj);
if (p)
{
ed(p);
}
}
else
{
printf("List is empty\n");
}
}
if (c == '4')
{
char obj[40];
printf("Delete item : ");
scanf("%s", obj);
if (HEAD)
{
del(obj);
}
else
{
printf("List is empty\n");
}
}
if (c == '5')
{
sort();
pelem p = HEAD;
if (p == NULL)
{
printf("List is empty\n");
}
else
while (p != NULL)
{
rd(p);
p = p->next;
}
}
}
while (c != '0');
return 0;
}*/
Не обломался и вчитался :)
Учитесь читать то, что вам пишет компилятор. Первая же строка:
main.cpp(15) : error C2143: syntax error : missing ';' before '}'
//...
говорит о том, что на строке 15 не хватает ; перед }. Посмотрим:
//...
struct gms_t* next //указатель на следующий элемент
}gms;
//...
Действительно, не хватает. Исправляем (после next поставьте ;), снова компилируем. Следующая ошибка:
main.cpp(41) : error C3861: 'ad': identifier not found
Компилятор не знает, что такое ad. Смотрю на код. Оказывается, это функция, но она определена ниже, чем используется. Тут есть 2 варианта:
Пойдем по второму пути. Заодно объявим другие функции, которые будут вызваны выше, чем определены:
// объявления функций
pelem ad();
void ed(pelem p);
void del(char obj_data[]);
void sort();
void rd(pelem p);
int main()
{
//...
Следующая ошибка:
main.cpp(49) : error C2275: 'pelem' : illegal use of this type as an expression
Посмотрите на 49-ю строку:
case 2 : ed(pelem p); break;
Зачем тут тип pelem? Типичная ошибка программирования методом copy-paste. Исправляем это и такую же ошибку на 50й и 52й строках:
case 1 : ad();break;
case 2 : ed(p); break;
case 3 : del(obj_data); break;
case 4 : sort(); break;
case 5 : rd(p); break;
Дальше.
main.cpp(49) : error C2065: 'p' : undeclared identifier
Наверное, название переменной p тоже осталось после copy-paste. Судя по коду функции ed(pelem p), Вы планируете изменить элемент списка. Но какой? Сперва пытаетесь вызывать функцию ad(), но делаете это неправильно.
void ed(pelem p) //редактирование элемента
{
pelem ad();
Тип возвращаемого значения тут уже не нужен. А то, что функция возвращает, вы не используете.
Дальше читаю код:
pelem ad() //добавление элемента
{
pelem neo = (pelem) malloc(sizeof(gms));
И тут пламенный порыв помочь новичку угасает навсегда. Срочно бегите к семинаристу, посыпайте голову пеплом, и признайтесь ему, что не понимаете синтаксиса языка C++, не знаете, как работает malloc. Попросите дополнительно позаниматься с Вами!!!
Продвижение своими сайтами как стратегия роста и независимости