Задачки на Pascal

Дело такое: дали задачи на паскале нарешать. Думаю, стоит примерные коды накидать сюда, авось кому и полезно будет. Но предупреждаю сразу: тороплюсь, правильность расчета не проверяю, косяки могут быть, но идеи в целом должны быть правильные

Задача 1: Простой цикл.

Задача 1

Задача 1

program ji_l2;
uses
crt;
var
y,current : real;
i, x : integer;
begin
writeln('Enter X: ');
readln(x);
y := 0;
current := 0;
for i := 1 to 20 do
begin
current := 1/((2*i-1)*Exp(x*Ln(2*i-1)));
y := y + current;
end;
writeln('y = ', y);
readln();
end.

Вся сложность в том, что бы правильно задать формулу, по которой вычислять текущий член. Вот у меня она:
[pascal]
current := 1/((2*i-1)*Exp(x*Ln(2*i-1)));
[/pascal]

Задача 2: Циклы с разветвлением.

Задача 2

Думается мне, что в данном случае лучше всего подходит цикл While (<condition>) do.
[pascal]
program jl_4;
uses
crt;
var
y, x : real;
begin
x:= 0.5;
while (x <=4) do
begin
y :=  x*sin(x);
if (y >= -2) and (y <=1) then
writeln(‘x = ‘, x:4:4, ‘ y = ‘, y:4:4);
x := x + 0.25;
end;
readln();
end.
[/pascal]

Задача 2: Вывод

Задача 2: Вывод на консоль

Замечание: при выводе использовал ограничение 4 знака до точки и столько же после.

Задача 3: Массивы.

Даны массивы X(x1..x10) Y(x1..x10) На место массива X записать массив Y, а на место массива Y — Массив X;

Код простой. Шаги такие:

  • Заполнить массивы
  • Вывести A
  • Вывести B
  • Произвести операции по переносу элементов
  • Снова вывести массивы

[pascal]

program Arrays;
uses
crt;
var
A: array [1..10] of integer;
B: array [1..10] of integer;
i, temp : integer;
begin
randomize();
{Заполнение массивов}
for i := 1 to 10 do
begin
A[i] := random(10);
B[i] := random(10);
end;
writeln();
writeln(‘Massiv A:’);
for i := 1 to 10 do
write(A[i], ‘ ‘);
writeln();
writeln(‘Massiv B’);
for i := 1 to 10 do
write(B[i], ‘ ‘);
writeln();
Writeln(‘Operations…..’);
for i := 1 to 10 do
begin
temp := A[i];
A[i] := B[i];
B[i] := temp;
end;
writeln();
writeln(‘Massiv A:’);
for i := 1 to 10 do
write(A[i], ‘ ‘);
writeln();
writeln(‘Massiv B’);
for i := 1 to 10 do
write(B[i], ‘ ‘);
readln();
end.

[/pascal]

Самое ценное в этой задаче — фрагмент кода, где происходит обмен элементов:

[pascal]

for i := 1 to 10 do
begin
temp := A[i];
A[i] := B[i];
B[i] := temp;
end;

[/pascal]

В переменную temp записывается значение A[i], потом в A[i] записывается B[i], после чего в B[i] записывается значение, которое было ранее в A[i] (теперь оно хранится в temp). И это в цикле, значит операции повторяются для каждого элемента массивов.

Вывод массивов и их обмен

Вывод массивов и их обмен

 Задача 4: Массивы.

Даны два вектора A(10) и B(11). Вычислить z = C*D, где c — количество положительных элементов вектора A, d — количество отрицательных элементов вектора В. Все вычисления оформить процедурами. Аналогично для векторов C(5) и D(17)

[pascal]

program jl_8;
uses
crt;
const
n = 100;
type
Vector = Array [1..n] of integer;
var
i : integer;
A : Vector;
B : Vector;
C : Vector;
D : Vector;

minus, plus : integer;
procedure VectorInit(var V : vector);
var
i: integer;
begin
for i := 1 to n do
V[i] := random(50)-25;

end;
procedure VectorPrint(V : vector; size:integer);
var
i: integer;
begin
for i := 1 to size do
write(V[i], ‘ ‘);
writeln();
end;
procedure getMinusElementsCount(A: Vector; size : integer);
var
i: integer;
begin
minus := 0;
for i := 1 to size do
if (A[i] < 0) then
inc(minus);
end;
procedure getPlusElementsCount(A: Vector; size : integer);
var
i: integer;
begin
plus := 0;
for i := 1 to size do
if (A[i] > 0) then
inc(plus);
end;
begin
randomize();

VectorInit(A);
VectorInit(B);
VectorInit(C);
VectorInit(D);

VectorPrint(A, 10);
VectorPrint(B, 11);

getMinusElementsCount(B,11);
getPlusElementsCount(A, 10);
writeln();
writeln(‘Z(A,B) = ‘, Plus*Minus);
VectorPrint(C, 5);
VectorPrint(D, 17);

getMinusElementsCount(C,5);
getPlusElementsCount(D, 17);
writeln();
writeln(‘Z(C,D) = ‘, Plus*Minus);
readln();
end.
[/pascal]

Исходный Код

Добавить комментарий