NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Tunndr
Člen
Avatar
Tunndr:14.5.2015 23:27

Dobrý den, ve škole jsem dostal za úkol napsat 6 programů, ale vážně v tom plavu a nevím si rady. Kdyby mi někdo pomohl, byl bych mu opravdu vděčný.

  1. Dvě matice 5x5 naplnit náhodnými čísly od 0-9, sečtěte navzájem si odpovídající prvky z těchto matic a uložte do třetí matice, všechny matice zobrazit
  2. Matici MxN naplnit náhodnými čísly 1-99, sudé prvky vlož do pole S, liché prvky do pole L, matici a prvky polí S a L zobraz
  3. Matici MxN naplnit náhodnými čísly 1-99, sudé prvky zmenší na polovinu, liché zdvojnásobí, zobraz matici před a po úpravách
  4. Matice MxM naplnit náhodnými čísly 1-99, vypiš prvky vedlejší diagonály, vypočti jejích součet, zobraz matici
  5. Matici MxN naplnit náhodnými čísly 1-99, urči součet prvků prvního řádku a součet posledního řádku, zjisti který součet je vyšší, zobraz matici
  6. Matici MxN naplnit náhodnými čísly 1-99, urči průměr lichých prvků, a průměr sudých prvků

V každém programu musí byt podprogram, ale nikdy mi to s ním nefunguje. Zatím mám tohle:

uses Crt;
const
m = 5;
n = 5;
var i,j,c: Integer;
    m1,m2,m3: array [1..5] of array [1..5] of Integer;
begin
  WriteLn(' --- Soucet odpovidajicich si prvku matic ---');
  WriteLn;
  Randomize;
  for i := 1 to 5 do
    for j := 1 to 5 do
    begin
      c := Random(10); //nahodne cislo od 0 do 9
      m1[i,j] := c;
      c := Random(10);
      m2[i,j] := c;
      m3[i,j] := m1[i,j]+m2[i,j];
    end;
  WriteLn;
  WriteLn(' matice 1:');
  for i := 1 to 5 do
  begin
    for j := 1 to 5 do
      Write('  ',m1[i,j]:2);
    WriteLn;
  end;
  WriteLn;
  WriteLn(' matice 2:');
  for i := 1 to 5 do
  begin
    for j := 1 to 5 do
      Write('  ',m2[i,j]:2);
    WriteLn;
  end;
  WriteLn;
  WriteLn(' matice 3:');
  for i := 1 to 5 do
  begin
    for j := 1 to 5 do
      Write('  ',m3[i,j]:3);
    WriteLn;
  end;
  ReadLn;
end.
 
Odpovědět
14.5.2015 23:27
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Tunndr
Martin Dráb:15.5.2015 0:11

Zdravím,

co znamená výraz "nefunguje mi to"? Vždy piš, podle čeho soudíš, že ti to nefunguje (že to třeba píše chybyovou hlášku, nebo to špatně zobrazuje data atd.).

Jinak, zápis

array [1..5] of array [1..5] of Integer;

lze zkrátit na

array [1..5, 1..5] of Integer;

V zadání píšou, že máš vytvořit šest programů, takže to celé nemusíš cpát do jednoho (velkého) programu. Fakt, že v každém z nich musí být podprogram, bude splněn celkem triviálně, protože se ti bude hodit si udělat třeba podprogram na výpis matice (ale nejen na to). Ono ty jednotlivé podrpogramy pak půjdou celkem dobře zrecyklovat v dalších programech.

Nahoru Odpovědět
15.5.2015 0:11
2 + 2 = 5 for extremely large values of 2
Avatar
Tunndr
Člen
Avatar
Odpovídá na Martin Dráb
Tunndr:15.5.2015 0:29

Pascal vůbec neovládám, takže jsem tam ten podprogram určitě vložil špatně. Ten program co jsem vložil výš jsem složil s toho co jsem našel na internetu. Potřebuji poradit s tím jak tam ty podprogramy vložit, a ještě s těmi operacemi mezi maticemi. :/

 
Nahoru Odpovědět
15.5.2015 0:29
Avatar
Tunndr
Člen
Avatar
Tunndr:15.5.2015 1:05

Kdyby mi někdo pomohl jích pár vyřešit, zachránil by mě :/

 
Nahoru Odpovědět
15.5.2015 1:05
Avatar
Martin Dráb
Tvůrce
Avatar
Martin Dráb:15.5.2015 1:33

Hm, sice jsem se nedozvěděl, jakým způsobem ses pokoušel ten podprogram napsat a použít, ale nevadí. Zkusím dát příklad, jak se to obvykle dělává.

Předpokládám, že N, o kterém se zmiňuje zadání, je konstanta definovaná ve zdrojáku, například:

const
  N = 10;

Pak si můžeš zadefinovat datové typy TMaticeNxN a TPolePrvkuNxN.

Type
  TmaticeNxN = Array [1..N,1..N] Of Integer;
  TPolePrvkuNxN = Array [1..N*N] Of Integer;

A pak můžeš mít třeba podprogram pro naplnění zadané matice náhodnými čísly:

Procedure NaplnMatici(Var M:TMaticeNxN; Min:Integer; Max:Integer);
Var
  I, J : Integer;
begin
For J := 1 To N Do
For I := 1 To N Do
  M[I, J] := Random(Max - Min + 1) + Min;
end;

A podrpogram pro výpis matice:

Procedure VypisMatici(Var M:TMaticeNxN);
Var
  I, J : Integer;
begin
For I := 1 To N Do
  begin
  For J := 1 To N Do
    Write(' ', M[I, J]);

  Writeln;
  end;
end;

A podrpogram pro sečtení matic A a B do matice C:

Procedure SetciMatice(Var A:TMaticeNxN; Var B:TMaticeNxN; Var C:TMaticeNxN);
Var
  I, J : Integer;
begin
For I := 1 To N Do
For J := 1 To N Do
  C[I, J] := A[I, J] + B[I, J];
end;

Tyhle podprogramy ti přímo dávají stavební kameny, jak vyřešit bod (1) zadání. Konkrétně takto:

...
Const
  N = 5;

Type
...
Var
  A : TMaticeNxN;
  B : TMaticeNxN;
  C : MaticeNxN;
begin
NaplnMatici(A, 0, 9);
naplnMatici(B, 0, 9);
SectiMatice(A, B, C);
Writeln('Matice A:');
VypisMatici(A);
Writeln('Matice B:');
VypisMatici(B);
Writeln('Matice C:');
VypisMatici(C);
end.

Netvrdím, že tohle řešení je nějak efektivní, ale vystačí si s celkem základními vlastnostmi jazyka. Pro splnění bodu (2) budeš muset napsat podprogram, který do pole L a S (mohou být typu TPoleprvkuNxN) načte liché a sudé prvky. Ty podrpogramy se budou v zásadě dost podobat těm, co jsem tu uváděl jako příklad.

P.S.
Hádám správně, že se blíží zkouška/zápočet?

Nahoru Odpovědět
15.5.2015 1:33
2 + 2 = 5 for extremely large values of 2
Avatar
Tunndr
Člen
Avatar
Tunndr:15.5.2015 1:43

Zkouška ne, jen musíme každý odevzdat 1 program,diagram a popis programu, abychom prošli do dalšího ročníku, a já blbec jsem si vzal programy od dalších 5ti lidí, to jen proto že jsem zvládal základy jazyka a myslel jsem si že tohle zvládnu taky ;( A teď tady nad tím sedím a vůbec si nevím rady

 
Nahoru Odpovědět
15.5.2015 1:43
Avatar
Michalisko Pascalos:19.4.2017 10:49

Zdravím potreboval bych pomoct s UKOLEM, jsem byl nemocny 2 mesice a nepochytil jsem ukol...muzete mi prosim napsat jeden tenhle program? ZADÁNÍ: Matice MxM naplnit nahodnymi cisly od1 do 99,vypis prvky vedlejsi DIAGONALY, vypocti jejich soucet pomoci podprogramu,zobraz vysledek a matici.

 
Nahoru Odpovědět
19.4.2017 10:49
Avatar
Odpovídá na Michalisko Pascalos
Michal Haňáček:19.4.2017 12:40

Mno, duplicitně to tady na síti být asi nemusí, že?

Ale k tvému úkolu. Jde o triviální úkol, který by jsi s trochou snahy (když to hooodně přeženu) měl za víkend hotový. A protože za lenost se platí, ptám se. Co za to"?

Nahoru Odpovědět
19.4.2017 12:40
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Michal Haňáček
Martin Dráb:19.4.2017 15:32

Bohužel už asi nic.

Nahoru Odpovědět
19.4.2017 15:32
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Michal Haňáček:19.4.2017 15:43

Obětoval ses? :D

Nahoru Odpovědět
19.4.2017 15:43
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Michal Haňáček
Martin Dráb:19.4.2017 15:50

To víš, povelikonoční akce :-).

Nahoru Odpovědět
19.4.2017 15:50
2 + 2 = 5 for extremely large values of 2
Avatar
Mario Cavalcante:4.4.2020 13:49

Dobrý den,
Ve škole jsem dostal úkol: Matici MxM naplnit náhodnými čísly od -10 do 10, pomocí podprogramu určit průměry prvků na hlavní diagonále, prvků pod hlavní diagonálou a prvků nad hlavní diagonálou, pomocí procedury vypiš výsledky sestupně. Zobraz matici.
Vůbec nevím jak na to, takže bych rád přivítal nějakou radu či pomoc
Děkuji!

 
Nahoru Odpovědět
4.4.2020 13:49
Avatar
Odpovídá na Mario Cavalcante
Matúš Olejník:4.4.2020 16:45

Ahoj, založ na to vlastné vlákno a rád ti pomôžem :) Neriešme tvoj problém v 3 roky starom príspevku v komentároch aj keď je tu celkom dosť už naznačené :) A rovno by si mohol poslať hoci aj minimum tvojho pokusu.

Editováno 4.4.2020 16:45
Nahoru Odpovědět
4.4.2020 16:45
/* 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 13 zpráv z 13.