исправить и добавить функции:
созд.список эл-тов с темп. воды < заданного знач.,
вывод даты с макс. температурой воздуха и воды,
создать список эл-тов с атмосферным давлением выше 760 мм рт.ст., сортировка по полю температура воздуха
код:
Код:
#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; //максимум списка
pelem ad() //добавление элемента
{
pelem neo = (pelem) malloc(sizeof(gms));
//добавление элемента в начало
if (HEAD == NULL)
{
HEAD = neo;
neo->next = NULL;
}
else
{
neo->next = HEAD;
HEAD = neo;
}
NN++;
return neo;
}
void ed(pelem p) //редактирование элемента
{
//ввод данных
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");
}
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 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);
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;
}
}
}
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");
}
}