Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие С++- не книжкой_новое.doc
Скачиваний:
4
Добавлен:
04.11.2018
Размер:
765.44 Кб
Скачать

Задание 1. Структуры

Пример. Ввести структуру ДАТА с полями ЧИСЛО, МЕСЯЦ, ГОД. Составить и протестировать функцию

    1. ввода и вывода на экран даты;

    2. вычисляющую порядковый номер дня в году по введенной дате;

    3. находящую в массиве введенных дат самую раннюю.

# include <iostream.h>

# include <stdio.h>

# include <conio.h>

# include <stdlib.h>

# include <iomanip.h>

struct date

{

Int year;

Int month;

int day;

};

int tab_day [2][12]= {{31,28,31,30,31,30,31,31,30,31,30,31},

{31,29,31,30,31,30,31,31,30,31,30,31}};

//****Функция, проверяющая является ли год високосным*******

Int visokos(int year)

{

int k=year%4==0&&year%100!=0||year%400==0;

return k;

}

//**********Функция ввода даты***************************

date vvod ()

{

date d;

N: cout<<"Введите день, месяц, число\n";

cin>>d.day>>d.month>>d.year;

int k=visokos(d.year);

if (d.day<1||d.day>tab_day[k][d.month-1]||d.month<1||d.month>12||d.year<0)

{cout<<"Ошибка ввода\n"; goto N;}

else cout<<"\Дата введена\n";

return d;

}

//*********Функция вывода даты*****************************

Vivod (date d)

{

cout<<setw(2)<<d.day<<'.'<<setw(2)<<d.month<<'.'<<setw(4)<<d.year<<"\n";

}

//*****Функция, вычисляющая порядковый номер дня в году*****

Int day_number(date d)

{

int k=visokos(d.year);

for (int i=0; i<d.month-1; i++)

d.day+=tab_day[k][i];

return d.day;

}

//*******Функция вычисляющая наименьшую дату *************

date min (date* m, int n)

{

int imin=0, myear=m[0].year, mmonth=m[0].month, mday=m[0].day;

for (int i=1; i<n; i++)

if (m[i].year<myear || m[i].year==myear&&(m[i].month<mmonth || m[i].month==mmonth && m[i].day<mday))

imin=i;

return m[imin];

}

main ()

{

N:

clrscr();

cout<< "Выберете функцию\n";

cout<<" 1 – ввод даты\n";

cout<<" 2 – вывод даты\n";

cout<<" 3 – порядковый номер даты\n";

cout<<" 4 – минимальная дата\n";

cout<<" 0 – выход из программы\n";

int nom;

cin>>nom;

switch (nom)

{

case 0: exit(0);

case 1: {date d=vvod(); break;}

case 2: {date d=vvod(); vivod (d); break;}

case 3: {date d=vvod();

cout<<"\nПорядковый номер "<<day_number(d);

break;

}

case 4:

{

cout<<"\nВведите количество дат ";

int n; cin>>n;

date* mas = new date [n];

for (int i=0; i<n; i++)

mas[i]=vvod();

cout<<"\nИз введенных дат:\n";

for (int i=0; i<n; i++)

Vivod(mas[I]);

cout<<"\наименьшая дата ";

Vivod (min(mas,n));

delete []mas;

break;

}

default: cout<<"Ошибка ввода ";

}

cout<<"\nДля продолжения нажмите Enter "; getch();

goto N;

}

  1. Ввести структуру с полями ЧИСЛИТЕЛЬ и ЗНАМЕНАТЕЛЬ для описания понятия РАЦИОНАЛЬНОЕ ЧИСЛО. Составить и протестировать функцию

    1. ввода и вывода на экран рационального числа;

    2. сокращающую рациональное число;

    3. вычисляющую произведение двух рациональных чисел;

    4. вычисляющую наибольшее из массива X[N] рациональных чисел;

    5. поиска в массиве X[N] рациональных чисел всех, равных заданному.

  2. Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ. Составить и протестировать функцию

    1. ввода исторического события;

    2. вывода на экран списка исторических событий;

    3. вычисляющую интервал в днях, прошедший между двумя заданными историческими событиями;

    4. сортирующую массив исторических событий по полю СОБЫТИЕ.

  3. Ввести структуру ДАТА с полями ЧИСЛО, МЕСЯЦ, ГОД. Составить и протестировать функцию

    1. ввода и вывода на экран даты;

    2. вычисляющую дату, на N дней вперед по заданной;

    3. находящую в массиве введенных дат все даты заданного года.

  4. Ввести структуру ДАТА с полями ЧИСЛО, МЕСЯЦ, ГОД. Составить и протестировать функцию

    1. ввода и вывода на экран даты;

    2. по году и порядковому номеру дня в году вычисляющую число и месяц года, соответствующему этому дню;

    3. находящую в массиве введенных дат самую позднюю.

  5. Ввести структуру АЛГЕБРАИЧЕСКИЙ ПОЛИНОМ с полями СТЕПЕНЬ, КОЭФФИЦИЕНТЫ. Составить и протестировать функцию.

    1. ввода и вывода полинома;

    2. дифференцирования полинома

    3. сложения двух полиномов;

    4. поиска полиномов с максимальной степенью в массиве полиномов;

  6. Ввести структуру АВТОМАШИНА с полями МАРКА, ГОД ВЫПУСКА, НОМЕР, ФАМИЛИЯ ВЛАДЕЛЬЦА. Написать и протестировать функцию

    1. регистрации новой машины;

    2. вывода на экран массива машин;

    3. поиска в массиве машины по любой из комбинации признаков.

  7. Ввести структуру СТУДЕНТ с полями ФИО, ЧИСЛО, МЕСЯЦ, ГОД РОЖДЕНИЯ. Написать и протестировать функцию

    1. добавления нового студента;

    2. вывода на экран массива студентов;

    3. поиска в массиве студентов по году рождения;

    4. сортирующую массив студентов по возрасту.

  8. Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ГОД, СОБЫТИЕ. Написать и протестировать функцию

    1. ввода исторического события;

    2. вывода на экран массива исторических событий;

    3. сортирующую массив исторических событий по полю ГОД;

    4. подсчитывающую средний интервал (в годах) между событиями в массиве событий.

  9. Ввести структуру СТУДЕНТ с полями ФИО, ГОД РОЖДЕНИЯ, КОД ГРУППЫ. Написать и протестировать функцию

    1. добавления нового студента в массив студентов;

    2. вывода на экран массива студентов;

    3. удаляющую из массива студента с определенной ФИО;

    4. поиска в массиве студентов по номеру группы.

  10. Ввести структуру ЭКСПОРТИРУЕМЫЙ ТОВАР с полями НАИМЕНОВАНИЕ ТОВАРА, СТРАНА (импортирующая товар), ОБЪЕМ ПАРТИИ (в штуках). Написать и протестировать функцию

    1. добавляющую новый товар в массив товаров;

    2. вывода на экран массива товаров;

    3. сортирующая массив товаров по полю СТРАНА;

    4. увеличивающую объем партий на n % для стран, импортирующих более k наименований товара.

  11. Ввести структуру УЧЕНИК с полями ФИО, ГОД ОБУЧЕНИЯ, НАЗВАНИЯ КЛАССА (БУКВА). Написать и протестировать функцию

    1. добавления нового ученика в массив учеников;

    2. вывода на экран массива учеников;

    3. сортирующую массив учеников по классам;

    4. проверяющую, чтобы в каждом классе было не более n учеников (если количество учеников в классе больше n, то в этом классе оставляется только n учеников, а из остальных формируется новый класс с буквой, следующей по алфавиту за имеющимися).

  12. Ввести структуру УЧЕНИК с полями ФИО, ГОД ОБУЧЕНИЯ, НАЗВАНИЯ КЛАССА (БУКВА), ИТОГОВАЯ ОЦЕНКА. Написать и протестировать функцию

    1. добавления нового ученика в массив учеников;

    2. вывода на экран массива учеников;

    3. сортирующую массив учеников по классам;

    4. подсчитывающего среднюю оценку для каждого класса.