4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
1

Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры)

09.04.2011, 23:29. Показов 880. Ответов 8
Метки нет (Все метки)

1) В столовой предлагается N комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый дешевый и самый дорогой обед? Сколько калорий включает в себя самое калорийное блюдо?

пожалуйста!!! заранее спасибо!)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2011, 23:29
Ответы с готовыми решениями:

Реализовать поиск по заданному полю в массиве объектов пользовательского типа (структуры)
Добрый вечер! Помогите решить данную задачу, сколько ни пытался, ни в инете, ни сам не могу...

Реализовать поиск в массиве объектов пользовательского типа по заданному полю
Создать типизированный файл, элементами которого являются сведения об автомобилях: марка,...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа
ОСНОВЫ ОБРАБОТКИ СТРУКТУР С клавиатуры ввести последовательность записей, содержащих информацию...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа
Все сделал, в своей задачи, осталось только вот это, помогите. Вывод на экран информацию о людях,...

8
4424 / 2363 / 853
Регистрация: 29.11.2010
Сообщений: 5,239
10.04.2011, 00:26 2
Надеюсь, понравится. )
C
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
123
124
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
typedef struct Course {
  char *name;
  float price;
  float caloricity;
} Course;
 
typedef struct Meal {
  size_t course_count;
  size_t id;
  struct Course* courses;
} Meal;
 
typedef struct Menu {
  size_t meal_count;
  struct Meal* meals;
} Menu;
 
void InitCourse(struct Course* course) {
  char *slugs[] = { "de", "flo", "pe", "ka", "tsi", "us", "pas", "ta",
                    "bra", "ber", "roni" };
  int slug_size = sizeof(slugs) / sizeof(*slugs);
  course->name = (char*)malloc(64);
  course->name[0] = '\0';
  size_t i;
  for (i = 0; i < 3 + rand() % 3; ++i)
    strcat(course->name, slugs[rand() % slug_size]);
  course->name[0] += 'A' - 'a';
  course->price = (rand() % 10000) / 100.;
  course->caloricity = (rand() % 1000) / 10.;
  printf("%s: %.2f rub / %.1f kkal\n", course->name, course->price,
                                       course->caloricity);
}
 
void DeleteCourse(struct Course* course) {
  free(course->name);
}
 
void InitMeal(size_t course_count, struct Meal *meal, size_t id) {
  meal->id = id;
  meal->course_count = course_count;
  meal->courses = (struct Course*)malloc(sizeof(struct Course) * course_count);
  size_t i;
  for (i = 0; i < course_count; ++i)
    InitCourse(&meal->courses[i]);
}
 
void DeleteMeal(struct Meal *meal) {
  size_t i;
  for (i = 0; i < meal->course_count; ++i)
    DeleteCourse(&meal->courses[i]);
  free(meal->courses);
}
 
void InitMenu(size_t course_count, size_t meal_count, struct Menu *menu) {
  menu->meal_count = meal_count;
  menu->meals = (struct Meal*)malloc(sizeof(struct Meal) * meal_count);
  size_t i;
  for (i = 0; i < meal_count; ++i) {
    printf("Meal #%d:\n", i);
    InitMeal(course_count, &menu->meals[i], i);
  }
}
 
void DeleteMenu(struct Menu *menu) {
  size_t i;
  for (i = 0; i < menu->meal_count; ++i)
    DeleteMeal(&menu->meals[i]);
  free(menu->meals);
}
 
float MealPrice(struct Meal *meal) {
  size_t i;
  float result = 0;
  for (i = 0; i < meal->course_count; ++i)
    result += meal->courses[i].price;
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  struct Menu menu;
  
  InitMenu(10, 5, &menu);
  float min_meal_price, max_meal_price;
  min_meal_price = max_meal_price = MealPrice(&menu.meals[0]);
  struct Meal *min_price_meal, *max_price_meal;
  min_price_meal = max_price_meal = &menu.meals[0];
 
  size_t i, j;
  for (i = 1; i < menu.meal_count; ++i) {
    float this_meal_price = MealPrice(&menu.meals[i]);
    if (this_meal_price > max_meal_price) {
      max_meal_price = this_meal_price;
      max_price_meal = &menu.meals[i];
    }
    if (this_meal_price < min_meal_price) {
      min_meal_price = this_meal_price;
      min_price_meal = &menu.meals[i];
    }
  }
  printf("Maximum price meal id: %d, price: %.2f rub.\n", 
         max_price_meal->id, max_meal_price);
  printf("Minimum price meal id: %d, price: %.2f rub.\n", 
         min_price_meal->id, min_meal_price);
 
  struct Course* max_calority_course = &menu.meals[0].courses[0];
  for (i = 0; i < menu.meal_count; ++i)
    for (j = 0; j < menu.meals[i].course_count; ++j)
      if (menu.meals[i].courses[j].caloricity >
          max_calority_course->caloricity)
        max_calority_course = &menu.meals[i].courses[j];
  printf("Max calority course is %s, price %.2f, kkal: %.1f",
         max_calority_course->name, max_calority_course->price,
         max_calority_course->caloricity);
 
  DeleteMenu(&menu);
 
  return 0;
}
2
4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
10.04.2011, 02:24  [ТС] 3
не работает((((((((((((
0
4424 / 2363 / 853
Регистрация: 29.11.2010
Сообщений: 5,239
10.04.2011, 02:51 4
Как информативно. Могу ответить в том же духе: "А у меня работает".

В чем выражается "не работает"? Если не компилируется, то какие ошибки, на каких строках? Если выдает неправильный результат, то какой? Вывод программы поможет.
1
4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
10.04.2011, 02:52  [ТС] 5
нет, она работает, но вот только на секунду включается и снова синий экран...
нужно сделать задержку экрана, но как??
0
100 / 100 / 15
Регистрация: 04.02.2010
Сообщений: 162
10.04.2011, 02:55 6
подключить библиотеку #include <conio.h>

в функции main() перед return 0; написать getch();
1
4424 / 2363 / 853
Регистрация: 29.11.2010
Сообщений: 5,239
10.04.2011, 02:56 7
Тогда чего говорить, что не работает?
Можно добавить в конце программы ввод чего-нибудь ненужного.
C
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
123
124
125
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
 
typedef struct Course {
  char *name;
  float price;
  float caloricity;
} Course;
 
typedef struct Meal {
  size_t course_count;
  size_t id;
  struct Course* courses;
} Meal;
 
typedef struct Menu {
  size_t meal_count;
  struct Meal* meals;
} Menu;
 
void InitCourse(struct Course* course) {
  char *slugs[] = { "de", "flo", "pe", "ka", "tsi", "us", "pas", "ta",
                    "bra", "ber", "roni" };
  int slug_size = sizeof(slugs) / sizeof(*slugs);
  course->name = (char*)malloc(64);
  course->name[0] = '\0';
  size_t i;
  for (i = 0; i < 3 + rand() % 3; ++i)
    strcat(course->name, slugs[rand() % slug_size]);
  course->name[0] += 'A' - 'a';
  course->price = (rand() % 10000) / 100.;
  course->caloricity = (rand() % 1000) / 10.;
  printf("%s: %.2f rub / %.1f kkal\n", course->name, course->price,
                                       course->caloricity);
}
 
void DeleteCourse(struct Course* course) {
  free(course->name);
}
 
void InitMeal(size_t course_count, struct Meal *meal, size_t id) {
  meal->id = id;
  meal->course_count = course_count;
  meal->courses = (struct Course*)malloc(sizeof(struct Course) * course_count);
  size_t i;
  for (i = 0; i < course_count; ++i)
    InitCourse(&meal->courses[i]);
}
 
void DeleteMeal(struct Meal *meal) {
  size_t i;
  for (i = 0; i < meal->course_count; ++i)
    DeleteCourse(&meal->courses[i]);
  free(meal->courses);
}
 
void InitMenu(size_t course_count, size_t meal_count, struct Menu *menu) {
  menu->meal_count = meal_count;
  menu->meals = (struct Meal*)malloc(sizeof(struct Meal) * meal_count);
  size_t i;
  for (i = 0; i < meal_count; ++i) {
    printf("Meal #%d:\n", i);
    InitMeal(course_count, &menu->meals[i], i);
  }
}
 
void DeleteMenu(struct Menu *menu) {
  size_t i;
  for (i = 0; i < menu->meal_count; ++i)
    DeleteMeal(&menu->meals[i]);
  free(menu->meals);
}
 
float MealPrice(struct Meal *meal) {
  size_t i;
  float result = 0;
  for (i = 0; i < meal->course_count; ++i)
    result += meal->courses[i].price;
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  struct Menu menu;
  
  InitMenu(10, 5, &menu);
  float min_meal_price, max_meal_price;
  min_meal_price = max_meal_price = MealPrice(&menu.meals[0]);
  struct Meal *min_price_meal, *max_price_meal;
  min_price_meal = max_price_meal = &menu.meals[0];
 
  size_t i, j;
  for (i = 1; i < menu.meal_count; ++i) {
    float this_meal_price = MealPrice(&menu.meals[i]);
    if (this_meal_price > max_meal_price) {
      max_meal_price = this_meal_price;
      max_price_meal = &menu.meals[i];
    }
    if (this_meal_price < min_meal_price) {
      min_meal_price = this_meal_price;
      min_price_meal = &menu.meals[i];
    }
  }
  printf("Maximum price meal id: %d, price: %.2f rub.\n", 
         max_price_meal->id, max_meal_price);
  printf("Minimum price meal id: %d, price: %.2f rub.\n", 
         min_price_meal->id, min_meal_price);
 
  struct Course* max_calority_course = &menu.meals[0].courses[0];
  for (i = 0; i < menu.meal_count; ++i)
    for (j = 0; j < menu.meals[i].course_count; ++j)
      if (menu.meals[i].courses[j].caloricity >
          max_calority_course->caloricity)
        max_calority_course = &menu.meals[i].courses[j];
  printf("Max calority course is %s, price %.2f, kkal: %.1f\n",
         max_calority_course->name, max_calority_course->price,
         max_calority_course->caloricity);
 
  DeleteMenu(&menu);
 
  scanf("%d", &i);
  return 0;
}
Не надо conio подключать и getch использовать. Это далеко не везде соберется. С тем же успехом можно порекомендовать
C
1
2
3
4
#include <curses.h>
...
getch();
...
2
100 / 100 / 15
Регистрация: 04.02.2010
Сообщений: 162
10.04.2011, 03:00 8
Цитата Сообщение от lemegeton Посмотреть сообщение
Не надо conio подключать и getch использовать. Это далеко не везде соберется. С тем же успехом можно порекомендовать
Я это прекрасно понимаю, но в данном случае это выход для ТСа
1
4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
10.04.2011, 03:04  [ТС] 9
огромное Спасибо!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2011, 03:04
Помогаю со студенческими работами здесь

Реализовать поиск по заданному полю в массиве пользовательского типа (структуры)
Для определенной пользователем структуры выполнить следующее: • Написать функцию формирования...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа PRICE
Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа (структура Student)
Описать переменную студент, содержащию имя, фамилию, отчество, название учебного заведения и...

Реализовать поиск и сортировку по заданному полю в массиве объектов пользовательского типа (структура Train)
Описать структуру с именем TRAIN, содержащую следующие поля: NAZV - название пункта назначения,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru