IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
free
Člen
Avatar
free:22.4.2018 0:45

Potřeboval bych poradit jak tohle přesně udělat(matici mxn naplnit náhodnými čísly od 1 do 99,urči podprogramem součet prvku prvního sloupce a součet prvku posledního sloupce,zjisti který součet je nejnižši,zobraz matici)Tohle mám hotové prakticky se dá říct že všechno jen nevím jak s těmi podprogramy :/

program matice;
uses crt;
var a:array[1..10,1­..10] of integer;
m,n,i,j,s,r,s­ums,sumr:inte­ger;
begin
clrscr;
write('Zadej pocet radku matice:');
readln(m);
write('Zadej pocet sloupcu matice:');
readln(n);
randomize;
sums:=0;
sumr:=0;
write('Zadej sloupec matice pro soucet:');
readln(r);
if r>m then begin writeln('Zadej znovu cislo sloupce musi byt mensi nez ',m+1);
readln(r);
end;
write('Zadej sloupec matice pro soucet:');
readln(s);
if s>n then begin writeln('Zadej znovu cislo sloupce musi byt mensi nez ',n+1);
readln(s);
end;
for i:=1 to m do for j:=1 to n do a[i,j]:=random(99)+1;
for i:=1 to n do sumr:=sumr+a[i,r];
for i:=1 to m do sums:=sums+a[i,s];
for i:=1 to n do begin for j:=1 to n do write(a[i,j]:8);
writeln;
end;
writeln('Soucet prvku ',r,'. sloupce je:',sumr);
writeln('Soucet prvku ',s,'. sloupce je:',sums);
readln;
if sums>sumr
then
write('Prvni sloupec je mensi nez posledni')
else write('Posledni sloupec je mensi nez prvni');
writeln;
readln;
end.

 
Odpovědět
22.4.2018 0:45
Avatar
Matúš Olejník:22.4.2018 13:35

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.
Nahoru Odpovědět
22.4.2018 13:35
/* I am not sure why this works but it fixes the problem */
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.