Контрольная работа по «Программирование на языках высокого уровня»
Контрольная работа
по курсу
«Программирование на языках высокого уровня»
Задача 1
Определить, лежиттли заданная точка на одной из сторон треугольника, заданого координатами своих вершин.
Блок-схема алгоритма
Текст программы
Program N_1;
var x,y,x1,x2,x3,y1,y2,y3,k1,k2,
b:boolean;
begin
Write('x1, y1 '); Readln(x1,y1);
Write('x2, y2 '); Readln(x2,y2);
Write('x3, y3 '); Readln(x3,y3);
Write('x, y '); Readln(x,y);
d1:=Sqrt(Sqr(x2-x1)+Sqr(y2-y1)
d2:=Sqrt(Sqr(x3-x2)+Sqr(y3-y2)
d3:=Sqrt(Sqr(x3-x1)+Sqr(y3-y1)
{Проверка существования треугольника}
b:=(d1<d2+d3) and (d2<d1+d3) and (d3<d1+d2);
if b then
begin
{Построение уравнений прямых}
if x1<>x2 then
begin
k1:=(y1-y2)/(x1-x2);
b1:=y1-k1*x1;
end;
if x2<>x3 then
begin
k2:=(y2-y3)/(x2-x3);
b2:=y2-k2*x2;
end;
if x1<>x3 then
begin
k3:=(y3-y1)/(x3-x1);
b2:=y3-k3*x3;
end;
{Проверка принадлежности точки стороне треугольника}
if x1<>x2 then b:=(y=k1*x+b1) else b:=(x=x1) and (d1=abs(y-y1)+abs(y-y2));
if x2<>x3 then b:=b or (y=k2*x+b2) else b:=b or ((x=x2) and (d2=abs(y-y2)+abs(y-y3)));
if x1<>x3 then b:=b or (y=k3*x+b3) else b:=b or ((x=x3) and (d3=abs(y-y1)+abs(y-y3)));
if b then Writeln('Да') else Writeln('Нет');
end
else Writeln('Треугольник не существует');
Readln;
end.
Задача 2
Дана строка S,состоящая из n символов. Проверить, содержит ли данная строка подстроку "аа". Определить позицию первого вхождения подстроки и общее количество вхождений.
Блок-схема алгоритма
Текст программы
Program N_2;
var S:String;
n,i,P,c:Integer;
{S - исходная строка
n - ее
длина (определяется после
P - позиция вхождения подстроки "аа" ("аа" - латинские символы) в исходную строку
с - количество таких вхожднеий}
begin
Write('S = '); Readln(S);
n:=Length(S);
P:=Pos('aa',S);
c:=0;
{Проверка наличия вхождения}
if P<>0 then
begin
Writeln('Yes - ',P);
For i:=1 to n-1 do
if S[i]+S[i+1]='aa' then c:=c+1;
end
else Writeln('No');
Writeln(C);
Readln;
end.
Задача 3
Пересортировать все элементы одномерного массива и разделить его на две такие части, чтобы разность между суммами элементов в каждой из этих частей оказалась бы наименьшей. Результаты выдать на экран.
Блок-схема алгоритма
Текст программы
Program N_3;
{Идея алгоритма:
1. Массив сортируется в порядке возрастания;
2. Если сумма всех элементов отрицательная, то просматриваем массив
от начала и
если сумма во втором массиве вместе с текущим (отрицательным) элементом
из исходного массива больше
половины суммы исходного
то записываем его во второй массив,
иначе записываем в третий массив;
3. Если сумма всех элементов исходного массива положительная,
то просматриваем его от конца к началу и
если сумма во втором массиве
вместе с текущим (
из исходного массива меньше
половины суммы исходного
то записываем его во второй массив,
иначе записываем в третий массив;}
const MaxN=100; {Максимальный размер массива}
var a:array[1..MaxN] of real; {Исходный массив}
b,c:Array[1..MaxN] of real; {Массивы после решения}
{i,j - переменные для организации циклов
n - вводимый размер массива
Num - Индекс минимального элемента массива (при сортировке)
ind1, ind2 - индексы элементов второго и третьего массивов
S,S1,S2 - суммы элементов в каждом массиве
Min - Минимальный элемент в исходном массиве (для сортировки)
v - логическая переменная для проверки чисел массива}
i,j,n,Num,ind1,ind2:Integer;
S,S1,S2,Min:Real;
v:boolean;
begin
{Маасив формируется генератором случайных чисел из интервала (-100; 100)}
Randomize;
Write('n = ');Readln(n);
S:=0;
Writeln('Исходный массив');
For i:=1 to n do
begin
A[i]:=100-random*200;
{Вывод элементов массива с точностью до 3-х десятичных знаков}
Write(A[i]:0:3,' ');
S:=S+A[i];
end;
Writeln;
Writeln('S = ',S*2:0:3);
{Сортировка плученного массива}
For i:=1 to n-1 do
begin
{Поиск
минимального элемента в
не отсортированной части массива}
min:=A[i]; Num:=i;
For j:=i+1 to n do
if A[j]<min then
begin
min:=A[j];
Num:=j;
end;
A[Num]:=A[i];
A[i]:=Min
end;
{Вывод массива после сортировки}
Writeln('Массив после сортировки');
For i:=1 to n do Write(A[i]:0:3,' '); Writeln;
{Распределение элементов исходного массива на 2}
S1:=0;S2:=0;
ind1:=1; ind2:=1;
{Проверим, есть
ли в массиве числа, модуль
которых меньше модуля
всех элементов массива}
v:=False;
For i:=1 to n do
begin
v:=v or (Abs(A[i])<Abs(S/2));
if v then break;
end;
{}
if v then
begin
{Если сумма элементов исходного массива не положительна}
if S<=0 then
For i:=1 to N do
begin
{Если S1 вместе с текущим не
положительным элементом не
if (S1+A[i]>=S/2) and (A[i]<=0) then
begin
{то записываем его во второй массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
b[ind1]:=A[i];
S1:=S1+A[i];
ind1:=ind1+1;
end
else
begin
{иначе записываем его в третий массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
c[ind2]:=A[i];
S2:=S2+A[i];
ind2:=ind2+1;
end;
end
else
begin
For i:=N downto 1 do
begin
if (S1+A[i]<=S/2) and (A[i]>=0) then
begin
{то записываем его во второй массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
b[ind1]:=A[i];
S1:=S1+A[i];
ind1:=ind1+1;
end
else
begin
{то записываем его в третий массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
c[ind2]:=A[i];
S2:=S2+A[i];
ind2:=ind2+1;
end;
end
end;
End
else
begin
For i:=1 to n do
begin
if (i mod 4=1) or (i mod 4=0)
then
begin
B[ind1]:=A[i];
Ind1:=Ind1+1;
S1:=S1+A[i];
end
else
begin
C[ind2]:=A[i];
Ind2:=Ind2+1;
S2:=S2+A[i];
end;
end;
end;
{Вывод элементов второго массива и суммы его элементов}
Writeln('Второй
массив: ','Количство элементов ',Ind1-
For i:=1 to ind1-1 do Write(B[i]:0:3,' '); Writeln;
Writeln('S1 = ',S1:0:3,' ');
{Вывод элементов второго массива и суммы его элементов}
Writeln('Третий
массив; ','Количство элементов ',Ind2-
For i:=1 to ind2-1 do Write(C[i]:0:3,' '); Writeln;
Writeln('S2 = ',S2:0:3,' ');
Writeln('Разность между суммами: ', ABS(S1-S2):0:3);
Readln;
end.
Задача 4
Дана квадратная матрица целых чисел порядка n. Получить последовательность b1, b2, …, bn, где bi – это минимальный элемент, находящийся в начале i-й строки матрицы до элемента, находящегося на главной диагонали включительно.
Блок-схема алгоритма
Текст программы
Program N_4;
const Nmax=100; {Максимальн допустимый размер исходного массива}
{n - размер исходного массива
i,j - параметры цикла
NumI, NumJ - координаты строки и столбца минимального элемента массива
A - исходная матрица
B - массив из минимальных элементов строк матрицы A
min - минимальный элемент в каждой строке матрицы А}
Var n,i,j,NumI,NumJ:Integer;
A:array[1..Nmax,1..Nmax] of Integer;
B:array[1..Nmax] of Integer;
min:Integer;
begin
{Задание размера исходной матрицы}
Write('n = '); Readln(n);
{Матрица заполняется случайными целыми числами из промежутка (-100; 102)}
Randomize;
For i:=1 to n do
begin
For j:=1 to n do
begin
A[i,j]:=100-random(200);
{Вывод элемента матрицы на экран}
Write(A[i,j],' ')
end;
Writeln;
end;
Writeln;
{Решение основной задачи}
For i:=1 to n do
begin
{Минимальным значением назначается первый элемент каждой строки}
Min:=A[i,1]; NumI:=i; NumJ:=1;
For j:=1 to i do
{Если текущий элемент окажется меньше, то он становится меньшим}
if A[i,j]<Min then
begin
min:=A[i,j];
NumI:=I;
NumJ:=J;
end;
{Найденный элемент из матрицы записывается в массив B и выводится на экран}
B[i]:=A[NumI,NumJ];
Write(B[I] ' ');
end;
Writeln;
Readln
end.
Задача 5
Дан текстовый файл с именем NameT, содержащий таблицу из трех столбцов вещественных чисел. Ширина столбцов таблицы и способ их выравнивания являются произвольными. Специальных символов-разделителей таблица не содержит. Создать файлы вещественных чисел с именами Name1, Name2 и Name3, каждый из которых содержит числа из соответствующего столбца таблицы. Вычислить количество чисел, их сумму, среднее значение для каждого столбца.
Блок-схема алгоритма
Текст программы
Program N_5;
Const Nt='Namet.txt';
N1='Name1.rl';
N2='Name2.rl';
N3='Name3.rl';
Var n,Count1,Count2,Count3,i,j:
A,S1,S2,S3,Sr1,Sr2,Sr3:Real;
NameT:text;
Name1,Name2,Name3: file of real;
begin
{Все исходные данные формируются случайным образом}
Randomize;
n:=random(1000)+1;
Assign(NameT,Nt);
Rewrite(NameT);
{Формирование файла из трех столбцов}
For i:=1 to (n div 3) do
begin
For j:=1 to 3 do
begin
A:=200-random*100;
Write(NameT,A,' ');
end;
Writeln(NameT);
end;
{Запись в файл остальных из n чисел, не вошедших в предыдущем сеансе}
if (n div 3*3)<n then
For i:=n div 3*3 to n do
begin
A:=200-random*100;
Write(NameT,A,' ');
end;
Close(NameT);
assign(Name1,N1);
Rewrite(Name1);
assign(Name2,N2);
Rewrite(Name2);
assign(Name3,N3);
Rewrite(Name3);
i:=1;
Count1:=0; Count2:=0; Count3:=0;
S1:=0; S2:=0; S3:=0;
Reset(NameT);
While Not Eof(NameT) do
begin
Read(NameT,A);
case (i mod 3) of
1: begin
Write(Name1,A);
Inc(Count1);
S1:=S1+A;
Inc(i);
end;
2: begin
Write(Name2,A);
Inc(Count2);
S2:=S2+A;
Inc(i);
end;
0: begin
Write(Name3,A);
Inc(Count3);
S3:=S3+A;
Inc(i);
end;
end;
end;
Close(NameT);
Close(Name1);
Close(Name2);
Close(Name3);
Sr1:=S1/Count1;
Sr2:=S2/Count2;
Sr3:=S3/Count3;
Writeln('1. Count = ',Count1,' ','S = ',S1:0:4,' ','Sr = ',Sr1:0:4);
Writeln('2. Count = ',Count2,' ','S = ',S2:0:4,' ','Sr = ',Sr2:0:4);
Writeln('3. Count = ',Count3,' ','S = ',S3:0:4,' ','Sr = ',Sr3:0:4);
Readln;
end.
Задача 6
Дано четное число n>2, проверить для этого числа гипотезу Гольдбаха. Эта гипотеза заключается в том, что каждое четное n, большее двух, представляется в виде суммы двух простых чисел. (Определить процедуру, позволяющую распознавать простые числа).
Блок-схема алгоритма
Текст программы
Program N_6;
var n,a,b:Word;
{Проверка числа, простое ли оно. Если простое, то false, иначе - true}
Function Verify(m:Word):Boolean;
var i:word;
Rez:Boolean;
begin
{Пропускаем из проверки все четные, кроме 2}
if (m=1) or ((m<>2) and not odd(m)) then Rez:=True else
{Пропускаем 2 и 3 - они простые}
if (m=2) or (m=3) then Rez:=False else
begin
{Проверяем делимость остальных чисел на все натуральные от 2 до половины m}
For i:=2 to (m div 2) do
begin
{Если число m делится на текущее натуральное прекращаем проверку}
Rez:=m mod i=0;
if rez then break;
end;
end;
Verify:=Rez;
end;
{Процедура, подбирающая простые а и b, сумма которых равна n}
Procedure Goldbah(n:Word);
var i,j:Word;
begin
For i:=2 to n-1 do
begin
a:=i;
if Not Verify(a) then
begin
if Not Verify(n-a) then
begin
b:=n-a;
Writeln(a, ' + ',b,' = ',n);
end;
end;
end;
end;
begin
Write('n = '); Readln(n);
Unil n mod 2=0;
Goldbah(n);
Readln
end.
Задача 7
Вычислить бесконечную сумму с заданной точностью e (e>0 и может быть 0,1; 0,01; 0,001 и т. д.). Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем e, - это и все оследующие слагаемые можно не учитывать.
Даны действительные числа x, e (x¹0, e>0) и целые числа k и n. Вычислить сточностью e
.
Некоторые размышления к задаче:
Очевидно, что если |x|<1, то модуль каждого следующего слагаемого будет ворастать, и задача решена быть не может, т. к. некоторое (возможно, первое) слагаемое будет больше 1, что не соответствует условию задачи. Поэтому значение x по модулю должно быть больше 1.
Блок-схема алгоритма
Текст программы
Program N_7;
Var Eps, x,S,a,d:Real;
k,n:Word;
begin
Write('Epsilon = '); Readln(Eps);
Repeat
Write('x = '); Readln(x);
if x<=1 then Writeln('Error: x>1');
until x>1;
Write('n = '); Readln(n);
S:=0;
if n mod 2<>0
then a:=-5/Exp(4*ln(x))
else a:=5/Exp(4*ln(x));
k:=2;
d:=(4*k+5)*(2*k-1)/Exp(4*ln(x)
while Abs(a*d)>=Eps do
begin
S:=S+a;
a:=a*d;
k:=k+1;
d:=(4*k+5)*(2*k-1)/Exp(4*ln(x)
end;
Writeln('S = ',S:0:7);
Readln;
end.

- Контрольная работа по программированию
- Контрольная работа по "Программированию"
- Контрольная работа по "Программированию"
- Контрольная работа по "Программированию"
- Контрольная работа по "Программированию"
- Контрольная работа по "Программированию"
- Контрольная работа по "Программированию"
- Контрольная работа по "Прогнозированию и планированию в налогообложении"
- Контрольная работа по "Прогнозированию и развитие отрасли"
- Контрольная работа по "Прогнозированию развития сферы сервиса"
- Контрольная работа по "Программинрованию"
- Контрольная работа по "Программирование"
- Контрольная работа по "Программирование"
- Контрольная работа по "Программирование"