Решенные задачи на языке Паскаль
Страницы –» 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.