PASCAL

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Tunndr
nováček
Příspěvky: 17
Registrován: leden 14
Pohlaví: Muž
Stav:
Offline

PASCAL

Příspěvekod Tunndr » 12 kvě 2015 23:33

Zdravím, ve škole jsem dostal za úkol vytvořit 6 programu v pascalu, ale vůbec si nevím rady, pascal mi moc nejde. Kdyby byl někdo tak hodný a pomohl by mí, byl bych 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ů

Za případné rady budu vděčný, kód by pomohl nejvíc ;) . Díky

PS: V každém programů musí byt min. 1 podprogram.

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: PASCAL

Příspěvekod faraon » 13 kvě 2015 18:04

To jsou pěkné úlohy, dá se s nimi krásně vyhrát a přitom se moc nenadřít. A když už máš mít v každém programu minimálně jeden podprogram, tak bude ideální procedura na naplnění matice náhodnými čísly. Ta totiž může být ve všech programech úplně stejná, a jenom jí předáš matici, její rozměry a rozsah náhodných čísel. Tím si ušetříš hromadu práce!

A protože jde o matice, tak se bude pracovat se dvěma vnořenými cykly FOR, vždycky stejně, ve všech činnostech které s nimi budeš provádět. Kousek kódu na ukázku, takhle nějak by mohlo vypadat zobrazení matice na monitoru (což se také dá udělat jako procedura, a samozřejmě se zase použije ve všech těch programech, to už máš druhý podprogram):

Kód: Vybrat vše

for radek:=1 to M do
    begin
    for sloupec:=1 to N do
        begin
        write (matice[radek,sloupec],#9)
        end;
    writeln
    end;
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Tunndr
nováček
Příspěvky: 17
Registrován: leden 14
Pohlaví: Muž
Stav:
Offline

Re: PASCAL

Příspěvekod Tunndr » 14 kvě 2015 23:08

Poradil by jste mi jak to upravit abych měl pro vypsaní matic jen 1 podprogram? Díky

Kód: Vybrat vše

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.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: PASCAL

Příspěvekod faraon » 15 kvě 2015 00:26

Deklaruješ to jako pole polí? No, v Céčku se to vlastně dělá také tak, ale Pascal je jazyk trochu vyšší úrovně ;-)

Nauč se oddělovat jednotlivé bloky kódu od sebe prázdnými řádky, mezi souvisejícími částmi v jednom bloku jedním, mezi procedurami a funkcemi třemi. Uvidíš jak se program zpřehlední.

Takže podstatné je vědět jak předat pole proceduře (nebo co zadat do Google aby ti tuhle informaci našel!) To je v Pascalu trochu komplikovanější, ale existuje na to jednoduchá finta. Prostě si ho nadeklaruješ jako vlastní typ, a s ním pak pracuješ v celém programu:

Kód: Vybrat vše

type matrix=array[1..10,1..10] of integer;


Samozřejmě všechny matice musí mít naprosto stejný typ, jinak s tebou překladač bleskově vyběhne. Na druhou stranu ti ten typ ušetří psaní:

Kód: Vybrat vše

var matice1,matice2: matrix;


No a potom samotná procedura, všimni si že pole je ve skutečnosti větší než je potřeba, a zadává se jak velkou část chceš použít. To není nutné, můžeš mít pole přesně na míru:

Kód: Vybrat vše

procedure zobraz(pole:matrix; radku,sloupcu:integer);

          var r,s:integer;

          begin
          for r:=1 to radku do
              begin
              for s:=1 to sloupcu do
                  begin
                  write (pole[r,s],#9)
                  end;
              writeln
              end;
          end;


Použití procedury je jednoduché, předáš jí pole a počet řádků a sloupců které se mají zobrazit:

Kód: Vybrat vše

zobraz(matice1, M, N);
zobraz(matice2, M, N);


Úplně stejným způsobem můžeš vytvořit proceduru která ti pole naplní náhodnými čísly, jenom nezapomeň parametr pole místo hodnotou předat odkazem, pomocí klíčového slova var:

Kód: Vybrat vše

procedure vypln(var pole:matrix; radku,sloupcu:integer);
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti