Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачі.doc.docx
Скачиваний:
2
Добавлен:
11.09.2019
Размер:
70.66 Кб
Скачать

Решенные задачи на языке Паскаль

Страницы –» 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 * 24 * 25 * 26 * 27 * 28 * 29 * 30 * 31 * 32 * 33 * 34 * 35 * 36 * 37 * 38 * 39 * 40 * 41 * Разделы решенных задач

Условие задачи прислали на e-mail.

Даны действительные числа Х1...Хn в последовательности Х1...Xn. Все члены меньше двух заменить нулями и получить сумму, пренадлежащую отрезку [3,7] (решить через массив).

VAR

a:array[1..99]of real;

n,i:word;

summa:real;

BEGIN

{ 1). Количество элементов в массиве}

write('Сколько чисел в массиве (больше 6): ');

readln(n);

if n<7 then halt;

{ 2). Запись чисел в массив}

for i:=1 to n do

begin

write('Введите значение ',i,'-го элемента массива: ');

readln(a[i]);

end;

{ 3). Замена элементов меньших 2 на 0}

writeln;

writeln('Результат замены элементов меньших 2 на 0:');

for i:=1 to n do

begin

if a[i]<2 then a[i]:=0;

writeln('Значение ',i,'-го элемента : ',a[i]:2:2);

end;

{ 4). Получение суммы элементов от 3 до 7}

writeln;

summa:=0;

for i:=3 to 7 do summa:=summa+a[i];

writeln('Сумма элементов от 3 до 7 равна ',summa:2:2);

END.

* переменная a - исходный массив с максимальным числом элементов 99 * переменные n,i - переменные для количества элементов и для цикла * переменная summa - для подсчета суммы элементов в интервале от 3 до 7.

Решение этой задачи я разбил на 4 части: количество элементов в массиве, запись чисел в массив, замена элементов меньших 2 на 0, получение суммы элементов от 3 до 7.

Количество элементов в массиве Так как мы не знаем сколько элементов в цикле, то поэтому нужно запрашивать количество элементов от пользователя (ввод с клавиатуры). При этом надо учесть, что число элементов не может быть меньше 7 так как в задаче сказано "... получить сумму, пренадлежащую отрезку [3,7]". Поэтому ставим условие if n<7 then halt; - если введеное число меньше 7, то программа завершает работу.

Запись чисел в массив После того как программа знает сколько будет элементов в массиве, нужно с помощью цикла присвоить каждому элементу свое значение.

Замена элементов меньших 2 на 0 После того как получен массив (т.е. те действительные числа Х1...Хn), нужно все члены меньше двух заменить нулями.

Получение суммы элементов от 3 до 7 Для получения суммы элементов от 3 до 7 нужно просто в цикле от 3 до 7 сложить эти элементы.

Copyright © 2001

Условие задачи - из "гостевой книги".

Составить программу для сортировки массива А из 10 элементов по следующему принципу: четные элементы по возрстанию, а не четные по убыванию.

VAR

a:array[1..10]of integer;

i,i1,tmp:integer;

BEGIN

{1). Создание исходного массива}

writeln('Исходный массив:');

randomize;

for i:=1 to 10 do

begin

a[i]:=random(9);

write(' ',a[i]);

end;

writeln;

{2). Сортировка исходного массива}

for i:=1 to 10-1 do

for i1:=i+1 to 10 do

BEGIN

if (a[i]>a[i1])and(a[i1] mod 2=0)and(a[i] mod 2=0) then

begin

tmp:=a[i];

a[i]:=a[i1];

a[i1]:=tmp;

end;

if (a[i]<a[i1])and(a[i1] mod 2=1)and(a[i] mod 2=1) then

begin

tmp:=a[i];

a[i]:=a[i1];

a[i1]:=tmp;

end;

END;

{3). Вывод отсортированного массива}

writeln;

writeln('Полученный массив:');

for i:=1 to 10 do write(' ',a[i]);

END.

* переменная a - исходный массив с числом элементов 10 * переменные i, i1 - переменные для цикла * переменная tmp - для временного хранения одного элемента массива.

Решение этой задачи я разбил на 3 части: создание исходного массива, сортировка исходного массива, вывод отсортированного массива.

Первая и третья части очень просты и могут быть записаны по разному. А вот о третьей части я расскажу.

Сортировка исходного массива Для сортировки массивов разработано несколько методов. Метод сортировки, который используется в этой программе называется "Линейная сортировка" или "Сортировка отбором". Он заключается в том, что последовательно берется один элемент и сравнивается с оставшимися элементами массива. И в зависимости от условия сравнения этих элементов они меняются друг с другом местами.

Например: 2,5,1 - нужно отсортировать по возрастанию. Используя данный метод сравниваем 1-й элемент со 2-м и 3-м элементами. Выясняем, что 2>1, поэтому меняем их местами, получим: 1,5,2. Теперь сравниваем 2-й элемент с 3-м элементом. Выясняем, что 5>2, поэтому меняем их местами и получим результат такой сортировки: 1,2,5.

Теперь когда знаем как сортировать элементы массива, можно писать программу для сортировки. Она будет выглядеть таким образом:

...

for i:=1 to 10-1 do

for i1:=i+1 to 10 do

BEGIN

if (a[i]>a[i1]) then

begin

tmp:=a[i];

a[i]:=a[i1];

a[i1]:=tmp;

end;

END;

...

При условии a[i]>a[i1] - эти элементы поменяются друг с другом местами. Вот эта часть программы будет сортировать массив по возрастанию. Другую часть программы для сортировки по убыванию просто написать - заменив знак > на <. Теперь для того чтобы отсортировать четные элементы массива нужно добавить к уже готовой части для сортировки, еще 2 условия. Первое условие, что сравниваемый элемент - четный. Ворое условие, что оставшиеся элементы которые будут сравниваться с тем - тоже четные. Для не четных элементов нужно добавить анологичные 2 условия.

Условие задачи - придумал я.

Написать программу, которая открывает текстовый файл (тип файла - text) и считывает из него строку. Если файл неудается открыть (например, файл не существует), тогда программа сама создает этот файл и записывает в него строку. Программу написать с применением директив компилятора {$I-} и {$I+}.

VAR

f: text;

st: string;

BEGIN

{$I-}

assign(f, 'my_file.txt');

reset(f);

{$I+}

if ioresult=0 then

begin

readln(f, st);

writeln('Файл "my_file.txt" существовал!');

writeln('Считанная из файла строка: ', st);

end else

begin

rewrite(f);

st:='This was in file!';

writeln(f, st);

writeln('Файл "my_file.txt" не существовал!');

writeln('Записанная в файл строка: ', st);

end;

close(f);

END.

* переменная f - это файловая переменная типа text; * переменная st - строка, которая считывается из файла или записывается в него.

Итак, сначала программа должна попытаться открыть файл. Так как мы не знаем точно, что нужный файл существует - нужно применить директиву компилятора {$I-} при открытии файла. Ну а затем {$I+} так как могут возникнуть другие ошибки, которые мы не стали проверять, но при выполнении программы они могут возникнуть и мы их даже не заметим. Теперь, когда мы выключили проверку на ошибки, нужно самим проверять их. Для этого используем функцию IOResult, которая возвращает 0 (ноль) если ошибок не было и не нулевое значение, если они были. А дальше все просто, если ошибки при открытии файла не было, то считываем из файла строку, в противном случае создаем такой файл и записываем в него строку.

Условие задачи - придумал я.

Написать программу, которая строит графики функций: y=50*sin(0.09*x) y=x2 y=10*x+5.

USES graph,crt;

VAR

x,y:integer;

{ Copyright Dos, 2003 }

{********** выход из граф режима ************}

PROCEDURE grafika_off;

BEGIN

closegraph;

END;

{********** переход в граф режим ************}

PROCEDURE grafika_on;

var

drv,mode:integer;

BEGIN

drv:=9; {VGA }

mode:=2; {VGAHi}

initgraph(drv,mode,'c:\bp\bgi');

END;

{********** построение графика **************}

PROCEDURE put_grafik;

var

i,x1,y1,n,m:integer;

flag:boolean;

BEGIN

x1:=round(getmaxx/2); { точка пересечения }

y1:=round(getmaxy/2); { осей координат }

n:=-150; {начальная коодрината X}

m:=150; {конечная координата X}

setcolor(9); {цвет осей координат}

line(0,y1,getmaxx,y1);

line(x1,0,x1,getmaxy);

flag:=false;

setcolor(10); {цвет графика}

for i:=n to m do

begin

x:=i;

y:=round(50*sin(0.09*x)); {любая формула для графика}

if flag=false then moveto(x1+x,getmaxy-y1-y);

flag:=true;

lineto(x1+x,getmaxy-y1-y);

delay(40); {задержка в цикле}

end;

readln;

END;

{*********** основная программа *************}

BEGIN

grafika_on;

put_grafik;

grafika_off;

END.

* переменная x,y - для построения графика; * переменная x1,y1 - координаты точки пересечения осей координат; * переменная n,m - для цикла.

Вся программа разбита на 3 части.

ЧАСТЬ I Эта чать программы для перехода в графический режим.

ЧАСТЬ II Процедура put_grafik - рисует график, который можно изменять: точку пересечения осей координат, цвет осей и графика, сам график.

ЧАСТЬ III Выход из графического режима.

Графики y=x2 и y=10*x+5 или любой другой, можно с легкостью построить изменив нужным одразом часть II.