ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.06.2020
Просмотров: 248
Скачиваний: 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 станет истиной.
-
Расчетная часть
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.
-
Заключение
Согласно поставленной цели в расчетном задание был проведен аналитический обзор литературных источников и интернет ресурсов, языков программирования согласно учебному плану по направлению машиностроение выбран рабочим Turbo Pascal в соответствии с номером варианта проведена работа и представлено решение двух задач. Смотрите страницу 2 при решении задач были использованы промежуточные знания, познавшие в ходе решения лабораторных работ, задачи являлись типовыми. Решение выполнено самостоятельно.
-
Список используемых источников
-
Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989
-
Йенсен К., Вирт Н. Паскаль – руководство для пользователей и описание языка. – М.: Мир, 1982
-
Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль -- М.: Наука, 1987
-
Зуев Е.А. Язык программирования Turbo Pascal 6.0 -- М.: Унитех, 1992
-
Фаронов В.В. Турбо Паскаль 7.0. Начальный курс -- М.: Нолидж, 1997 http://pascal.dax.ru/files/books/TurboPascal.zip
-
Зубов В.С. Программирование на языке Turbo Pascal (версии 6.0 и 7.0). Издание 3-е, исправленное – М.: Информационно-издательский дом "Филинъ", 1997. - 320 с
-
Немнюгин С.А. Turbo Pascal. Практикум [текст]. 2-е изд./ СПб.: Питер, 2007. - 268 с.: ил.
-
В.В. Фаронов. Основы Турбо Паскаля. Кн.1, М., МВТУ, 1992.
-
Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0 / Под ред. В.П. Тарасенко – Киев: ВЕК+; М.: Бином Универсал, 1998
-
Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. - М.:Мир, 1987