066536 / 336Г, 420, 496Б, 846Г, 961, 463
.docОглавление
Задание 1. Вычислить 3
Задание 2. Даны натуральное n, символьная квадратная матрица порядка n. Получить последовательность b1,…., bn из нулей и единиц, где bi – тогда и только тогда, когда в i-й строке число символов * не меньше числа пробелов. 4
Задание 1. Вычислить
n- Натуральное число, x-действительное число
Составим блок-схему алгоритма
Составим программу на языке Pascal
program lr1;
var a:real;
n,m,k:integer;
x:real;
begin
writeln('Input x:');
readln(x);
writeln('Input n:');
readln(n);
a:=0;
for k:=1 to n do
for m:=k to n do begin
a:=(x+k)/m+a;
end;
writeln ('Ответ:',a:10:3);
end.
Результат выполнения программы:
Input x:
123
Input n:
10
Ответ: 1262.500
Задание 2. Даны натуральное n, символьная квадратная матрица порядка n. Получить последовательность b1,…., bn из нулей и единиц, где bi – тогда и только тогда, когда в i-й строке число символов * не меньше числа пробелов.
Составим блок-схему алгоритма
Составим программу на языке Pascal
program lr2;
var
a: array [1..20, 1..20] of char;
zvezd,probel,b: array [1..20] of integer;
i,j,n,s:integer;
begin
write('Введите размер матрицы <=20 : ');
readln(n);
writeln('Введите матрицу A');
for i:=1 to n do
for j:=1 to n do read(a[i,j]);
writeln('Полученная матрица:');
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln;
end;
for i:=1 to n do
for j:=1 to n do
begin
if a[i,j]=' ' then probel[j]:=probel[j]+1;
if a[i,j]='*' then zvezd[j]:=zvezd[j]+1;
end;
for j:=1 to n do
begin
if zvezd[j]>=probel[j] then b[j]:=1 else b[j]:=0 ;
end;
writeln('Ответ:');
for i:=1 to n do
begin
write(b[i]:3);
writeln;
end;
end.
Результат выполнения программы:
Введите размер матрицы <=20 : 3
Введите матрицу A
[ ****]
Полученная матрица:
*
* * *
Ответ:
0
0
1
Задание 3. Дан символьный файл f. Записать в файл g с сохранением порядка следования те символы файла f
б) вслед за которым в этом файле идет буква а
Составим блок-схему алгоритма
Составим программу на языке Pascal
program lr3;
uses crt;
var
i,k,p:integer;
m,n:char;
f,g:ff;
begin
clrscr;
assign(f,'c:\char.dat');
assign(g,'c:\char.txt');
rewrite(f);
writeln('Введите максимальный размер файла:');
readln(p);
for k:=1 to p do
begin
read(m);
write(f,m);
end;
close(f);
writeln('Содержимое выходного файла :');
reset(f);
rewrite(g);
for k:=1 to p do
begin
n:=m;
read(f,m);
if (m='а') then
begin
write(g,n);
write(n);
end;
end;
close(f);
close(g);
end.
Результат выполнения программы:
Введите максимальный размер файла:
30
привет алиса ароматерапия автобус
Содержимое выходного файла :
[ с мр]
Задание 4. Исследовать область определения и построить графики следующих функций y=3-2/x-3/(x*x)
Составим блок-схему алгоритма
Составим программу на языке Pascal
program lr4;
{ Использует библиотеку _ViewGr }
{$IFNDEF Debug}
{$D-,S-,L-}
{$ENDIF}
{$B-,R-,V-,X+,N+,E-,A-,T-,F-,Q-,P-}
{.$G+}
PROGRAM TestGr;
USES
CRT,
Graph,
_ViewGr;
CONST
PathToBGI : String[80] = 'D:\Tools\BGI';
FUNCTION InitGraphics: Integer;
VAR
grDriver, grMode : Integer;
BEGIN
grDriver:=Detect;
InitGraph(grDriver, grMode, PathToBGI);
InitGraphics:=GraphResult;
END;
FUNCTION MyVeryCoolFunction1(MyVar:Real):Real; Far;
BEGIN
MyVeryCoolFunction1:=3-2/x-3/(x*x);
END;
VAR
a,b : Real;
S : String;
BEGIN
if InitGraphics<>grOK then Exit;
InitVariable;
MainWindow(S);
a:=-1.5*Pi;
b:= 1.5*Pi;
ColorGr:=Yellow;
DrawGraph(@MyVeryCoolFunction1,a,b);
CloseGraph;
END.
{ Содержимое библиотеки _ViewGr }
{$IFNDEF Debug}
{$D-,L-,S-}
{$ENDIF}
{$B-,R-,V-,X+,G+,N+,E-,A-,T-,F-,Q-,P-}
UNIT _ViewGr;
INTERFACE
USES
Graph;
CONST
ArgNumber = 800; {количество интервалов аргумента при построении}
CONST
CalcScale : BOOLEAN = TRUE; {при построении графика пересчитывать масштаб}
CalcFun : BOOLEAN = TRUE; {при построении графика пересчитывать мин. и макс. значение функции}
MinFun : Real = 0.0; {минимальное значение функции на интервале [a; b]}
MaxFun : Real = 0.0; {максимальное значение функции на интервале [a; b]}
ScaleX : Real = 80.0; { Коэффициент увеличения графика по оси X}
ScaleY : Real = 80.0; { Коэффициент увеличения графика по оси Y}
ColorAxis : Word = LightBlue; {цвет осей координат }
ColorGr : Word = Yellow; {цвет линии графика }
ColorLbl : Word = Red; {цвет чисел на сетке координат}
ColorMin : Word = LightRed; {цвет линии "минимум" }
ColorMax : Word = LightRed; {цвет линии "максимум" }
TYPE
{$IFOPT N+}
Real = Extended;
{$ENDIF}
TDrawFunc = function (aX : Real) : Real;
PROCEDURE InitVariable;
PROCEDURE MainWindow(VAR Header:String);
PROCEDURE PlotAxis;
PROCEDURE DrawLegend(Title : String);
PROCEDURE DrawGraph (PF: Pointer; a,b: Real);
IMPLEMENTATION
VAR
HeightM : Integer;
MaxX : Integer;
MaxY : Integer;
PROCEDURE InitVariable;
BEGIN
MaxX := GetMaxX;
MaxY := GetMaxY;
HeightM:=TextHeight('M');
END;
PROCEDURE MainWindow(VAR Header:String);
BEGIN
ClearDevice;
SetTextStyle(DefaultFont, HorizDir, 2);
SetTextJustify(CenterText, TopText);
SetViewPort(0, 0, MaxX, MaxY, ClipOn);
SetColor(White);
OutTextXY(MaxX DIV 2, 4, Header);
(* SetViewPort(0, HeightM+4, MaxX , MaxY-4, ClipOn);
PlotAxis;*)
SetViewPort(100, HeightM+50, MaxX-25, MaxY-(HeightM+50), ClipOn);
PlotAxis;
SetViewPort(1, HeightM+5, MaxX-1, MaxY-(HeightM+5), ClipOn);
END;
PROCEDURE PlotAxis;
VAR
ViewPort : ViewPortType; {}
BEGIN
{ SetLineStyle(SolidLn, 0, NormWidth);
SetColor(ColorAxis);
Rectangle(100, HeightM+50, MaxX-25, MaxY-(HeightM+50));}
SetLineStyle(SolidLn, 0, NormWidth);
SetColor(ColorAxis);
GetViewSettings(ViewPort);
with ViewPort do
Rectangle(0, 0, X2-X1, Y2-Y1);
END;
PROCEDURE DrawLegend(Title : String);
BEGIN
END;
PROCEDURE DrawGraph (PF: Pointer; a,b: Real);
VAR
F : TDrawFunc; {отображаемая функция}
dArg : Real; {шаг изменения аргумента функции}
X : Real; {текущее значение аргумента функции}
Y : Real; {текущее значение функции}
vStr : String; {}
Xs : Integer; {значение координаты X на экране}
Ys : Integer; {значение координаты Y на экране}
ViewPort : ViewPortType; {}
GraphSizeY : Integer; {высота области для рисования графика}
BEGIN
@F:=PF;
dArg:=(b-a)/ArgNumber;
{ Определение минимальноого и максимального значений функции }
if CalcFun
then begin
X:=a;
MinFun:=F(X);
MaxFun:=MinFun;
repeat
Y:=F(X);
if MinFun>Y then MinFun:=Y;
if MaxFun<Y then MaxFun:=Y;
X:=X+dArg;
until ( X > b );
end;
{отобразить значения X и Y на осях координат}
if CalcScale
then begin
SetColor(ColorLbl);
Str(MaxFun :4 :2, vStr);
OutTextXY(50, HeightM+35, vStr);
Str(MinFun :4 :2, vStr);
OutTextXY(50, MaxY-(HeightM+80), vStr);
Str(a :4:2, vStr);
OutTextXY(120, MaxY-(HeightM+40), vStr);
Str(b :4:2, vStr);
OutTextXY(MaxX-60, MaxY-(HeightM+40), vStr);
end;
SetViewPort(100, HeightM+50, MaxX-25, MaxY-(HeightM+50), ClipOn);
GetViewSettings(ViewPort);
GraphSizeY:=ViewPort.Y2-ViewPort.Y1;
if CalcScale
then begin
GetViewSettings(ViewPort);
with ViewPort do begin
ScaleX:=(X2-X1)/(b-a);
ScaleY:=(Y2-Y1)/(MaxFun-MinFun);
end;
end;
SetColor(ColorGr);
X:=a;
Y:=F(X);
Xs:=Trunc((X-a)*ScaleX);
Ys:=GraphSizeY-Trunc((Y-MinFun)*ScaleY);
PutPixel(Xs, Ys, ColorGr);
X:=X+dArg;
while X<b do begin
Y:=F(X);
Xs:=Trunc((X-a)*ScaleX);
Ys:=GraphSizeY-Trunc((Y-MinFun)*ScaleY);
LineTo(Xs, Ys);
X:=X+dArg;
end;
END;
{BEGIN}
END.
Область определения функции y=3-2/x-3/(x*x) вся числовая ось, за исключением x=0.
Задание 5. Получить мультфильм «Круги на воде», используя семь концентрических окружностей. Центры окружностей должны быть совмещены с центром экрана, а радиусы изменятся от 40 до 82 пиксел, увеличиваясь на 7 пиксел с каждой следующей окружностью. Иллюзия движения должна создаваться с последовательной сменой цветов всех окружностей, начиная с внутренней и кончая внешней. Процесс смены цветов следует повторить не менее десяти раз.
Составим блок-схему алгоритма
Составим программу на языке Pascal
program lr5;
uses graph,crt;
var Gd,Gm,i,x,y: integer;
begin
Gd:=Detect;
initgraph(Gd, Gm, '');
randomize;
i:=40;
x:=random(300);
y:=random(300);
k:=0;
while k<=10 do
begin
circle(x,y,i);
setcolor(random(10));
k:=k+1;
i:=i+7;
if i=89 then i:=40;
end;
readkey;
closegraph;
end.
Задание 6. Составить процедуру, результатом работы которой является символ, заданный при обращении к процедуре, если этот символ не является буквой, и соответствующая строчная (малая) буква в противном случае.
Составим блок-схему алгоритма
Составим программу на языке Pascal
program lr6;
uses crt;
var
f:text;
n,i,max:word;
bol:boolean;
xxx:char;
st,st2:string;
function MCase(s: char): char;
var
i: Integer;
begin
MCase := s;
case s of
'A'..'Z','А'..'Я': MCase := Chr(Ord(s) + 32);
'Ё': MCase := 'ё';
end;
end;
begin
clrscr;
writeln('Введи символ:');
readln(xxx);
writeln('Полученный символ:');
writeln(MCase(xxx));
readkey;
end.
Введи символ:
F
Полученный символ:
f