Структуры и алгоритмы обработки данных

Автор работы: Пользователь скрыл имя, 18 Октября 2012 в 00:26, лабораторная работа

Описание

Первая лабораторная работа по программированию на языке C в VISUAL STUDIO.

Работа состоит из  1 файл

Лабораторная работа №1.doc

— 250.00 Кб (Скачать документ)

В28

Журнал регистрации аварий:

Название предприятия

Категория

Ущерб от аварии (т. руб)

Срок простоя (дн)

Птицефабрика

1

12.7

4

Теплоцентраль

1

0.711

1

Автосервис

2

1770.15

38

Примечание: указываются только прямые затраты, связанные с ликвидацией последствий аварии


В29

Ведомости о присвоении квалификации

Фамилия

Год рождения

Оценка результатов экзаменов

Присвоен уровень квалификации

Шевченко

1970

4.33

6

Розанов

1975

5.1

5

Панасюк

1966

3.07

3

Примечание: показана итоговая оценка по результатам экзаменов по теоретической и практической подготовке


5. Пример решения задачи (вариант 30)

5.1. Разработка алгоритма  решения

5.1.1. Общий метод решения.

В таблице, приведенной в индивидуальном задании, первая строка - общий заголовок  таблицы, вторая - заголовки столбцов таблицы. Фактические данные составляют третью, четвертую и пятую строки. Шестая строка - примечания.

Программа должна начинаться с ввода  фактических данных. Для удобства оператора перед вводом на экран  должно выводиться приглашение, в котором перечисляется, какие именно данные ожидает программа. За одно приглашение-ввод будет вводиться одна строка фактических данных таблицы. Т.е., приглашение - ввода должно повторяться трижды. Введенные данные будут сохранятся в переменных программы.

На втором этапе программа выполняет  вывод данных на экран. Каждая строка таблицы может выводиться одним  оператором вывода. Среди строк, которые  выводятся, будут строки без переменных значений (заголовки и линии) и  строки с переменными значениями (строки с фактическими данными).

Для формирования наглядного табличного вида можно применять символы '|' и '-'.

Поскольку алгоритм программы чисто  линейный, схему алгоритма мы не приводим

5.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;

5.3. Разработка текста  программы

Начинаем разработку текста программы с заголовка главной функции main():

int main(void)

Далее открывается тело функции  и в нее включается описание переменных (см. п.5.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 ставится признак выравнивания по правому краю.

Остальные четыре строки выводятся  как текстовые константы.

Полный текст программы приведен ниже.

/*******************************************************/

/*Лабораторная работа 1    */

/*Типы данных и ввод-вывод    */

/*Вариант 30.    */

/*******************************************************/

#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;

}

5.4. Отладка программы

При отладке программы можно  использовать пошаговый режим отладки с отслеживанием значений переменных - тех, которые вводятся. Если возникнут проблемы с вводом переменных, есть смысл вводить каждую переменную отдельным оператором.

Аккуратный формат таблицы достигается  несколькими запусками программы с последующим выравниванием столбцов по результатам запуска.

5.5. Результаты работы  программы

При работе програмы на екран было выдано следущее:

1. Введите: название, школу,  количество, площадь > Тодайдзи  Т 220 368.8

2. Введите: название, школу, количество, площадь > Якусидзи С 50 54.7

3. Введите: название, школу,  количество, площадь > Дайаедзи  Д 10 12.2

 

----------------------------------------------

|Буддийские монастыри  Японии периода Нара    |

|--------------------------------------------|

| Название | Школа | Количество|Площадь земли|

||  |  монахов  |    (га)|

|----------|-------|-----------|-------------|

| Тодайдзи |   Т   |  220 | 368.8  |

| Якусидзи |   С   |   50 |  54.7  |

| Дайаедзи |   Д   |   10 |  12.2  |

|--------------------------------------------|

| Примечание: Т - Тендай; С - Сингон;   |

|   Д - Дзедзицу    |

----------------------------------------------

5.6. Выводы

При выполнении лабораторной работы изучены вопросы:

  • типы данных в языке C, объявление переменных в программе
  • ввод и вывод данных, формализация вывода.

Приложение 1. Базовые  типы данных языка С

Название типа

Пояснения

Диапазон значений

short

Краткое целое число

-128 . . . 127

unsigned short

Краткое целое число без знака

0 . . . 255

int

Целое число

-32768 . . . 32767

unsigned int

Целое число

0 . . . 65535

long

Длинное целое число

-230 . . . 230-1

unsigned long

Длинное целое число без знака

0 . . . 231-1

char

Один символ

символы кода ASCII

char[ ]

Строка

 

float

Число с плавающей точкой

3.4 10-38 . . . 3.4 10+38

double

Число с плавающей точкой двойной  точности

1.7 10-308 . . . 1.7 10+308


Приложение 2. Некоторые  функции стандартного ввода-вывода

Функции стандартного ввода - вывода описаны в файле stdio.h.

printf() - форматный вывод на экран:

int printf(char *format, <список вывода>);

Первый параметр является символьной строкой, которая задает спецификации формата. Остальные параметры - перечисление переменных и выражений, значения которых  выводятся. Каждая спецификация формата  имеет вид (параметры в квадратных скобках необязательны):

%[flags][width][.prec][F|N|h|l]type

где

type -

тип спецификации

 

d или i

целое десятичное число со знаком

 

u

десятичное число без знака

 

x

целое 16-ричное число без знака

 

f

число с плавающей точкой

 

e

число в E-форме

 

g

число с плавающей точкой или в E-форме

 

c

один символ

 

s

строка

 

%

символ %

 

flags -

признак выравнивания:

 

+ или пусто

выравнивание по правому краю

 

-

выравнивание по левому краю

 

width -

целое число - общая ширина поля. Если это число начинается с цифры 0, вывод дополняется слева нулями до заданной ширины. В заданную ширину входят все символы вывода, включая знак, дробную часть и т.п.

 

prec -

целое число, количество знаков после  точки при выводе чисел с плавающей  точкой

 

F -

соответственный элемент списка вывода является дальним указателем

 

N -

соответственный елемент списка вывода является близким указателем

 

l -

соответствующий елемент списка вывода является long int или double

Информация о работе Структуры и алгоритмы обработки данных