Описать структуру с именем ZNAK - C (СИ)

  1. Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак зодиака; • дата рождения (массив из трёх чисел). Задание на поиск: найти информацию о людях, родившихся под знаком, название которого введено с клавиатуры. Написать программу, которая выполняет следующие действия: 1. Ввод данных об информационном объекте через диалог с пользователем и запись этих данных в массив. При вводе проверять, есть ли свободное место в массиве. 2. Вывод хранящихся данных на экран. 3. Выполнение задания на поиск, которое определяется вариантом. Программа должна содержать 3 функции (ввод одного элемента массива (одной строчки таблицы), вывод всей таблицы на экран, выполнение задания на поиск) и меню, позволяющее пользователю выбрать одно из трех действий.


textual

Код к задаче: «Описать структуру с именем ZNAK - C (СИ)»

#include <stdio.h>
#include <stdlib.h>
 
#include <string.h>
 
#define SIZE 5
 
typedef struct
{
  char fn[20], ln[20], zodiac[20];
  int bday[3];
} zodiac;
 
void printElement(zodiac * list, int index)
{
  printf("[Found] %s %s born on %d.%d.%d (%s)\n", list[index].fn, list[index].ln, list[index].bday[0],
      list[index].bday[1], list[index].bday[2], list[index].zodiac);
}
 
void search(zodiac * list, void * key, int * option)
{
  switch (*option)
  {
  case 0:
    for (int i = 0; i < SIZE; i++)
    {
      if (list[i].bday[0] && !strcmp(list[i].fn, (char *) key))
      {
        printElement(list, i);
      }
    }
    break;
  case 1:
    for (int i = 0; i < SIZE; i++)
    {
      if (list[i].bday[0] && !strcmp(list[i].ln, (char *) key))
      {
        printElement(list, i);
      }
    }
    break;
  case 2:
    for (int i = 0; i < SIZE; i++)
    {
      if (list[i].bday[0] == *(int *) key && list[i].bday[1] == *((int *) key + 1)
          && list[i].bday[2] == *((int *) key + 2))
      {
        printElement(list, i);
      }
    }
    break;
  default:
    printf("Something gone wrong!\n");
    break;
  }
}
 
int main(int argc, char ** argv)
{
  zodiac list[SIZE];
  memset(list, 0, sizeof(zodiac) * SIZE);
  char command[20];
 
  while (1)
  {
    printf("> ");
    scanf("%s", command);
 
    if (!strcmp(command, "add"))
    {
      int index = 0;
      for (int i = 0; i < SIZE; i++, index++)
      {
        if (!list[i].bday[0])
        {
          scanf("%s %s %s %d %d %d", list[i].fn, list[i].ln, list[i].zodiac, &list[i].bday[0], &list[i].bday[1],
              &list[i].bday[2]);
          break;
        }
      }
      if (index == SIZE)
      {
        printf("There are no free slots!\n");
      }
    }
    else if ((!strcmp(command, "print")))
    {
      for (int i = 0; i < SIZE; i++)
      {
        if (list[i].bday[0])
        {
          printElement(list, i);
        }
      }
    }
    else if ((!strcmp(command, "search")))
    {
      int option;
      char key[20];
      int date[3];
 
      printf("What you are looking for? (Firstname: 0, Lastname: 1, Birthday: 2): ");
      scanf("%d", &option);
      printf("Searching key: ");
 
      if (option == 2)
      {
        scanf("%d %d %d", &date[0], &date[1], &date[2]);
        search(list, (void *) date, &option);
      }
      else
      {
        scanf("%s", key);
        search(list, (void *) key, &option);
      }
    }
    else if ((!strcmp(command, "exit")))
    {
      return EXIT_SUCCESS;
    }
    else
    {
      printf("unknown command\n");
    }
  }
  return EXIT_SUCCESS;
}

СДЕЛАЙТЕ РЕПОСТ

9   голосов, оценка 4.111 из 5



Похожие ответы
  1. Описать тип struct Rectangle, задающий на плоскости замкнутый прямоугольник со сторонами, параллельными координатным осям и габаритами (x–, x+) и (y–, y+) по осям абсцисс и ординат соответственно. Реализовать в виде отдельных функций следующие операции над переменными этого типа: а) вычисление площади прямоугольника; б) построение прямоугольника по паре точек, задающих любую пару противолежащих вершин; в) построение пересечения двух прямоугольников; г) проверка принадлежности точки прямоугольнику; д) проверка включения одного прямоугольника в другой; е) поворот прямоугольника относительно центра на прямой угол. С использованием описанных типа и функций разработать программу, которая для заданного набора из N прямоугольников находит:1) площадь наименьшего из прямоугольников, содержащего в себе один и более прямоугольников из заданного набора; 2) все пары прямоугольников, совпадающих с точностью до поворота напрямой угол. Не знаю как сделать пункты, выделенные жирным. Помогите

  1. Нужно описать алгоритм этой программы. Написать, что делает каждая строка в этом коде. C1 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 printf("Введите время вылета и прилета с А в Б (hh:mm)\n");        for(i = 0; i < 4; i++)      {         scanf("%d:%d", &h[i], &m[i]);         t[i] = (h[i]*60 + m[i]);          if(h[i]>=24)        {         printf("Недопустимое значение\n");         system("pause");           return main();        }         if(m[i]>60)        {         printf("Недопустимое значение\n");         system("pause");           return main();         }         if (i==1)         {             printf("Введите время вылета и прилета с Б в А (hh:mm)\n");              continue;         }      }              if(t[0]>t[1])          t[1] += 24*60;          if(t[2]>t[3])          t[3] += 24*60;           r = fabs((double)(t[1] - t[0] + t[3] - t[2]) / 2+0.5);           rh = (r%(24*60)) / 60;         rm = r % 60;            printf("Время полета : %2.2d:%2.2d\n", rh, rm);          system("pause");         return main();

  1. Не получается сделать сортировку, уже много чего перепробовал, помогите пожалуйстаC1 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 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include struct uchs {     char klass[20];     int year;     char name[20];     int str;     char rasp[150];   }; int main() {     int i;     int s;     struct uchs arr[100]; //100 ГґГ*ìèëèé Г¬Г*êñèìóì     int count_uch = 0; //Г±Г·ГҐГІГ·ГЁГЄ ГґГ*ìèëèé     int d = 8;     //int j, k;     int a = 0;     int fh = _open("file.dat", _O_RDWR | _O_BINARY); //ïðîâåðÿåì, Г±ГіГ№ГҐГ±ГІГўГіГҐГІ ëè ГґГ*éë         if (fh == -1)     {   //åñëè Г*ГҐ Г±ГіГ№ГҐГ±ГІГўГіГҐГІ, ñîçäГ*ГҐГ¬           fh = _creat("file.dat", _S_IREAD | _S_IWRITE);         if (fh == -1)             return 1;     }     //ïîêГ* Г*ГҐ ГЄГ®Г*ГҐГ¶ ГґГ*éëГ* ñ÷èòûâГ*ГҐГ¬ ГЁГ*ГґГі Гў Г¬Г*Г±Г±ГЁГў ñòðóêòóð     while (!_eof(fh))     {         _read(fh, &arr[count_uch], sizeof arr[count_uch]);         count_uch++;  //óâåëè÷èâГ*ГҐГ¬ Г°Г*çìåðГ*îñòü Г¬Г*Г±Г±ГЁГўГ* Г*Г* 1 Г± ГЄГ*æäûì Г±Г·ГЁГІГ*Г*Г*ûì ýëåìåГ*òîì     }     do     {         setlocale(LC_ALL, "Rus");         system("cls"); //î÷èñòêГ* ГЅГЄГ°Г*Г*Г*         printf("1: ÄîáГ*ГўГЁГІГј Г§Г*ГЇГЁГ±Гј\n2: Âûâåñòè ГЁГ*ôîðìГ*öèþ Г® ГўГ±ГҐГµ ГіГ·ГҐГ*ГЁГЄГ*Гµ\n 3: îòñîðòèðîâГ*ГІГј:\n0: Г‡Г*êðûòü ïðîãðГ*ììó\nÂûáåðèòå ГЇГіГ*ГЄГІ: ");         scanf("%d", &d);         switch (d) //ìåГ*Гѕ         {                 case 1: {                     setlocale(LC_ALL, "Rus");                     //äîáГ*âëåГ*ГЁГҐ Г*îâîé Г§Г*ГЇГЁГ±ГЁ                     printf("Ââåäèòå èìÿ/ГґГ*ìèëèþ: ");                     fflush(stdin);                     gets(arr[count_uch].name);                         printf("Ââåäèòå ГЄГ«Г*Г±Г± ГіГ·ГҐГ*ГЁГЄГ*: ");                     fflush(stdin);                     gets(arr[count_uch].klass);                     printf("Ââåäèòå ñêîëüêî ëåò ГіГ·ГҐГ*ГЁГЄГі: ");                     fflush(stdin);                     scanf("%d", &arr[count_uch].year);                       printf("Ââåäèòå ñêîëüêî äåГ*ГҐГЈ Г*Г* ГЄГ*ðòî÷êå Гі ГіГ·ГҐГ*ГЁГЄГ*: ");                     fflush(stdin);                     scanf("%d", &arr[count_uch].str);                     printf("Ââåäèòå Г°Г*Г±Г±ГЇГЁГ±Г*Г*ГЁГҐ ГіГ·ГҐГ*ГЁГЄГ*: ");                     fflush(stdin);                     gets(arr[count_uch].rasp);                     count_uch++;                     break; }                                         case 2: {setlocale(LC_ALL, "Rus");                     for (i = 0; i arr[j].year)                           {                               uchs s_arr = arr[count_uch];                               arr[i] = arr[j];                               arr[j] = s_arr;                           }                       }                   }                   _getch();                   break; }                   }           }         while (d != 0);         return 0;     }

  1. Всем привет, у меня проблема с одним заданием. Значит звучит оно так. Надо создать массив на 10, потом сделать так, что бы каждый элемент массива указывал на мою структуру, и потом в конце после того, как все 10 структур я заполнил, все вывести на экран все 10 структур. Так как я только учусь, и в голове каша, не могу разобраться. Вот код:C1 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 #include #include #include     struct automobile {     char model[20];     char Year_of_manufacture[20];     char probeg[20];     char price[20];     char color[15];     char country[15];     char mark[15];   }; int structura() {     setlocale(LC_ALL, "rus");     int i = 0;     for(i=0;i<10;i++){   struct automobile arr[10];   printf("Введите модель: ");   scanf("%s",arr[i].model);   printf("Введите год выпуска: ");   scanf("%s",arr[i].Year_of_manufacture);   printf("Введите пробег: ");   scanf("%s",arr[i].probeg);   printf("Цена: ");   scanf("%s",arr[i].price);   printf("цвет: ");   scanf("%s",arr[i].color); printf("Страна выпуска: ");   scanf("%s",arr[i].country);   printf("Марка: ");   scanf("%s",arr[i].mark);     } }     int main() {     setlocale(LC_ALL, "rus");   struct automobile *arr[10]; int i=0; for(i=0;i<10;i++){ arr[i] = (struct automobile*) malloc(sizeof(struct automobile));   } structura(); for(i=0;i<10;i++){ struct automobile arr[10]; printf("\nМодель: %s, Год выпуска :%s, Пробег : %s, Цена: %s, Цвет : %s, Страна : %s, Марка : %s\n ",         arr[i].model, arr[i].Year_of_manufacture, arr[i].probeg, arr[i].price, arr[i].color, arr[i].country, arr[i].mark); } }

  1. Напишите программу «Речные рыбы». Информация о рыбах должна содержаться в записях со следующими полями: название, средний размер, средний вес, средняя продолжительность жизни. Разработать различные виды запросов информации из базы данных программы, например выдать список рыб в алфавитном порядке, заданных размеров и т. д.

  1. Как известно компилятор применяет выравнивание данных для структуры. Мне интересно, в том случае, когда память для структуры выделяется динамически, в таком случае данные в памяти располагаются плотно и без учета выравнивания и нужно ли обеспечивать выравнивание при помощи специальных явных padding полей для структуры? Вот, в этом случае, нужно ли обеспечить выравнивание явно при помощи явных padding полей?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include   #include   struct Animal {     const char *name;     int age; } Animal;     int main() {     struct Animal *dog = malloc(sizeof(Animal));     dog->name = "Spike";     dog->age = 3; }http://rextester.com/UQDA99254

  1. Введите с клавиатуры две строки символов. Допишите вторую строку в конец первой, после чего повторите эту операцию еще раз. Далее выведите первую строку на экран. (на с)Добавлено через 46 секунд ...

  1. Извиняюсь за глупый вопрос, можно ли без использования списка дописывать в переменную новые значения через перенос строки? Добавлено через 15 минут Я так понимаю тут нужен массив? Как с ним сделать подобное?))

  1. Добрый вечер. Столкнулся с проблемой, не могу записать структуру в файл. Есть структура C++1 2 3 4 5 6 7 8 9 10 11 struct Pokypatel {     char fam[10];     char name[100];     char otche[100];     char sity[100];     char yl[100];     int numhouse[100];     int numflooat[100];     int numcart[100];     int codpok[100]; };На этом этапе я заполняю его:C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 printf("Ведите Фамилию:");     gets_s(p[i].fam);     printf("Ведите имя:");     gets_s(p[i].name);     printf("Ведите отчество:");     gets_s(p[i].otche);     printf("Ведите город:");     gets_s(p[i].sity);     printf("Ведите Улицу:");     gets_s(p[i].yl);     printf("Ведите № дома:");     scanf("%d%*c",  p[i].numhouse);     printf("Ведите № квартиры:");     scanf("%d", p[i].numflooat);     printf("Ведите № карты:");     scanf("%d", p[i].numcart);     printf("Ведите № покупки:");     scanf("%d", p[[/CSHARP]i].codpok);А на этом этапе я записываю его в файл:C++1 2 3 FILE *f1 = fopen("Text.txt", "w");     fwrite(&p[i], sizeof(char), 1, f1);     fclose(f1);Проблема в том что он записывает его с мусором, пробовал C++1 p[i] = {};Не помогло. Помогите пожалуйста!

  1. 6. ф-я принимает два парметра числитель и знаменатель. ф-я выводит сокращенную дробь