Diskuze: PASCAL:Podprogramy
Zobrazeno 2 zpráv z 2.
Nie som nejako zbehlý v pascali ale tvojou úlohou by malo byť nemať celý kód na všetky tie podúlohy v hlavnej funkcii ale rozdeliť si to do viacerých procedúr alebo funkcií. Nenašiel som o tom články priamo tu na itnetwork tak niečo o funkciách nájdeš tu a o procedúrach tu a o dynamických poliach tu.
Ďalšia vec je pomenúvať si premenné nejako zmysluplne a nie ako máš ty "m,n,i,j,s,r,sums,sumr" keď som na to pozrel nevedel som vôbec ktorá na čo slúži a taktiež formátovanie kódu, dobré je napr. medzi úsekmi kódu ktoré spolu viacej súvisia vložiť medzeru alebo napr. pri priraďovaní hodnôt oddeliť kód medzerami - určite sa číta lepšie i := 1 než i:=1
Tu som aj narýchlo napísal nejaký kód snáď bude fungovať ako má Keďže aj matica aj jej rozmery
sú globálne premenné tak väčšina procedúr nepotrebovala mať žiadne
parametre.
program matice;
uses crt;
var
matrix : array of array of Integer;
rows, columns, i, j, sumOfFirstColumn, sumOfLastColumn : Integer;
//napln maticu nahodnymi prvkami
procedure initMatrix();
var i, j : Integer;
begin
for i := 0 to rows - 1 do begin
for j := 0 to columns - 1 do begin
matrix[i][j] := random(99) + 1;
end;
end;
end;
//vypis maticu
procedure printMatrix();
var i, j : Integer;
begin
for i := 0 to rows - 1 do begin
for j := 0 to columns - 1 do begin
write(matrix[i,j] : 8);
end;
writeln();
end;
end;
//vrat sucet prvkou daneho stlpca
function sumOfColumn(columnIndex : Integer) : Integer;
var sum, i : Integer;
begin
sum := 0;
for i := 0 to rows - 1 do begin
sum := sum + matrix[i][columnIndex];
end;
sumOfColumn := sum;
end;
//vrat index najmensieho prvku v poli
function findIndexOfMinValue(var size : Integer; arr : array of Integer) : Integer;
var minIndex, i : Integer;
begin
minIndex := 0;
for i := 1 to size - 1 do begin
if (arr[i] < arr[minIndex]) then begin
minIndex := i;
end;
end;
findIndexOfMinValue := minIndex;
end;
//zisti sucty vo vsetkych stlpcoch a vypis ten s najmensim
procedure findAndPrintMinSumOfColumns();
var i, j, minIndex : Integer;
sumsOfColumns : array of Integer;
begin
SetLength(sumsOfColumns, columns);
for i := 0 to columns - 1 do begin
sumsOfColumns[i] := sumOfColumn(i);
end;
minIndex := findIndexOfMinValue(columns, sumsOfColumns);
writeln('Najmensi sucet je ', sumsOfColumns[minIndex], ' v stlpci cislo ', minIndex + 1);
end;
begin
clrscr;
randomize;
write('Zadej pocet radku matice: ');
readln(rows);
write('Zadej pocet sloupcu matice: ');
readln(columns);
//dynamicke vytvorenie 2D pola pretoze na zaciatku sme nepoznali jeho rozmery
SetLength(matrix, rows, columns);
initMatrix();
printMatrix();
sumOfFirstColumn := sumOfColumn(0);
sumOfLastColumn := sumOfColumn(columns - 1);
writeln('Sucet prvkov v prvom stlpci = ', sumOfFirstColumn);
writeln('Sucet prvkov v poslednom stlpci = ', sumOfLastColumn);
if (sumOfFirstColumn = sumOfLastColumn) then begin
writeln('Sucty v prvom a poslednom stlpci sa rovnaju');
end
else if (sumOfFirstColumn > sumOfLastColumn) then begin
writeln('Sucet v prvom stlpci je vacsi ako v poslednom');
end
else begin
writeln('Sucet v poslednom stlpci je vacsi ako v prvom');
end;
findAndPrintMinSumOfColumns();
readln;
end.
Zobrazeno 2 zpráv z 2.