Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Диана_d
4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
09.04.2011, 23:29     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры) #1
1) В столовой предлагается N комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый дешевый и самый дорогой обед? Сколько калорий включает в себя самое калорийное блюдо?

пожалуйста!!! заранее спасибо!)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2011, 23:29     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры)
Посмотрите здесь:

C++ Реализовать функцию поиска по заданному полю в списке объектов типа "Собачий питомник"
Реализовать поиск по заданному полю в массиве структур типа "Student" C++
C++ Поиск в массиве объектов типа "Student" по заданному полю (файловый ввод/вывод)
Реализовать функцию поиска по заданному полю в массиве объектов типа "Person" C++
Поиск в массиве объектов типа "Student" по заданному полю (файловый ввод/вывод) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
Диана_d
4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
10.04.2011, 02:24  [ТС]     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры) #3
не работает((((((((((((
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.04.2011, 02:51     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры) #4
Как информативно. Могу ответить в том же духе: "А у меня работает".

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

в функции main() перед return 0; написать getch();
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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();
...
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
10.04.2011, 03:00     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры) #8
Цитата Сообщение от lemegeton Посмотреть сообщение
Не надо conio подключать и getch использовать. Это далеко не везде соберется. С тем же успехом можно порекомендовать
Я это прекрасно понимаю, но в данном случае это выход для ТСа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2011, 03:04     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры)
Еще ссылки по теме:

C++ Поиск в массиве объектов типа Student по заданному полю (массивы, структуры)
Поиск в массиве объектов типа Student по заданному полю (массивы, структуры) C++
C++ Реализовать поиск в массиве пользовательских объектов по заданному полю (использовать std::vector)

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

Или воспользуйтесь поиском по форуму:
Диана_d
4 / 4 / 0
Регистрация: 09.04.2011
Сообщений: 58
10.04.2011, 03:04  [ТС]     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры) #9
огромное Спасибо!!!
Yandex
Объявления
10.04.2011, 03:04     Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры)
Ответ Создать тему
Опции темы

Текущее время: 09:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru