УПРАЖНЕНИЯ.
q Разработать программу, которая вводит фактические данные из таблицы, представленной в Вашем варианте индивидуального задания и выводит на экран таблицу, подобную той, которая находится в индивидуальном задании (включая заголовок и примечания).
Пример решения задачи
В таблице, приведенной в индивидуальном задании, первая строка - общий заголовок таблицы, вторая - заголовки столбцов таблицы. Фактические данные составляют третью, четвертую и пятую строки. Шестая строка - примечания.
Буддийские монастыри Японии периода Нара | |||
Название | Школа | Количество монахов | Площадь земли (га) |
Тодайдзи | Т | 368.8 | |
Якусидзи | С | 54.7 | |
Дайандзи | Д | 12.2 | |
Примечание: Т - Тэндай; С - Сингон; Д - Дзедзицу |
Программа должна начинаться с ввода фактических данных. Для удобства оператора перед вводом на экран должено выводиться приглашение, в котором перечисляется, какие именно данные ожидает программа. За одно приглашение-ввод должна вводиться одна строка фактических данных таблицы, т.е. приглашение-ввода должно повторяться трижды.
Введенные данные должны сохранятся в переменных программы.
На втором этапе программа выполняет вывод данных на экран. Каждая строка таблицы может выводиться одним оператором вывода. Среди строк, которые выводятся, будут строки без переменных значений (заголовки и линии) и строки с переменными значениями (строки с фактическими данными).
Для формирования наглядного табличного вида можна применять символы '|' и '-'.
Определение переменных является первой и самой главной задачей нашей программы. Для каждой переменной нужно подобрать такой тип, который бы обеспечивал представление в памяти ее значения с достаточным диапазоном и достаточной точностью.
Название. Во всех фактических значениях этот столбец является символьной строкой из 8 символов. Т.е. для представления его в памяти переменные, в которых хранятся значения этого столбца, должны быть объявлены как:
char name1[9], name2[9], name3[9];дополнительный символ резервируется для обозначения конца символьной строки.
Школа. Эти данные являются одним символом. Их объявление:
char sch1, sch2, sch3;Количество монахов. Эти данные являются целыми числами в диапазоне 10 - 220. Этот диапазон перекрывается диапазоном возможных значений типа unsigned short (диапазон этого типа: 0 - 255). Объявим соответственные переменные:
unsigned short cnt1, cnt2, cnt3;
Площадь земель. Это число с дробной частью, следовательно, соответствующие переменные должны быть переменными с плавающей точкой. Точность данных - всего один знак после точки, поэтому для их представления будет достаточно типа float: float sq1, sq2, sq3;
Разработка текста программы
Начинаем разработку текста програмы с заголовка главной функции main():
int main(void) Далее открывается тело функции и в нее включается описание переменных (см. п.2.2).Кодовая часть программы начинается с приглашения - вывода строки-константы:
printf("1. Введите: название, школу, количество, площадь >"); за которым считываются данные, вводимые оператором: scanf("%s %c %d %f",name1, &sc1, &cnt1, &sq1); Поскольку описания этих функций хранятся в файле stdio.h, включаем этот файл в начало программы: #include <stdio.h> При вводе строка вводится по спецификации типа %s, один символ - по спецификации типа %c, целое число - по спецификации типа %d, число с плавающей точкой - по спецификации типа %f. Спецификации разделяются пробелами, т.е. и данные при вводе должны разделятся пробелами или переходом на новую строку. В списке ввода перед всеми элементами кроме того, который вводится по %s, ставится знак &.Приглашение-ввод повторяется трижды, с разными переменными в списке ввода.
Для формирования вывода следует подсчитать ширину каждого столбца. Ширина первого столбца определяется размером фактических данных в строке - 9 символьных мест, с учетом пробелов в начале и в конце - 11. Ширина остальных столбцов определяется шириной текста в заголовках столбцов и составляет соответственно 7, 11 и 13 символьных мест. Учитывая вертикальные линии ширина строки составляет 47 знакомест.
Первая строка - горизонтальная линия, которая состоит из символа '-', повторенного 47 раз. Вторая строка - общий заголовок, дополненный до ширины 47 пробелами. Третья строка - еще одна горизонтальная линия. Четвертая и пятая строки - заголовки столбцов, каждый из них имеет установленную ширину. Шестая строка - еще одна горизонтальная линия.
Наконец, строки с седьмой до девятой - фактические даные. В каждой строке выводятся значения набора переменных для одной строки. Например:
printf("| %9s | %c | %-3d | %5.1f |\n", name1, sc1, cnt1, sq1);Значения имени выводятся по спецификации типа %s с шириной 9. Значения школы выводятся по спецификации типа %c. Поскольку значения в этом столбце выводится по центру столбца, перед и после него ставятся пробелы. Значения количества выводятся по спецификации типа %d с шириной 3, а площадь - %f с общей шириной 5 и одним знаком после точки. Значения в этих столбцах дополняются до нужной ширины пробелами. В столбце 3 ставится признак выравнивания по правому краю.
Остальные четыре строки выводятся как текстовые константы.
Полный текст программы приведен ниже.
/*==================================== *//* Лабораторная работа № 6 *//* Типы данных и ввод-вывод *//* Пример выполнения. Вариант. *//*==================================== */#include <stdio.h>int main(void) { char name1[9], name2[9], name3[9]; char sc1, sc2, sc3; unsigned short cnt1, cnt2, cnt3; float sq1, sq2, sq3; /* Введение фактических данных*/ printf("1. Введите: название, школу, количество, площадь >"); scanf("%s %c %d %f",name1, &sc1, &cnt1, &sq1); printf("2. Введите: название, школу, количество, площадь >"); scanf("%s %c %d %f",name2, &sc2, &cnt2, &sq2); printf("3. Введите: название, школу, количество, площадь >"); scanf("%s %c %d %f",name3, &sc3, &cnt3, &sq3); /* Вывод таблицы */ /* вывод заголовков */ printf("-----------------------------------------------\n"); printf("|Буддийские монастыри Японии периода Нара |\n"); printf("|---------------------------------------------|\n"); printf("| Название | Школа | Количество|Площадь земли|\n"); printf("| | | монахов| (га) |\n"); printf("|----------|-------|-----------|-------------|\n"); /* вывод строк фактических данных */ printf("| %9s | %c | %3d | %-5.1f |\n", name1, sc1, cnt1, sq1); printf("| %9s | %c | %3d | %-5.1f |\n", name2, sc2, cnt2, sq2); printf("| %9s | %c | %3d | %-5.1f |\n", name3, sc3, cnt3, sq3); /* вывод примечаний */ printf("|---------------------------------------------|\n"); printf("| Примечание: Т - Тэндай; С - Сингон; |\n"); printf("| Д - Дзедзицу |\n"); printf("-----------------------------------------------\n"); return 0;}Акуратный формат таблицы достигается несколькими запусками программы с последующим выравниванием столбцов по результатам запуска.
Варианты заданий.
Вариант 1
Некоторые виды антилоп | |||
Название | Группа | Место обитания | Численность популяции |
Джейран | A | Азия | |
Гну | B | Африка | |
Бейза | H | Африка | |
Групи: А - настоящие антилопы, B - коровьи антилопы, H - лошадиные антилопи |
Вариант 2
Отдел кадров | |||
Фамилия | Инициалы | Год рожд | Оклад |
Иванов | И.И. | 517.50 | |
Петренко | П.П. | 219.10 | |
Паниковский | М.С. | 300.00 | |
Примечание: оклад установлен по состоянию на 1 января 2003 года |
Вариант 3
Ведомость деталей | |||
Наименование | Тип | Количество | Вес 1 детали (г) |
Фланец | З | ||
Переходник | П | ||
Станина | О | ||
Примечание: принято такое кодирование типов: О - оригинальная, П - покупная, З - заимствованная |
Вариант 4
Каталог библиотеки | |||
Автор книги | Название | Год выпуска | Группа |
Сенкевич | Потоп | Х | |
Ландау | Механика | У | |
Дойль | Сумчатые | C | |
Примечание: Х - художественная литература; У - учебная литература; С - справочная литература |
Вариант 5
Проекты поиска внеземных сигналов | |||
Год | Научный руководитель | Диаметр антенны (м) | Рабочая частота (МГц) |
Дрейк | |||
Троицкий | |||
Хоровиц | |||
Примечание: наблюдались объекты от 2 звезд до нескольких галактик |
Вариант 6
Офисные пакеты | |||
Наименование | Производитель | Количество сост.частей | Цена ($) |
Office | Microsoft | ||
SmartSute | Lotus | ||
StarOffice | Sun | ||
Примечание: возможно бесплатно получить продукт StarOffice через Internet |
Вариант 7
Ведомость спортивних состязаний | |||
Фамилия участника | Код команды | Количество балов | Место в итоге |
Баландин | С | 123.7 | |
Шишков | Ш | 79.98 | |
Кравченко | Д | 134.8 | |
Примечание: Д - "Динамо", С - "Спартак", Ш - "Шахтер" |
Вариант 8
Приблизительное количество звезд разных спектральных классов в Галактике | |||
Спектральный класс | Приблизительная масса (отн.Солнца) | Часть % | Численность |
O | 0.00002 | ||
F | 1.25 | 2.9 | |
M | 0.2 | 73.2 | |
Примечание: не показаны данные для классов: B, A, G, K |
Вариант 9
Сельскохозяйственные предприятия | |||
Название | Вид собственности | Площадь земли (га) | Кол. работников |
Заря | Г | ||
Росинка | А | ||
Петренко | Ч | ||
Вид собственности: Г - государственная, Ч - частная, А - акционерная |
Вариант 10
Прайс-лист | |||
Наименование товара | Тип товара | Цена за 1 шт (грн) | Минимальное количество в партии |
Папка | К | 4.75 | |
Бумага | К | 13.90 | |
Калькулятор | О | 411.00 | |
Примечание: К - канцтовары, О - оргтехника |
Вариант 11
Искуственно полученные элементы | |||
Атомный номер | Название | Массовое число | Период полураспада (лет) |
Нептуний | |||
Берклий | |||
Калифорний | |||
Вариант 12
Японские острова | |||
Остров | Площадь (кв.км) | Кол. малых островов | Протяженность береговой линии (км) |
Хонсю | |||
Хоккайдо | |||
Сикоку | |||
Вариант 13
Ведомость спортивних состязаний | |||
Фамилия участника | Код команды | Количество балов | Место в итоге |
Иванов | И | 123.7 | |
Петров | П | 79.98 | |
Сидоров | С | 134.8 | |
Примечание: Д - "Динамо", С - "Спартак", Ш - "Шахтер" |
Вариант 14
Приблизительное количество звезд разных спектральных классов в Галактике | |||
Спектральный класс | Приблизительная масса (отн.Солнца) | Часть % | Численность |
O | 0.00002 | ||
F | 1.25 | 2.9 | |
M | 0.2 | 73.2 | |
Примечание: не показаны данные для классов: B, A, G, K |
Вариант 15
Подразделение | |||
Фамилия | Инициалы | Год постпления | Оклад |
Иванов | И.И. | 517.50 | |
Петренко | П.П. | 219.10 | |
Паниковский | М.С. | 300.00 | |
Примечание: оклад установлен по состоянию на 1 января 2003 года |
Вариант 16
Ведомость деталей | |||
Наименование | Тип | Количество | Вес 1 детали (г) |
Фланец | З | ||
Переходник | П | ||
Станина | О | ||
Примечание: принято такое кодирование типов: О - оригинальная, П - покупная, З - заимствованная |
Вариант 17
Каталог библиотеки | |||
Автор книги | Название | Год выпуска | Группа |
Сенкевич | Потоп | Х | |
Ландау | Механика | У | |
Дойль | Сумчатые | C | |
Примечание: Х - художественная литература; У - учебная литература; С - справочная литература |
Вариант 18
Проекты поиска внеземных сигналов | |||
Год | Научный руководитель | Диаметр антенны (м) | Рабочая частота (МГц) |
Дрейк | |||
Троицкий | |||
Хоровиц | |||
Примечание: наблюдались объекты от 2 звезд до нескольких галактик |
Вариант 19
Офисные пакеты | |||
Наименование | Производитель | Количество сост.частей | Цена ($) |
Office | Microsoft | ||
SmartSute | Lotus | ||
StarOffice | Sun | ||
Примечание: возможно бесплатно получить продукт StarOffice через Internet |
Вариант 20
Ведомость спортивних состязаний | |||
Фамилия участника | Код команды | Очки | Место в итоге |
Баландин | С | ||
Шишков | Ш | ||
Кравченко | Д | ||
Примечание: Д - "Динамо", С - "Спартак", Ш - "Шахтер" |
Вариант 21
Приблизительное количество звезд разных спектральных классов в Галактике | |||
Спектральный класс | Приблизительная масса (отн.Солнца) | Часть % | Численность |
O | 0.00002 | ||
F | 1.25 | 2.9 | |
M | 0.2 | 73.2 | |
Примечание: не показаны данные для классов: B, A, G, K |
Вариант 22
Сельскохозяйственные предприятия | |||
Название | Вид собственности | Площадь земли (га) | Кол. работников |
Заря | Г | ||
Росинка | А | ||
Петренко | Ч | ||
Вид собственности: Г - государственная, Ч - частная, А - акционерная |
Вариант 23
Прайс-лист | |||
Наименование товара | Тип товара | Цена за 1 шт (грн) | Минимальное количество в партии |
Папка | К | 4.75 | |
Бумага | К | 13.90 | |
Калькулятор | О | 411.00 | |
Примечание: К - канцтовары, О - оргтехника |