Реферат: Программирование решения задач
Задача №1
Написать программу для вычисления значения выражения:
2
/> 1+
3+ 4
/>/> 6
5+
7+x
при различных значениях х.
Предусмотреть программнуюобработку значений х, при которых выражение не существует.
Решение
1. Анализ введенных с клавиатурыисходных данных
2. Условие, при котором х > 0
3. Повторение предыдущей операции длякаждой функции
4. Выведение условия для выхода
5. Вывод результатов
programProject1;
{$APPTYPECONSOLE}
uses
SysUtils;
var
x,y,n:real;
begin
repeat
writeln('enter x');
readln(x);
if (x+7)=0then writeln('resheniy net') else
if(5+6/(7+x))=0 then writeln('resheniy net') else
if(3+4/(5+6/(7+x)))=0 then writeln('resheniy net')
else
y:=1+2/(3+4/(5+6/(7+x)));
writeln('y=',y:1:10);
writeln('dly vuhoda nagmite 0, esli net to 1');
readln(n);
if n=0then break
until false
end.
/>
Рис.1. Результаты работы программы для задачи 1
Задача№2
Шахматная доска содержит 8х8клеток. Горизонтали и вертикали обозначаются цифрами 1-8. Написать программу,проверяющую, можно ли с первой заданной клетки попасть на вторую одним ходомчерного слона.
Решение
1. Анализ введенныхс клавиатуры исходных данных для первой клетки
2. Условие для а1> 8 или в1 > 8.
3. Анализ введенныхс клавиатуры исходных данных для второй клетки
4. Условие для abs (а2-а1).
5. Выведение условиядля выхода
6. Вывод результатов
Для решения задачи введемкоординаты первой клетки, притом, что они должны быть меньше восьми; затемкоординаты второй клетки (они также должны быть меньше восьми). Если разностькоординат первой клетки равна разности координат второй клетки, то значит спервой клетки можно попасть на вторую одним ходом черного слона, есликоординаты не равны, то нельзя. Запишем результат.
program Project2;
{$APPTYPECONSOLE}
uses
SysUtils;
var
a1,a2,b1,b2:integer;
c:real;
begin
repeat
writeln('Enter koordinati 1-oy kletki ot 1 do 8');
readln(a1,b1);
if(a1>8) or (b1>8) then writeln('Nelsya enter eto chislo, enter other');
writeln('Enter koordinati 2-oy kletki ot 1 do 8');
readln(a2,b2);
ifabs(a2-a1)=abs(b2-b1) then writeln('mogno') else writeln('nelsya');
readln;
writeln('dly vuhoda nagmite 0, esli prodolgit to 1');
readln(c);
if c=0then break;
until false
end.
/>
Рис.2.Результаты рабаты программы для задачи 2
Задача№3
Татьяна Ларина, читаяочередной французский роман, подсчитала сумму номеров прочитанных страниц.Написать программу, определяющую номер последней прочитанной страницы.
Решение
1. Анализ введенныхс клавиатуры исходных данных
2. Решение с помощьюарифметической прогрессии
3. Выведение условиядля выхода
4. Вывод результатов
programProject2;
{$APPTYPECONSOLE}
uses
SysUtils;
var
sum,i,n:integer;
begin
write('entern:');
readln(n);
i:=0;
repeat
inc(i);
sum:=sum+i;
untilsum>=n;
writeln('otvet',i);
readln(i);
end.
/>
Рис.3. Результаты работы программы для задачи 3
Задача№4
Найти все двузначныечисла, сумма цифр которых не меняется при умножении на 2,3,4,5,6,7,8,9.
Решение
Для написания этойпрограммы воспользуемся функцией sumc (умножениеI на любое однозначное число ). Дляпроверки кратности удобно использовать операцию mod, позволяющую определить остаток при делении целыхчисел. Так как числа двузначные, то цикл будет от 10 до 99.
program Project4;
//usesSysUtils;
var
sum, i:integer;
functionsumc(val: integer): integer;
var
x: integer;
begin
x:= 0;
repeat
x := x +val mod 10;
val := valdiv 10;
until val =0;
sumc := x;
end;
begin
for i := 10to 99 do
begin
sum :=sumc(i);
ifsumc(i*2) = sum then writeln('2: ', i);
ifsumc(i*3) = sum then writeln('3: ', i);
ifsumc(i*4) = sum then writeln('4: ', i);
ifsumc(i*5) = sum then writeln('5: ', i);
ifsumc(i*6) = sum then writeln('6: ', i);
ifsumc(i*7) = sum then writeln('7: ', i);
ifsumc(i*8) = sum then writeln('8: ', i);
ifsumc(i*9) = sum then writeln('9: ', i);
ReadLn;
end.
/>
Рис.4. Результаты работы программы для задачи 4
Задача№5
Одномерный массив,содержащий N элементов, состоит из нулей, единици двоек, расположенных в произвольном порядке (заполнение массива-случайнымобразом). Преобразовать массив так, чтобы вначале расположились все двойки,затем все нули и, наконец, все единицы.
Решение
programProject5;
//usesSysUtils;
const
n = 20;
var
arr: array[1..n] of byte;
tmp, i, j, k: byte;
begin
randomize;
for i := 1to n do arr[i] := random(3);
for i := 1to n do
for j := ito n do
ifarr[i] < arr[j] then
begin
tmp :=arr[i];
arr[i]:= arr[j];
arr[j]:= tmp;
end;
for i := 1to n do if arr[i] = 1 then
begin
k :=i;
break;
end;
for i := kto n do
for j := ito n do
ifarr[i] > arr[j] then
begin
tmp :=arr[i];
arr[i]:= arr[j];
arr[j]:= tmp;
end;
for i := 1to n do write(arr[i],' ');
ReadLn;
end.
/>
Рис.5. Результаты работы программы для задачи 5
Задача№6
Задана матрица расстояниймежду городами. Написать программу, указывающую все города, расстояния откоторых до других городов не больше А.
Решение
programProject6;
//usesSysUtils;
const
a = 20;
var
arr: array[1..5, 1..5] of byte;
i, j: byte;
begin
randomize;
for i := 1to 5 do
for j := 1to 5 do arr[i, j] := 0;
for i := 2to 5 do
for j := 1to i-1 do arr[i, j] := random(50)+1;
for i := 1to 5 do
for j := 1to 5 do if (arr[i, j] <= a) and (arr[i, j]<>0) then writeln(i, ' ', j,' ', arr[i, j]);
ReadLn;
end.
/>
Рис.6. Результаты работы программы для задачи 6
Задача№7
Удалить ведущие иконечные пробелы в строке.
Решение
1. Анализ введенных с клавиатурыисходных данных
2. Применение функции trim
3. Выведение условия для выхода
4. Вывод результатов
Для решения этой задачи используемстроковый тип данных. Для удаления пробелов воспользуемся функцией trim(удаляет все ведущие и конечныепробелы). Запишем результат.
programProject7;
{$APPTYPECONSOLE}
uses
SysUtils;
var
s:string;Index, Count:integer;
n:real;
begin
repeat
s:=('enter stroku s klaviaturi');
readln(s);
s:=trim(s);
writeln(s);
write('dly vuhoda nagmite 0, esli prodolgit to 1');
readln(n);
if n=0then break
until false
end.
/>
Рис.7.Результаты работы программы для задачи 7
Задача№8
Написать программу дляудаления всех строк двумерного массива с отрицательными элементами.
Решение
Для решения задачииспользуем функцию haveotr, а такжепроцедуру delete(удаляет из строки символы, начиная спозиции Index). Отметим, что haveotr=ложь, но если массив от 1 до 5 <0, то в этом случае haveotr=правда.
programProject8;
//usesSysUtils;
var
arr: array[1..5, 1..5] of integer;
i, j: byte;
functionhaveotr(n: byte): boolean;
begin
haveotr :=false;
for j := 1to 5 do if arr[n, j] < 0 then haveotr := true;
end;
proceduredel(n: byte);
begin
for j := 1to 5 do arr[n, j] ;
end;
begin
repeat
randomize;
for i := 1to 5 do
for j := 1to 5 do arr[i, j] := random(5)-1;
for i := 1to 5 do
ifhaveotr(i) then del(i);
until false
end.
Задача№9
Даны два непустыхмножества прописных и строчных букв. Написать программу, которая выводитперечисленные множества в алфавитном порядке.
Решение
Для решения задачи вводимдва непустых множества (случайным образом вдвоём буквы).N – число постоянное и равно 20.Вычисляем с помощью to length. Записываем результат.
program Project9;
//uses SysUtils;
const
n = 20;
var
tmp: char;
pr, st:string;
i, j: byte;
a:real;
begin
repeat
writeln('enter st');
readln(st);
for i := 1to length(st) do
for j := ito length(st) do
if st[i]> st[j] then
begin
tmp :=st[i];
st[i]:= st[j];
st[j]:= tmp;
end;
writeln('enter pr');
readln(pr);
for i := 1to length(pr) do
for j := ito length(pr) do
if pr[i]> pr[j] then
begin
tmp :=pr[i];
pr[i]:= pr[j];
pr[j]:= tmp;
end;
writeln(st);
writeln(pr);
write('dlyvuhoda nagmite 0, esli prodolgit to 1');
readln(a);
if a=0 thenbreak
until false
end.
/>
Рис.9. Результаты работы программы для задачи 9
Задача№10
В файле целых чиселзаменить все четные натуральные числа их квадратами.
Решение
programProject1;
//usesSysUtils;
var
n, i, tmp:integer;
Fin, Fout:text;
begin
assignfile(Fin, 'in.txt');
ReSet(Fin);
assignfile(Fout, 'out.txt');
ReWrite(Fout);
readln(fin,n);
for i := 1to n do
begin
read(fin,tmp);
if tmp mod2 = 0 then write(fout, tmp*tmp, ' ')
elsewrite(fout, tmp, ' ');
end;
closeFile(Fin);
closeFile(Fout);
end.