Написание программы на языке программирования Pascal

Автор работы: Пользователь скрыл имя, 27 Декабря 2012 в 03:10, задача

Описание

ЗАДАЧА
Информация о туристе состоит из фамилии, возраста и пола. Дана информация о группе, состоящей из 30 туристов. Найти:
Количество мужчин
Средний возраст
Фамилию младшей из женщин.

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

Б8103б. Шалин И. В. Отчет по ИДЗ №5.docx

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

Дальневосточный федеральный  университет.

2012г.

 

 

 

 

 

 

Отчет о выполнении индивидуального  задания №5.

 

 

 

 

 

 

 

 

Выполнил студент группы Б8103б

Шалин Игорь

ЗАДАЧА

Информация о туристе состоит  из фамилии, возраста и пола. Дана информация о группе, состоящей из 30 туристов. Найти:

  1. Количество мужчин
  2. Средний возраст
  3. Фамилию младшей из женщин.

 

НЕ ФОРМАЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ

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

ФОРМАЛЬНАЯ  ПОСТАНОВКА ЗАДАЧИ

  1. Область исходных данных

A = {si | si ∈ c, i =1..n}

c = {‘А’..’я’, ‘0’..’9’}

si = <fam sex age>

fam ∈ {‘А’..’я’}

age ∈ R

n = 30

  1. Область решения задачи

K = {x | x ∈ N}

S = {x | x ∈ N}

F = {y | y ∈ {‘А’..’я’}}

 

Разработка алгоритма

    1. Ввести фамилию.
    2. Проверяем данные.
    3. Ввести возраст.
    4. Проверяем данные.
    5. Ввести пол.
    6. Проверяем данные.
    7. Увеличить счетчик на 1.
    8. Если счетчик меньше N, то возвращаемся к п.1.
    9. Найти количество мужчин.
    10. Найти младшую женщину и вывести ее возраст.
    11. Посчитать средний возраст всех людей.

Спецификация данных

  1. Входные данные

1 запись: данные о первом туристе.

N запись: данные о N туристе.

Каждая запись имеет формат  «Фамилия, пол, возраст»

  1. Стандартное устройство вывода
      1. Сообщение 1: Введите фамилию.
      1. Сообщение 2: Ошибка! При вводе фамилии используйте только русские буквы.
      2. Сообщение 3: Повторите ввод фамилии.
      3. Сообщение 4: Введите пол (м,ж).
      4. Сообщение 5: Ошибка!! для указания пола используйте только символы м,ж.
      5. Сообщение 6: Повторите ввод пола.
      6. Сообщение 7: Введите возраст.
      7. Сообщение 8: Ошибка! Самому старому человеку было 256 лет.
      8. Сообщение 9: Ошибка! Возраст не может быть отрицательным или равным нулу.
      9. Сообщение 10: Повторите ввод возраста.
      10. Сообщение 11: Вы уверены, что вы ввели правильный возраст?
      11. Сообщение 12: да(Y)     нет(N)
      12. Сообщение 13: Для подтверждения используйте символы Y или N
      13. Сообщение 14: Повторите ввод
      14. Сообщение 15:  мужчин : K
      15. Сообщение 16: Средний возраст равен: S
      16. Сообщение 17: Женщин в группе нет.
      17. Сообщение 18: Фамилия младшей женщины: F

Спецификация функций

  1. Сообщение 1.
  2. Ввод фамилии.
  3. Проверка на символы не принадлежащие русскому алфавиту, если есть символ не русского алфавита, то сообщение 2.
  4. Если выведено сообщение 2, то сообщение 3.
  5. Если выведено сообщение 3, то перейти к пункту
  6. Сообщение 4.
  7. Ввод пола.
  8. Если введенный символ не “м” или ”ж”, то сообщение 5.
  9. Если выведено сообщение 5, то сообщение 6.
  10. Если выведено сообщение 6, то перейти к пункту 7.
  11. Сообщение 7.
  12. Ввод возраста.
  13. Если возраст больше 256, то сообщение 8.
  14. Если возраст отрицательный или равен нулю, то сообщение 9.
  15. Если выведено сообщение 9, то сообщение10.
  16. Если выведено сообщение 10, то перейти к пункту 12.
  17. Если возраст больше 100, то сообщение 11.
  18. Если сообщение 11, то сообщение 12.
  19. Ввод символа, если символ не Н, н, Т, т, Y, y, N, n то сообщение 13.
  20. Сообщение 14
  21. Если выведено сообщение 14, то перейти к пункту  19.
  22. Если i<n, то перейти к пункту 1.
  23. Подсчет количества мужчин.
  24. Подсчет количества женщин
  25. Поиск младшей женщины.
  26. Подсчет среднего возраста.
  27. Сообщение 15.
  28. Сообщение 16.
  29. Если женщин в группе нет, то сообщение 17.
  30. Если женщины в группе есть , то сообщение 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. Символы русского алфавита, образующие фамилию туриста (правильно).
  2. Символы не принадлежащие к русскому алфавиту, образующие фамилию туриста (не правильно).
  3. Символы “м”, ”ж“, используемые для введения пола туриста (правильно).
  4. Другие символы, используемые для ввода пола туриста(не правильно).
  5. Числа 1-256 для указания возраста (правильно).
  6. (-∞; 1) числа для указания возраста (не правильно).
  7. (256;+∞) числа для указания возраста (не правильно).

 

Тесты:

Правильно:

t1= Тихонов

       м

       32

t2=Иванова

     ж

     14

Не правильно:

t3=Tixonov

       м

       32

t4= Тихонов1

       м

       32

t5= Тихонов

       муж

       32

T6=Тихонов

       м

      - 32

T7= Тихонов

       м

      257

 

T8= Иванова

     дев

     14

 

 


Информация о работе Написание программы на языке программирования Pascal