Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 16:53   #1
bilochka
Пользователь
 
Регистрация: 10.02.2013
Сообщений: 12
По умолчанию создать односвязный список элементов с атмосферным давлением выше 760 мм рт.ст., сортировка по полю температура воздуха ( на C )

исправить и добавить функции:
созд.список эл-тов с темп. воды < заданного знач.,
вывод даты с макс. температурой воздуха и воды,
создать список эл-тов с атмосферным давлением выше 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");
         }
      }

Последний раз редактировалось ACE Valery; 11.05.2013 в 22:49.
bilochka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
температура воздуха MariKa-91 Помощь студентам 1 04.06.2010 20:59
Программирование контроллера, управляющего давлением воздуха DD2 Помощь студентам 6 21.04.2010 20:03
[pascal]создать линейный список из элементов файла sunny19 Паскаль, Turbo Pascal, PascalABC.NET 1 25.06.2007 20:33