Написание программы на языке программирования Pascal
Задача, 27 Декабря 2012, автор: пользователь скрыл имя
Описание
ЗАДАЧА
Информация о туристе состоит из фамилии, возраста и пола. Дана информация о группе, состоящей из 30 туристов. Найти:
Количество мужчин
Средний возраст
Фамилию младшей из женщин.
Работа состоит из 1 файл
Б8103б. Шалин И. В. Отчет по ИДЗ №5.docx
— 53.84 Кб (Скачать документ)Дальневосточный федеральный университет.
2012г.
Отчет о выполнении индивидуального задания №5.
Выполнил студент группы Б8103б
Шалин Игорь
ЗАДАЧА
Информация о туристе состоит из фамилии, возраста и пола. Дана информация о группе, состоящей из 30 туристов. Найти:
- Количество мужчин
- Средний возраст
- Фамилию младшей из женщин.
НЕ ФОРМАЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ
Требуется написать программу, которая создаст базу данных, состоящую из трех элементов, на тридцать человек. Программа должна будет вычислить количество мужчин, средний возраст всех людей, вычислить возраст младшей из женщин и вывести ее фамилию.
ФОРМАЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ
- Область исходных данных
A = {si | si ∈ c, i =1..n}
c = {‘А’..’я’, ‘0’..’9’}
si = <fam sex age>
fam ∈ {‘А’..’я’}
age ∈ R
n = 30
- Область решения задачи
K = {x | x ∈ N}
S = {x | x ∈ N}
F = {y | y ∈ {‘А’..’я’}}
Разработка алгоритма
- Ввести фамилию.
- Проверяем данные.
- Ввести возраст.
- Проверяем данные.
- Ввести пол.
- Проверяем данные.
- Увеличить счетчик на 1.
- Если счетчик меньше N, то возвращаемся к п.1.
- Найти количество мужчин.
- Найти младшую женщину и вывести ее возраст.
- Посчитать средний возраст всех людей.
Спецификация данных
- Входные данные
1 запись: данные о первом туристе.
…
N запись: данные о N туристе.
Каждая запись имеет формат «Фамилия, пол, возраст»
- Стандартное устройство вывода
- Сообщение 1: Введите фамилию.
- Сообщение 2: Ошибка! При вводе фамилии используйте только русские буквы.
- Сообщение 3: Повторите ввод фамилии.
- Сообщение 4: Введите пол (м,ж).
- Сообщение 5: Ошибка!! для указания пола используйте только символы м,ж.
- Сообщение 6: Повторите ввод пола.
- Сообщение 7: Введите возраст.
- Сообщение 8: Ошибка! Самому старому человеку было 256 лет.
- Сообщение 9: Ошибка! Возраст не может быть отрицательным или равным нулу.
- Сообщение 10: Повторите ввод возраста.
- Сообщение 11: Вы уверены, что вы ввели правильный возраст?
- Сообщение 12: да(Y) нет(N)
- Сообщение 13: Для подтверждения используйте символы Y или N
- Сообщение 14: Повторите ввод
- Сообщение 15: мужчин : K
- Сообщение 16: Средний возраст равен: S
- Сообщение 17: Женщин в группе нет.
- Сообщение 18: Фамилия младшей женщины: F
Спецификация функций
- Сообщение 1.
- Ввод фамилии.
- Проверка на символы не принадлежащие русскому алфавиту, если есть символ не русского алфавита, то сообщение 2.
- Если выведено сообщение 2, то сообщение 3.
- Если выведено сообщение 3, то перейти к пункту
- Сообщение 4.
- Ввод пола.
- Если введенный символ не “м” или ”ж”, то сообщение 5.
- Если выведено сообщение 5, то сообщение 6.
- Если выведено сообщение 6, то перейти к пункту 7.
- Сообщение 7.
- Ввод возраста.
- Если возраст больше 256, то сообщение 8.
- Если возраст отрицательный или равен нулю, то сообщение 9.
- Если выведено сообщение 9, то сообщение10.
- Если выведено сообщение 10, то перейти к пункту 12.
- Если возраст больше 100, то сообщение 11.
- Если сообщение 11, то сообщение 12.
- Ввод символа, если символ не Н, н, Т, т, Y, y, N, n то сообщение 13.
- Сообщение 14
- Если выведено сообщение 14, то перейти к пункту 19.
- Если i<n, то перейти к пункту 1.
- Подсчет количества мужчин.
- Подсчет количества женщин
- Поиск младшей женщины.
- Подсчет среднего возраста.
- Сообщение 15.
- Сообщение 16.
- Если женщин в группе нет, то сообщение 17.
- Если женщины в группе есть , то сообщение 18.
ПРОЭКТ ПРОГРАММ
Входные данные
Вызов процедур, обрабатывающих данные, вывод результата работы программы
Стандартное устройство вывода
Ссылка на zapusk
Zapusk
Запускает ввод данных и вывод результата работы программы
Стандартное устройство вывода
Ссылка на Resh
resha
Вычисление значений K, S, F и вывод их на экран
K, S, F
Ссылка на vvod_age
Vvod_age
Ввод возраста, провека корректности.
Error, Base[i].age
Ссылка на vvod_sex
Vvod_sex
Ввод пола, проверка корректности
Error, Base[i].sex
Ссылка на vvod_fam
Vvod_fam
Ввод фамилии, проверка коректности.
Error, Base[i].fam
Проектирование программы на языке PDL
program Bases;
const n=30;
type tourist=record
fam: string[20];
sex: char;
age: integer;
end;
VAR
base:array [1..n] of tourist;
i, kol, srvoz: integer;
mlad:real;
familiya: string[20];
podt: char;
procedure vvod_fam;
forward;
procedure vvod_sex;
forward;
procedure vvod_age;
forward;
procedure resh;
forward;
procedure proverka;
forward;
procedure zapusk;
begin
while i<=n do begin
vvod_fam;
vvod_sex;
vvod_age;
end;
resh;
end;
procedure vvod_fam;
var
l,k:integer;
begin
writeln('Введите фамилию');
readln(base[i].fam);
f:=base[i].fam;
k:=0;
for l:=1 to length(f) do begin
< проверка корректности данных >
if < данные не корректны > then begin
< Вывод ошибки >
< Повтор ввода >
end
else
if l = length(base[i].fam) then vvod_sex;
end;
end;
procedure vvod_sex;
begin
writeln('Введите пол (м, ж)');
readln(base[i].sex);
if < символы не "м" или "ж" > then begin
< Вывод ошибки >
< Повтор ввода >
end
else vvod_age;
end;
procedure vvod_age;
begin
writeln('Введите возраст');
readln(base[i].age);
if < возраст отрицательный или равен 0 > then begin
< Вывод ошибки >
< Повтор ввода >
end;
if base[i].age>256 then begin
< Вывод ошибки >
< Повтор ввода >
end;
if < возраст больше 100 > then begin
writeln('Вы уверены, что вы ввели правильный возраст?');
proverka;
end
else begin
inc(i);
zapusk;
end;
end;
procedure proverka;
begin
writeln('да(Y) нет(N)');
readln(podt);
if < символ не корректен > then begin
< Вывод ошибки >
< Повтор ввода >
end
else
if < получено подтверждение > then
if i=n then resh
else < начать ввод следующей фамилии >
else begin
< повторить ввод возраста >
end;
end;
procedure resh;
var
I,x:integer;
begin
kol:=0;
srvoz:=0;
repeat
if base[i].sex='ж' then mlad:=base[i].age;
until base[i].sex='ж';
for i:=1 to n do begin
if base[i].sex='м' then <подсчитываем количество мужчин>
else
< считаем количество женщин >
< ищем младшую женщину >
srvoz:=srvoz+base[i].age;
end;
< ищем средний возраст >
writeln('мужчин : ',kol);
writeln('Средний возраст равен: ', srvoz,' лет');
if x=0 then writeln('Женщин в группе нет')
else writeln('Фамилия младшей женщины: ', familiya);
halt;
end;
end;
BEGIN
i:=1;
zapusk;
END.
Тестирование
Классы эквивалентности
- Символы русского алфавита, образующие фамилию туриста (правильно).
- Символы не принадлежащие к русскому алфавиту, образующие фамилию туриста (не правильно).
- Символы “м”, ”ж“, используемые для введения пола туриста (правильно).
- Другие символы, используемые для ввода пола туриста(не правильно).
- Числа 1-256 для указания возраста (правильно).
- (-∞; 1) числа для указания возраста (не правильно).
- (256;+∞) числа для указания возраста (не правильно).
Тесты:
Правильно:
t1= Тихонов
м
32
t2=Иванова
ж
14
Не правильно:
t3=Tixonov
м
32
t4= Тихонов1
м
32
t5= Тихонов
муж
32
T6=Тихонов
м
- 32
T7= Тихонов
м
257
T8= Иванова
дев
14