Приведем пример использования объединения: составить программу, выполняющую требуемые операции для заданной фигуры.
Стр 1 из 6Следующая ⇒ Фундаментальные типы данных. Структуры Демонстрационный пример Мы поддерживаем Вас в попытке увидеть что-либо подозрительное в том, о чем мы будем говорить. Проверьте это, попробуйте разобраться. Не принимайте слепо на веру любой результат на выходе транслятора. Если Вы научитесь осторожности на чужих программах, то Вам будет гораздо проще проверить свои собственные. Б.Керниган, Ф.Плоджер Составить программу сложения двух комплексных чисел, заданных с использованием структуры. #include<iostream.h> typedef struct r { int Re;//Вещественная часть. int Im;//Мнимая часть. }COMPLEX; void main () { COMPLEX a,b,c,*ps,sum(COMPLEX *, COMPLEX *); int f; cout<<"Первое число:\n вещественная часть:"; cin>>f; a.Re = f;//Доступ к элементам структуры через имя //переменной типа “структура”. cout<<" мнимая часть:"; cin>>f; a.Im = f; cout<<"Второе число:\n вещественная часть:"; cin>>f; b.Re = f; cout<<" мнимая часть:"; cin>>f; b.Im = f; c = sum(&a,&b); ps = &c;//Доступ к элементам структуры через указатель. if (ps->Im>0) cout<<"Сумма: "<< ps->Re<<"+"<<ps->Im<<"i"; else cout<<"Сумма: "<< ps->Re<<"+("<<ps->Im<<")i"; } //Функция, складывающая два комплексных числа. COMPLEX sum (COMPLEX *x, COMPLEX *y) { COMPLEX z; z.Re = x->Re+y->Re; z.Im = x->Im+y->Im; return z; } 1.2. Задачи для самостоятельного решения На свете мало недостижимых вещей; будь у нас больше настойчивости, мы могли бы отыскать путь почти к любой цели. Франсуа де Ларошфуко. Максимы, 243 1.1. Опишите, используя структуру, телефонную книгу. Составьте программу, выдающую список абонентов, имеющих телефонный номер, начинающийся на 46. 1.2. Опишите, используя структуру, каталог книг в библиотеке. Составьте программу, выдающую список книг В.Пикуля, хранящихся в библиотеке.
1.3. Опишите, используя структуру, таблицу дат и событий русской истории. Составьте программу, выдающую список событий XIX века. 1.4. Опишите, используя структуру, таблицу дат и событий русской истории. Составьте программу, выдающую список дат XVIII века. 1.5. Опишите, используя структуру, школьный класс (фамилия и инициалы, дата, месяц и год рождения). Составьте программу, выдающую список учеников, рожденных в мае месяце. 1.6. Опишите, используя структуру, записную книжку. Составьте программу, выдающую список друзей, кому в этом году исполняется 25 лет: фамилия и инициалы, год, месяц и дата рождения. 1.7. Опишите, используя структуру, школьный класс (фамилия и инициалы, дата, месяц и год рождения). Составьте программу, выдающую день рождения класса (среднее арифметическое дат и месяцев). 1.8. Опишите, используя структуру, выборы (фамилия кандидата и количество набранных голосов). Всего избирателей - 2000. Составить программу, определяющую, кто из делегатов прошел или необходимо проводить повторные выборы (должно быть набрано 1/3 голосов от общего количества). 1.9. Опишите, используя структуру, школьную нагрузку (фамилия преподавателя, класс, часы). Составьте программу, определяющую нагрузку каждого преподавателя. Определить, у какого преподавателя самая большая нагрузка и у кого самая низкая. 1.10. После поступления в вуз о студентах собрана информация: фамилия, нуждается ли в общежитии, стаж, работал ли учителем, что окончил, какой язык изучал. Составьте программу, определяющую: 1) сколько человек нуждаются в общежитии; 2) списки студентов, проработавших два и более года учителем; 3) списки окончивших педучилище; 4) списки языковых групп. 1.11. Опишите, используя структуру, таблицу соревнований (название команды, количество набранных очков). Выберите команду, занявшую первое место. Упорядочите список команд в зависимости от занятого места.
1.12. При сдаче норм ГТО были получены результаты забега на 100 метров и прыжков в длину. Задайте нормы ГТО по этим видам, определите списки учеников, не выполнивших нормативы, количество учеников, сдавших нормативы, а также списки трех лучших. 1.13. Опишите, используя структуру, вступительные экзамены. Абитуриенты сдавали три экзамена, для поступления необходимо набрать 12 баллов. Определите списки абитуриентов, зачисленных в институт, количество несдавших экзамены, списки абитуриентов, сдавших три экзамена на 5. 1.14. Опишите, используя структуру, оценки за год. Посчитайте процент и качество успеваемости в классе за год, составьте списки неуспевающих и отличников. 1.15. Опишите, используя структуру, данные на учеников (фамилия, улица, дом, квартира). Составьте программу, определяющую, сколько учеников живет на улице Гоголя, списки учеников, живущих в доме номер 45. 1.16. В библиотеке для каждого заказывающего книгу читателя заполняется карточка: фамилия, дата заказа, дата выдачи книги. Определите: 1) самый маленький срок, за который нашли книгу; 2) сколько заказов было не удовлетворено; 3) кто чаще всего берет книги; 4) кому выдали книги 15.09.02; 5) сколько человек заказывали книги 25.04.02. 1.17. Опишите, используя структуру, сортировку почтовых посылок (город, улица, дом, квартира, кому, ценность). Составьте программу, определяющую: 1) сколько посылок отправлено в г.Нижний Новгород; 2) сколько и куда (список городов) отправлено посылок ценностью выше 100 рублей; 3) есть ли адреса куда отправлено более 1 посылки, если есть, то сколько и кому. 1.18. Во время сессии несколько студентов не сдали экзамен (фамилия, предмет, группа, дата). Определите список пересдавших экзамены, сколько должников осталось, кто пересдал геометрию 18.01.02. 1.19. В библиотеке в читательском билете есть данные о человеке (фамилия), записываются данные о книге (автор, название, дата, когда книгу брали читать). Определите, кто брал книгу И.Ефремова "Таис Афинская" 15.05.02, сколько читателей брали книги А.С.Пушкина, кто и какие книги брал 21.04.02. 1.20. В экзаменационной ведомости можно выделить сведения о предмете (наименование, номер группы, дата сдачи экзамена), сведения о человеке (фамилия, номер зачетной книжки, оценка за экзамен). Определите, сколько человек не сдали информатику, выдать их списки: фамилия, номер группы. Определите, сколько групп сдавали экзамены 11.06.02 и какие, составьте списки студентов, сдавших информатику: фамилия, номер группы, оценка.
1.21. Написать программу, осуществляющую приведение подобных членов многочлена с использованием структуры. 1.22. Опишите, используя структуру, расписание (предмет, преподаватель, номер группы, день недели, часы, аудитория). Составьте программу, определяющую: 1) у каких групп совпадают аудитории на занятиях; 2) у кого из преподавателей есть наложения в расписании; 3) какая нагрузка у заданного преподавателя; 4) список групп, у которых ведет занятия данный преподаватель; 5) сколько пар информатики у группы 331, в какие дни и в какое время. 1.23. Опишите, используя структуру, товар (наименование товара, старая цена, новая цена). Составьте программу, определяющую, на какие товары повысились цены и на сколько процентов. 1.24. Опишите, используя структуру, завод (наименование станка, время простоя в месяц, время работы в месяц). Составьте программу, определяющую общее время простоя на заводе, списки станков, не имеющих простоя, относительное время простоя всех и каждого станка (в процентах). 1.25. Приняв способ изображения рационального числа в виде структуры с двумя полями целого типа, написать программу, позволяющую: 1) определить, есть ли среди 50 рациональных чисел равные; 2) вычислить наибольшее из данных рациональных чисел. 1.26. При поступлении на музыкально-педагогический факультет на абитуриентов собираются сведения: фамилия, музыкальный инструмент. Для поступления необходимо сдать экзамен по специальности. Составьте списки для данного экзамена в зависимости от специальности. 1.27. В школе было три 9 класса, в августе каждый классный руководитель имел сведения о своих учениках: фамилия, куда поступал, поступил или нет. Определите, сколько учеников хотели пойти в 10 класс, кто хотел поступать в училище и техникум, кто поступил в училище или техникум, сколько учеников будет учиться в 10 классе, сколько необходимо создать 10 классов и по сколько человек.
1.28. Заполнена анкета на учеников: фамилия, где работают родители. Определите: сколько родителей работают на заводе КМЗ, у кого родители работают в драматическом театре или в филармонии. 1.29. Выберите самую высокую горную вершину из заданного списка. 1.30. Из выбранных двух карт B и K определите бьет одна другую или нет, если А - козырная масть. 1.31. Найдите площади самого большого и самого маленького круга, если заданы координаты центров и радиусы. Центр какого круга находится ближе всех к началу координат. 1.32. Опишите, используя структуру, анкета школьника: (фамилия, возраст). Составьте программу, определяющую возрастные группы в классе и напечатайте их списки. 1.33. На олимпиаде по информатике на школьников заполнялись анкеты: фамилия, номер школы, класс, занятое место. Напечатайте: 1) списки школ, занявших призовые места; 2) какая из школ заняла больше всех призовых мест; 3) списки учеников, занявших первое место, укажите их класс. 1.34. Опишите, используя структуру, время (часы, минуты, секунды). Определите, какое время t1 или t2 меньше. Вычислите интервал времени, прошедший от меньшего до большего времени. 1.35. В анкетных данных указываются: фамилия, пол, рост. Определите средний рост женщин, фамилию самого высокого мужчины, есть ли в группе хотя бы два человека одного роста. 1.36. Даны два рациональных числа, опишите их, используя структуру записи: числитель, знаменатель. Приведите их к несократимому виду, найдите их сумму. 1.37. Дана дата (число, месяц, год и день недели). Определите правильность заданной даты; какой день недели приходится на последний день данного месяца; сколько дней прошло от 1-го января 1-го года нашей эры; определите день недели, приходящийся на заданную дату, если 1-е января 1-го года нашей эры было понедельником. 1.38. Написать программу, позволяющую определить, есть ли в школе в каких-либо классах однофамильцы. Данные об ученике идут в следующем порядке: имя, фамилия, год обучения, буква. Данные о разных учениках идут в некоторой очередности, о которой заранее ничего не известно. 1.39. Опишите, используя структуру, жителей (фамилия, город, улица, дом, квартира). Составьте программу, которая печатает фамилии двух любых жителей из списка, живущих в разных городах по одинаковому адресу. 1.40. Дана анкета: фамилия, пол, число, месяц, год рождения. Выберите самого старшего мужчину, напечатайте все фамилии, начинающиеся с буквы "Б", и даты рождения этих людей.
1.41. Опишите, используя структуру, записную книжку (фамилия, номер телефона). Составьте программу, определяющую: 1) есть ли в записной книжке сведения о знакомом с фамилией на букву "Ф", если есть, то напечатать его фамилию и телефон; 2) есть ли в записной книжке сведения о знакомом с телефоном 43-58-35, если есть, то напечатать его фамилию. 1.42. Опишите, используя структуру, камеры хранения (номер, индекс камеры, заданный буквой). Составьте программу, определяющую, есть ли среди камер камера с номером 99. Упорядочите все камеры по возрастанию номеров. 1.43. В деканате хранится информация о зимней сессии на 1 курсе (фамилия, номер группы, оценка по геометрии, оценка по алгебре, оценка по информатике). Составьте программу, печатающую фамилии студентов, имеющих долг хотя бы по одному предмету, качество успеваемости, то есть процент студентов, сдавших экзамены на 4 и 5, название предмета, который был сдан лучше всего, номера групп в порядке убывания средней успеваемости их студентов. 1.44. В отделе кадров хранится следующая информация о каждом студенте: фамилия, имя, отчество, пол, возраст, курс. Составьте программу, которая печатает номер курса, на котором наибольший процент мужчин, самые распространенные мужские и женские имена, фамилии в алфавитном порядке и инициалы всех студенток, отчество и возраст которых являются одновременно самыми распространенными. 1.45. Дан список класса (фамилия, имя). Напечатайте в алфавитном порядке фамилии учеников, через пробел напишите имя каждого. 1.46. Багаж пассажира характеризуется количеством вещей и общим весом. Найдите: 1) багаж, средний вес одной вещи в котором отличается не более, чем на 0,3 кг от общего среднего веса одной вещи; 2) число пассажиров, имеющих более двух вещей, и число пассажиров, количество вещей которых превосходит среднее число вещей; 3) выясните, имеется ли пассажир, багаж которого состоит из одной вещи весом менее 30 кг; 4) упорядочите сведения о багаже по невозрастанию веса; 5) напечатайте сведения о багаже, общий вес вещей в котором меньше, чем 10 кг. 1.47. В библиотеке хранятся сведения о книгах (фамилия автора, название книги и год издания). Найдите названия книг С.Дангулова, изданных с 1960 года. Определите, имеется ли книга с названием "Информатика", если да, то сообщите сведения об этих книгах. 1.48. В учреждении хранятся записи о сотрудниках: фамилия, инициалы, номер телефона. Найдите номер телефона сотрудника по его фамилии и инициалам. 1.49. Дан перечень дат. Определите год с наименьшим номером, все весенние даты, самую позднюю дату. 1.50. В сводке об экспортируемых товарах указывается: наименование товара, страна, импортирующая товар, объем поставляемой партии в штуках. Напечатайте списки стран, в которые экспортируется данный товар, и общий объем его экспорта. 1.51. В счете указано: название игрушки, стоимость в рублях, возрастные границы. Получите следующие сведения: 1) название игрушек, цена которых не превышает 80 р. и которые подходят детям до пяти лет; 2) цену самого дорогого конструктора; 3) названия наиболее дорогих игрушек, цена которых отличается от цены самой дорогой игрушки не более, чем на 5 р.; 4) название игрушек, которые подходят как детям 4 лет, так и детям 10 лет; 5) можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку 3 лет, и дополнительно мяч так, чтобы стоимость игрушек не превосходила 150 р. 1.52. Хранятся сведения о лесе: вид дерева, общая численность, численность здоровых деревьев. Составьте программу вычисления: 1) суммарного числа деревьев на контрольном участке; 2) суммарного числа здоровых деревьев; 3) относительную численность (в процентах) больных деревьев; 4) относительную численность (в процентах) различных видов, в том числе больных (в процентах) для каждого вида. 1.53. Экспертные оценки продукции имеют 5 пунктов. На комиссию представлены 5 видов продукции, показатели которых даны в таблице. Определите лучшее изделие по сумме экспертных оценок (Ti = Ai + Bi + Ci + Di + Ei). Напечатайте список продукции в порядке от лучших показателей к худшим.
1.54. Написать программу, осуществляющую вывод фамилий и первых букв имен всех учеников 9а. 1.55. Написать программу, вычисляющую число дней в месяце для любого года нашего столетия.
Демонстрационный пример Всякой истине суждено одно мгновение торжества между бесконечностью, когда ее считают неверной, и бесконечностью, когда ее считают тривиальной. А.Пуанкаре Приведем пример использования объединения: составить программу, выполняющую требуемые операции для заданной фигуры. #include <iostream.h> #define CIRCLE 1 #define RECT 2 #define TRIANGLE 3 struct figure { int area, perimeter; //Общие компоненты. int type; // Метка активного компонента. union { int radius; // Окружность. int a[2]; //Прямоугольник. int b[3]; // Треугольник. } geom_fig; }; struct figure fig; viod main () { cout<<"Введите значение метки активного компонента... "; cin>>fig.type; switch (fig.type) { case CIRCLE: cout<<"Введите радиус... "; cin>>fig.geom_fig.radius; cout<<"Радиус: "<<fig.geom_fig.radius; break; case RECT: cout<<"Введите стороны прямоугольника... "; cin>>fig.geom_fig.a[0]>>fig.geom_fig.a[1]; fig.area = fig.geom_fig.a[0]*fig.geom_fig.a[1]; cout<<"Площадь: "<<fig.area;break; case TRIANGLE: cout<<"Введите стороны треугольника... "; cin>>fig.geom_fig.b[0]>>fig.geom_fig.b[1]; cin>>fig.geom_fig.b[2]; fig.perimeter=fig.geom_fig.b[0]+fig.geom_fig.b[1]+ fig.geom_fig.b[2]; cout<<"Периметр: "<<fig.perimeter; break; default: cout<<"Ошибка!"; } }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|