Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Процедуры и функции в паскале

Автор: Novichok92 6.11.2009 14:45

Это решение задачи через процедуры и функции: "Даны натуральное число n, действительное число x и действительная матрица размера nx2n. Получить последовательность b1,..., bn из нулей и единиц, где bi =1, если элементы i-ой строки матрицы не превосходят x и bi =0 в противном случае"

	 
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
matr=array[1..100,1..200] of real;
mas=array[1..100] of integer;
var i,j, n:integer;
x:real;
a:matr;
b:mas;

procedure vivod(n:integer;var ain:matr);
var iin,jin:integer;
begin
Randomize;
for iin:=1 to n do
for jin:=1 to 2*n do
a[iin,jin] := Random;
for iin:=1 to n do begin
for jin:=1 to 2*n do
Write(' ' ,ain[iin,jin]:4);
WriteLn;
end;
end;

procedure decide(x:real;n:integer;ain:matr;var bin:mas);
var iin,jin:integer;
begin
for iin:=1 to n do
for jin:=1 to 2*n do
if ain[iin,jin]<=x then bin[iin]:=1
else
begin
bin[iin]:=0;
break;
end;
end;

begin
write('n=');
readln(n);
write('x=');
readln(x);
vivod(n,a);
decide(x,n,a,b);
writeln;
writeln('Result:');
for i:=1 to n do
write(b[i]:2);
readln;
end.




Подскажите,правильно ли решена задача???Если не верно,то помогите пожалуйста исправить!!!! give_rose.gif

Автор: Lapp 6.11.2009 15:47

Цитата(Novichok92 @ 6.11.2009 10:45) *
Подскажите,правильно ли решена задача???Если не верно,то помогите пожалуйста исправить!!!!

Верно, в том смысле, что ответ верный выдает. Но есть одно замечание: не нужно присваивать единицу во внутреннем цикле, нужно один раз перед ним. Вот так:
procedure decide(x:real;n:integer;ain:matr;var bin:mas);
var
iin,jin:integer;
begin
for iin:=1 to n do begin
bin[iin]:=1;
for jin:=1 to 2*n do
if ain[iin,jin]>x then begin
bin[iin]:=0;
break;
end;
end
end;

И Randomize нужно делать только один раз в главной программе.
Про рациональность разбиения на процедуры я пока промолчу.

Автор: volvo 6.11.2009 16:06

Novichok92, если вдруг ты будешь сдавать эту программу, и тестировать ее надо будет на Турбо-Паскале, а не в Дельфи, то она у тебя не откомпилируется: вещественная матрица 100*200 имеет недопустимо большой размер для этого компилятора. Это так, на всякий случай, информация к размышлению...