3.1.1 Создайте структуру C++ для молочных продуктов (dairy), включающую название, вес порции, энергетическую ценность (в калориях), содержание белков, жиров и углеводов. Двадцать пять грамм сыра содержат 375 калорий, 5 грамм белков, 8 грамм жира и 0 грамм углеводов. Покажите, как присвоить эти значения переменным-членам вашей структуры. Напишите функцию, которая по заданным переменной типа struct dairy и весе в граммах (размер порции), возвращала бы число калорий в этой порции.
3.1.2. Используя структуру card, описанную в теме «Агрегатный тип struct», напишите процедуру сортировки розданных игроку карт. В карточных играх большинство игроков держит свои карты, отсортировав их по достоинству. Эта процедура должна расположить вначале тузы, затем короли, и так далее до двоек. У игрока пять карт.
3.1.3. Используйте структуру ch_stack, описанную в теме «Пример: стек» Напишите функцию
void reverse(char s1[],char s2[]);
Строки s1 и s2 должны быть одинакового размера. Строка s2 должна стать обращённой копией строки
s1. Внутри reverse используйте ch_stack для выполнения обращения.
3.1.4. Напишите для типа ch_stack;
//поместить n символов из s1[] в ch_stack stk void pushm(int n,const char s1[],ch_stack stk);
//извлечь n символов из stk в s1[]
void popn(int n,char s1[],const ch_stack stk);
3.2.1. Добавьте в пакет комплексных чисел (см. тему «Комплексные числа») процедуру вычитания
complex sub(complex& a,complex& b) проверьте её.
3.2.2. Добавьте в пакет комплексных чисел (см. тему «Комплексные числа») процедуру умножения
complex mul(complex& a,complex& b) проверьте её.
3.2.3. Добавьте в пакет комплексных чисел (см. тему «Комплексные числа») процедуру деления complex div(complex& a,complex& b) проверьте её.
3.3.1. Добавьте процедуру деления, возвращающую complex, когда ей передается double. Используйте её дляпрограммирования complex div(complex,double) и complex div (double, complex). Заметьте, как здесь перегружается функция div(), что обеспечивает полезную интеграцию при смешивании двух типов double и complex. Проверить работоспособность функций.
3.3.2. Добавьте процедуру умножения, возвращающую complex, когда ей передается double. Используйте её дляпрограммирования complex mul(complex,double) и complex mul(double, complex). Заметьте, как здесь перегружается функция mul(), что обеспечивает полезную интеграцию при смешивании двух типов double и complex. Проверить работоспособность функций.
3.3.3. Добавьте процедуру сложения, возвращающую complex, когда ей передается double. Используйте её дляпрограммирования complex add(complex,double) и complex add(double, complex). Заметьте, как здесь перегружается функция add (), что обеспечивает полезную интеграцию при смешивании двух типов double и complex. Проверить работоспособность функций.
3.4.1. Мы хотим определить структуру ch_deque (Double Ended Queue, deque — двусторонняя очередь.) для реализации двусторонней очереди. Двусторонняя очередь допускает помещение в оба конца (push) и извлечение с обоих концов (pop). Это обычная форма контейнера. struct ch_deque { char s[max_len]; int bottom,top; };
void reset(ch_deque* deq)
{
deq->top=deq->bottom=max_len/2; deq->top—;
}
Объявите и реализуйте push_t(), pop_t (), push_b(), pop_b(), out_stack(), top_оf(), bottom_of(), empty() и full(). Функция
push_t() выполняет помещение наверх (push on top). Функция push_b() отвечает за помещение вниз (push on bottom). Функция out_stack () должна выводить всю очередь сверху донизу.
Функции pop_t () и рор_b() соответствуют извлечению сверху (pop from top) и извлечению снизу (pop from bottom). Если вершина ниже основания, то это означает пустую (empty) очередь. Проверьте каждую функцию.
3.4.2. Расширьте тип данных ch_deque добавлением функции relocate(). Если ch_deque заполнена, то вызывается relocate(), и содержимое ch_deque перемещается в пустую область памяти, выравненную относительно центра max_len/2 массива s. Вот заголовок объявления этой функции;
//Возвращает true, если завершается успешно, false — если нет bool relocate(ch_deque* deq)
3.4.3. Напишите функцию, которая меняет местами содержимое двух строк. Если вы поместите символьную строку в стек, а затем извлечете её, она станет обращённой. Но при обмене строками нам нужен неизменный порядок символов. Используйте двустороннюю очередь deque для выполнения такого обмена. Строки будут храниться в двух символьных массивах одинакового размера, но сами строки могут быть разной длины. Вот прототип этой функции:
void swap(char sl[],char s2[]);
3.4.4. Напишите списочную операцию для подсчета элементов списка. Подразумевается рекурсия до конца списка с выходом после обнаружения указателя NULL. Если список оказывается пустым, возвращается значение 0, в противном случае возвращается число элементов в списке.
int count(slist* head);
3.4.5. Напишите функцию lookup(), которая ищет в списке конкретный элемент с. Если элемент найден, возвращается указатель на этот элемент, в противном случае возвращается указатель на NULL. slist* lookup(char с,slist* head);
Прикрепленные файлы: |
|
|---|---|
|
Администрация сайта не рекомендует использовать бесплатные работы для сдачи преподавателю. Эти работы могут не пройти проверку на уникальность. Узнайте стоимость уникальной работы, заполните форму ниже: Узнать стоимость |
|
Скачать файлы: |
|
|
|
