Файл: Расчетное задание Барсуков А.Г. МС-12.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 20.06.2020

Просмотров: 246

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Возможные алгоритмы решения задач

Алгоритм — это понятное и точное предписание исполнителю для совершения последовательности действий, направленных на решение определённой задачи. Свойства алгоритма:

  • понятность(единственность толкования);

  • детерминированность(обязательное завершение каждого из действий);

  • массовость применение для целого класса задач;

  • результативность.

Способы записи алгоритмов:

  1. естественный язык;

  2. блок — схемы;

  3. учебный алгоритмический язык;

  4. языки программирования.

Типы алгоритмов.

Алгоритмы бывают трёх типов:

  1. последовательный — действия выполняются по порядку друг за другом;

  2. циклический — организовывает повторение действий;

  3. разветвляющийся --- содержит одно или несколько логических условий и имеет несколько ветвей обработки. Разветвление даёт возможность выбора варианта действий в зависимости от результатов анализа исходных условий

Последовательный алгоритм



Циклические алгоритмы

Безусловный оператор цикла FOR

Условный оператор цикла с предусловием WHILE

Условный оператор цикла с постусловием REPEAT

Разветвляющиеся алгоритмы

Условный оператор IF
(полная запись)

Условный оператор IF
(краткая запись)

Оператор выбора CASE






Логическая связь

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

Логический тип данных

С логическим типом данных мы уже неоднократно встречались при изучении свойств объектов. Этот тип данных состоит всего из двух значений: истина и ложь. На языке Pascal (а также на многих других языках) это соответственно True и False. В некоторых языках допускается использование чисел вместо этих переменных: 1 - истина, 0 - соответственно ложь. Итак, логический тип данных указывает, есть ли что-то или его нет, верно ли что-то или неверно. В Pascal логический тип данных носит название Boolean (англ. - логический). Значения, как уже было сказано – True и False. Простой пример объявления логической переменной и присвоения ей значения "ложь":

Var X: Boolean;
X
:=False;

Операции над логическими выражениями

А вот и самое интересное. Для логических выражений введены 4 операции. Работа с ними чем-то похожа на работу с числами. Рассмотрим подробно эти операции.

1. Отрицание: NOT ("не")

Как понятно из названия, данная операция меняет значение логического выражения на противоположное: если была истина, то станет ложь, а если была ложь, то станет истина. Выражение, над которым будет произведена операция, указывается либо после слова NOT через пробел, либо в скобках. Примеры:


k:=True;
m
:=not(k);
n
:=not m;
p
:=not(not(m));

Подразумевается, что все переменные описаны типом данных Boolean. Итак, разберём, что здесь происходит:

  • Сначала мы присваиваем переменной k значение True;

  • Далее, выполняя NOT для k получаем False: m становится равным False;

  • N становится противоположным m, т.е. True;

  • Над m делается двойное отрицание, т.е. значение p станет также False.

2. Логическое умножение (конъюнкция) – AND ("и")

В отличие от рассмотренного выше NOT, оператор AND работает уже с двумя (и более) выражениями. Логическое умножение равно истине тогда и только тогда, когда все выражения, связанные этим оператором, истинны. Если хотя бы один является ложью, то весь результат будет также ложью. Поэтому, собственно, операция и называется умножением: если истину обозначить за 1, а ложь - за 0, а числа перемножить, то при наличии хотя бы одного нуля весь результат будет нулевым. Примеры:

a:=True;
b
:=False;
c
:=True;
d
:=a and b;
e
:=a and c;
f
:=not(b) and c;

Значение d будет False, т.к. один из операндов (операнды - выражения, которыми управляют операторы) равен False (b). Переменная e примет значение True, ведь и a и c истинны. Наконец, f тоже станет True, ведь not(b)- это истина и c тоже истина.

3. Логическое сложение (дизъюнкция) -OR("или")

Как и AND,ORработает с несколькими операндами. Название "или" уже отвечает на вопрос "что будет в итоге": если хотя бы один из операндов - истина, то всё выражение будет истиной. Результат False будет только в случае, если все операнды будут ложными.

a:=False;
b
:=True;
c
:=a or b;
d
:=not(b) or a;

Значение переменной c станет True, а переменной d - False.

4. Исключающее "или" - XOR

Данная операция выдает результат True, если один из операндов является истиной, а другой - ложью, т.е. выражения не должны быть одинаковыми.

a:=True;
b
:=False;
c
:=a xor b;
d
:=not(a) xor b;
e
:=not(a) xor not(b);

Переменная c станет истиной, ведь a и b различны, а d - ложью, т.к. под сравнение попадут два значения False. Наконец, e станет истиной.

  1. Расчетная часть

3.1 Решение первой задачи

Program CR1_26;

Uses crt;

const players=10; {Игроки}

Type matrix=array[1..players,1..players] of char; {Матрица таблицы турниров}

label 1;

Var m:matrix; {Объявление массива}

i:integer; {Индекс строки}

j:integer; {Индекс столбца}

result:array[1..players] of real;

winner:integer;

function wnpWNP(c:char):char;

begin wnpWNP:=c; if c='в' then wnpWNP:='В';if c='н' then wnpWNP:='Н';if c='п' then wnpWNP:='П' end;

Begin

clrscr;


for i:=1 to players do for j:=1 to players do

if i=j then m[i,j]:='-' else if j>i then begin

1: write('Игрок ',i,' против ',j,' (В,Н,П): ');

Readln(m[i,j]);m[i,j]:=wnpWNP(m[i,j]);

if not (m[i,j] in ['В','Н','П']) then goto 1;

end;


for i:=1 to players do for j:=1 to players do

if i>j then begin

if m[j,i]='В' then m[i,j]:='П';

if m[j,i]='Н' then m[i,j]:='Н';

if m[j,i]='П' then m[i,j]:='В';

end;


for i:=1 to players do begin

for j:=1 to players do write(' ',m[i,j]);

writeln;

end;


for i:=1 to players do result[i]:=0;


for i:=1 to players do for j:=1 to players do begin

if m[i,j]='В' then result[i]:=result[i]+1.0;

if m[i,j]='Н' then result[i]:=result[i]+0.5;

end;


winner:=1;

for i:=2 to players do if result[i]>result[i-1] then winner:=i;

Writeln('Турнир выиграл игрок ',winner,' !!!');


while not keypressed do ; readln

End.





3.2 Решение второй задачи

program CR2_26;

uses crt;

const maxAb=10; { Студенты }

label 1;

type Ab = record { Тип Ab включает 6 полей: F, B, S, Sc, N, I }

FullName: string[25];


BirthYear: integer;

ScoolYear: integer;

Scool_REZ: array[1..10] of Byte;

NeedPlace: byte;

Incom_REZ: array[1..4] of Byte;

end;


var Abit: array[1..maxAb] of Ab; { Массив записей Abit типа Ab }

sp: text; { Файл }

last,rr: byte; { LAST, режим работы }


procedure saveAb(sAb:Ab); { запись в файл информации о студенте }

var j: byte;

begin

with sAb do begin

writeln(sp,Fullname);

writeln(sp,BirthYear);

writeln(sp,ScoolYear);

For j:=1 to 10 do write(sp,Scool_Rez[j],' ');writeln(sp);

writeln(sp,NeedPlace);

For j:=1 to 4 do write(sp,Incom_Rez[j],' ');writeln(sp);

end;

end;


procedure WaitEnter;

begin

write('Нажмите Enter >> ');

while not Keypressed do ; readln

end;


procedure vvod; { процедура создания файла и ввода данных }

var i,j,n:byte;ch:char;

begin { оператор assign находится в основной программе }

last:=maxAb;

rewrite(sp); { открытие файла для записи }

for i:=1 to maxAb do with Abit[i] do begin

clrscr;writeln('Введите:');writeln;

while KeyPressed do ch:=ReadKey;

write(i,'. Ф.И.О. - '); readln(Fullname);

write(i,'. Год рождения - '); readln(BirthYear);

write(i,'. Год окон. школы - '); readln(ScoolYear);

write(i,'. Школьные рез. (10!) - '); For j:=1 to 10 do read(Scool_Rez[j]);

write(i,'. Нужд.в общежитии (0/1) - '); readln(NeedPlace);

write(i,'. Вступ. рез. (4!) - '); For j:=1 to 4 do read(Incom_Rez[j]);

saveAb(Abit[i]);

WaitEnter;

end;

close(sp); { закрытие файла для записи }

end;


procedure print; { процедура чтения и печати всего файла }

var i,j:byte;YesNo:string[3];

begin

clrscr;

reset(sp); { открытие файла для чтения }

for i:=1 to maxAb do with Abit[i] do if not eof(sp) then begin

{ Чтение из файла информации о студенте }

last:=i;

readln(sp,Fullname);

readln(sp,BirthYear);

readln(sp,ScoolYear);

For j:=1 to 10 do read(sp,Scool_Rez[j]);readln(sp);

readln(sp,NeedPlace);

For j:=1 to 4 do read(sp,Incom_Rez[j]);readln(sp);

end;

close(sp); { закрытие файла }

if last<>0 then for i:=1 to last do with Abit[i] do begin

writeln('Список студентов (',i,'/',last,'):');

writeln(i,'. Ф.И.О. - ',Fullname);

writeln(i,'. Год рождения - ',BirthYear);

writeln(i,'. Год окон. школы - ',ScoolYear);

write(i,'. Школьные рез. (10) - ');For j:=1 to 10 do write(Scool_Rez[j],' ');writeln;

write(i,'. Нужд.в общежитии - ');YesNo:='Да ';if NeedPlace=0 then YesNo:='Нет';writeln(YesNo);

write(i,'. Вступ. рез. (4) - ');For j:=1 to 4 do write(Incom_Rez[j],' ');writeln;

WaitEnter;

end;

end;


procedure work;

var i,j:integer;good:array[1..maxAb] of boolean;

begin

rewrite(sp); { открытие файла для записи }

for i:=1 to last do begin good[i]:=true;

for j:=1 to 4 do if Abit[i].Incom_Rez[j]<3 then good[i]:=false;

end;

j:=0; for i:=1 to last do if good[i] then saveAb(Abit[i]) else Inc(j);

writeln('Удалено записей: ',j);

WaitEnter;

close(sp); { закрытие файла для записи }

end;


begin { начало основной программы }

assign(sp,'z:\mc-11.2b\shakirov\vedom.dat'); { связать файловую переменную sp с файлом VEDOM.DAT }

last:=0;

1:rr:=0; while not (rr in [1..4]) do begin {clrscr;}

write('Выберите режим работы (1 - ввод, 2 - печать, 3 - удаление, 4 - END!): '); readln(rr) end;

case rr of

1: begin vvod ; goto 1 end;

2: begin print; goto 1 end;

3: begin if last<>0 then work ; goto 1 end;

end;

writeln;writeln('END!');writeln;WaitEnter;

end.



  1. Заключение

Согласно поставленной цели в расчетном задание был проведен аналитический обзор литературных источников и интернет ресурсов, языков программирования согласно учебному плану по направлению машиностроение выбран рабочим Turbo Pascal в соответствии с номером варианта проведена работа и представлено решение двух задач. Смотрите страницу 2 при решении задач были использованы промежуточные знания, познавшие в ходе решения лабораторных работ, задачи являлись типовыми. Решение выполнено самостоятельно.





  1. Список используемых источников
  1. Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989



  1. Йенсен К., Вирт Н. Паскаль – руководство для пользователей и описание языка. – М.: Мир, 1982


  1. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль -- М.: Наука, 1987


  1. Зуев Е.А. Язык программирования Turbo Pascal 6.0 -- М.: Унитех, 1992


  1. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс -- М.: Нолидж, 1997 http://pascal.dax.ru/files/books/TurboPascal.zip


  1. Зубов В.С. Программирование на языке Turbo Pascal (версии 6.0 и 7.0). Издание 3-е, исправленное – М.: Информационно-издательский дом "Филинъ", 1997. - 320 с


  1. Немнюгин С.А. Turbo Pascal. Практикум [текст]. 2-е изд./ СПб.: Питер, 2007. - 268 с.: ил.


  1. В.В. Фаронов. Основы Турбо Паскаля. Кн.1, М., МВТУ, 1992.


  1. Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0 / Под ред. В.П. Тарасенко – Киев: ВЕК+; М.: Бином Универсал, 1998


  1. Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. - М.:Мир, 1987