• Работа с массивами в Pascal

Текст задания

Сформировать одномерный массив из элементов массива двумерного по указанному в варианте правилу и упорядочить элементы созданного массива. Числа M и N вводятся с клавиатуры. Для задания исходной матрицы предусмотреть два варианта: ввод с клавиатуры и ввод с помощью датчика случайных чисел. Возможность выбора пользователем варианта ввода матрицы должна быть предусмотрена в тексте программы.

Элементов строк, стоящих на четных местах. Отсортировать массив по убыванию

Решение

Ниже представлен исходный код программы на языке Pascal. Также имеется оформленный отчет в Word, который содержит блок-схему алгоритма работы программы, описание используемых переменных и скриншоты результатов работы программы.

Исходный код программы
Program Kursovaya;

Uses crt, graph;

Type
	coordinates = (x, y);
	extremums = (min, max);

Var
	dataExists: boolean;
	activeMenuItem, i: integer;
	inputStep: real;
	input: array[coordinates, extremums] of real;
	key: char;
	s: string;
{------------------------------}
Function f (x: real): real;

Begin
	f :=  (x * x * x + 15) / (2 * x + 4);
End;
{------------------------------}
Procedure BuildMenu;

Const
	menuItems: array[0..4] of string = (
	'Vvod', 'Raschet', 'Grafik', 'O programme', 'Vyhod');

Begin
	ClrScr;
	For i := 0 to 4 do begin
		If i = activeMenuItem then TextColor(Cyan)
		Else TextColor(White);
		WriteLn(menuItems[i]);
	end;
End;
{------------------------------}
Procedure InputMenu;

Var 
	errorCode: integer;
	k: extremums;

Begin
	ClrScr;

	For k := min to max do input[x][k] := 0;
	inputStep := 0;
	k := min;
	i := 0;

	While (inputStep = 0) do begin

		If (i < 2) then Write('Vvedite X', (i + 1), ': ')
		Else Write('Vvedite shag: ');
		ReadLn(s);
		
		If (i < 2) then begin
			Val(s, input[x][k], errorCode);
			If input[x][k] <> -2 then input[y][k] := f(input[x][k]);
		end
		Else Val(s, inputStep, errorCode);
		
		If errorCode <> 0 then WriteLn('Vvedite chislo.')
		Else If input[x][k] = -2 then WriteLn('Funkciya ne opredelena v to4ke -2.')
		Else If (i = 1) and (input[x][min] >= input[x][max]) then WriteLn('X2 doljno byt bolshe X1.')
		Else If (i = 2) and (inputStep <= 0) then WriteLn('Shag doljen byt bolshe 0.')
		Else begin
			Inc(i);
			If (k < max) then Inc(k);
		end
	end;
	dataExists := true;

End;
{------------------------------}
Procedure Calc;

Var
	xt: real;

Begin
	xt := input[x][min];
	While (xt <= input[x][max]) do begin
		ClrScr;
		For i := 0 to 15 do begin
			If xt <> -2 then WriteLn(xt:8:3, '    ', f(xt):8:3)
			Else WriteLn(xt:8:3, '    ', 'Ne opredelena');
			xt :=  xt + inputStep;
			If (xt > input[x][max]) then break;
		end;
		key := ReadKey;
		If key = #27 then break; {Esc}
	end;
End;
{------------------------------}
Procedure BuildGraph;

Const
	step: real = 0.1;

Var
	gd, gm: integer;
	xt: real;
	display: array[coordinates, extremums] of integer;
	scale: array[coordinates] of real;

Begin
	gd := Detect;
	InitGraph(gd, gm, '');

	{Raschet ramki}
	display[x][min] := Round(0.1 * GetMaxX);
	display[x][max] := Round(0.9 * GetMaxX);
	display[y][min] := Round(0.1 * GetMaxY);
	display[y][max] := Round(0.9 * GetMaxY);

	{Raschet min/max znachenii}	
	If input[x][max] < -2 then begin
		input[y][min] := f(input[x][max]);
		input[y][max] := f(input[x][min]);
	end
	Else If input[x][min] > 2 then begin
		input[y][min] := f(input[x][min]);
		input[y][max] := f(input[x][max]);
	end
	Else If (input[x][min] > -2) and (input[x][max] < 2) then begin
		input[y][min] := f(input[x][max]);
		input[y][max] := f(input[x][min]);
	end
	Else begin
		input[y][min] := f(-2.1);
		If (Abs(input[x][max]) <= Abs(input[x][min])) then input[y][max] := f(input[x][min])
		Else input[y][max] := f(input[x][max]);
	end;
	
	scale[x] := (display[x][max] - display[x][min]) / (input[x][max] - input[x][min]);
	scale[y] := (display[y][max] - display[y][min]) / Abs(input[y][max] - input[y][min]);

	{Vyvod ramki i min/max znachenii}
	SetColor(White);
	Line(display[x][min], display[y][min], display[x][min], display[y][max]);
	Line(display[x][min], display[y][max], display[x][max], display[y][max]);
	Line(display[x][max], display[y][max], display[x][max], display[y][min]);
	Line(display[x][max], display[y][min], display[x][min], display[y][min]);
	If (input[y][min] <= 0) then begin
		Line(display[x][min], display[y][min] + Round(input[y][max] * scale[y]), 
			display[x][max], display[y][min] + Round(input[y][max] * scale[y]));
	end;
	If (input[x][min] < 0) AND (input[x][max] > 0) then begin
		Line(display[x][min] + Abs(Round(input[x][min] * scale[x])), display[y][min], 
			display[x][min] + Abs(Round(input[x][min] * scale[x])), display[y][max]);
	end;
	SetTextJustify(RightText, BottomText);
	Str(input[y][min]:5:1, s);
	OutTextXY(display[x][min], display[y][max], s);
	Str(input[y][max]:5:1, s);
	OutTextXY(display[x][min], display[y][min], s);
	SetTextJustify(CenterText, TopText);
	Str(input[x][min]:5:1, s);
	OutTextXY(display[x][min], display[y][max] + 2, s);
	Str(input[x][max]:5:1, s);
	OutTextXY(display[x][max], display[y][max] + 2, s);

	{Postroenie grafika}
	xt := Round(input[x][min] / step) * step;
	MoveTo(display[x][min], display[y][min] - Round((f(xt) - input[y][max]) * scale[y]));
	SetColor(Yellow);
	While xt < input[x][max] do begin
		xt := xt + step;
		If (Round(xt * 10) / 10) <> -2.0 then LineTo(display[x][min] + Round((xt - input[x][min]) * scale[x]),
			display[y][min] - Round((f(xt) - input[y][max]) * scale[y]))
		Else begin
			LineTo(display[x][min] + Round((-2 - input[x][min]) * scale[x]), display[y][max]);
			MoveTo(display[x][min] + Round((-2 - input[x][min]) * scale[x]), display[y][min]);
		end;
	end;

	ReadKey;
	CloseGraph;
End;
{------------------------------}
Procedure About;
Begin
	ClrScr;
	WriteLn('O programme');
	ReadKey;
End;
{------------------------------}
Begin
	activeMenuItem := 0;
	dataExists := false;
	BuildMenu;

	Repeat
		key := ReadKey;
		If key = #0 then begin
			key := ReadKey;
			Case key of
				#72: begin {Strelka vverh}
					Dec(activeMenuItem);
					If activeMenuItem < 0 then activeMenuItem := 4;
				end;
				#80: begin {Strelka vniz}
					Inc(activeMenuItem);
					If activeMenuItem > 4 then activeMenuItem := 0;
				end;
			end;
		end
		Else begin
			If key = #13 then {Enter}
			Case activeMenuItem of
				0: InputMenu;
				1: If dataExists then Calc;
				2: If dataExists then BuildGraph;
				3: About;
				4: Break;
			end;
		end;
		BuildMenu;
	Until key = #27; {Esc}
End.

Написать отзыв

Внимание: HTML не поддерживается! Используйте обычный текст!
    Плохо           Хорошо

Работа с массивами в Pascal

  • 100.00 р.



Теги: Pascal

Не подошла работа?

Узнайте стоимость написания работы по Вашему заданию

(это быстро и бесплатно)

Узнать стоимость

Спасибо, не надо