Jump to content
Prosíme všetkých užívateľov, ktorý sa chcú opätovne pripojiť na discord aby znovu spárovali svoje účty kliknutím na "Discord" v navigácií a pripojili sa na server Read more... ×
  • 0
Andreyy

pomoc Pascal - naplnění pole z matice

Dotaz

Ahoj, potřeboval bych poradit s jednou věcí kterou dělám do školy. Mám vytvořit program který naplní matici MxM od -9 do +9 (tohle už máme hotové), dále program určí počet nul kolik se v matici nachází (to mám také hotové) a roztřídí do dvou polí na kladná a záporná čísla (a zde je už můj problém).

První dvě věci se mi podařilo udělat, ale roztřídit na kladná a záporná čísla už nevím jak udělat. Zkoušel jsem to zatím pouze roztřídit na kladné čísla přes jednorozměrné pole, ale nevím jak dál po vyhodnocení podmínky když je číslo z matice větší než 0. Mám tam počítadlo pk (počet kladných) a přiřazení a[i,j] ke kl[] a tam právě nevím co do [ ] napsat.

Zkratka potřebuji to roztřídit na kladné čísla, něco tam už je co jsem začal ale nevím zda je to správně. 😄 Díky za každou pomoc.

 

program matice;
uses crt;
var a:array[1..100,1.100]of integer;
    kl:array[1.100]of integer;
    m,j,i,pn,pk:integer;
begin
clrscr;
write('Zadej velikost matice: ')
readln(m);
writeln;
randomize;
pn:=0;
pk:=0;
for i:=1 to m do for j:=1 to m do a[i,j]:=random(19)-9;
for i:=1 to m do begin
                 for j:=1 to m do write[a[i,j]:3);
                 writeln;
                 end;
for i:=1 to m do for j:=1 to m do begin
                                  if a[i,j]=0 then begin
                                                   pn:=pn+1;
                                                   end;
                                  end;
for i:=1 to m do for j:=1 to m do begin
                                  if a[i,j]>0 then begin
                                                   pk:=pk+1;
                                                   a[i,j]:=kl[];
                                                   end;
                                   end;
for i:=1 to pk do write('Kladne cisla: ',kl[]);
writeln('Pocet nul je:',pn);
readln;
end.

 

Edited by Andreyy

Sdílet tento příspěvek


Link to post
Share on other sites

2 odpovědí na tuto otázku

Recommended Posts

  • 1

Dúfam, že sa to aspoň skompiluje, Pascal som dlho nevidel 😄 Myšlienka je taká, že v pk si držíš počet zatiaľ nájdených kladných čísel a do poľa kl tie kladné čísla ukladáš. Na pozícii kl bude i-té nájdené kladné číslo v matici, teda v kl[1] bude 1. nájdené kladné číslo, v kl[2] druhé, ... (dúfam, že si to pamätám správne a Pascal indexuje od 1)

Inak čo sa týka názvov premenných, jednopísmenkové premenné (s výnimkou zaužívaných i, j v cykloch...) sú zlo. Kľudne použi dlhší názov, aby človek, čo bude po tebe kód čítať, tušil, čo tá premenná robí aj bez toho, že by hľadal všetky jej výskyty. 

Spoiler

for i := 1 to m do 
    for j := 1 to m do 
    begin
        if a[i, j] > 0 then 
        begin 
            pk := pk + 1;
            kl[pk] := a[i, j];
        end;
    end;

write('Kladne cisla: ');
for i := 1 to pk do
    begin
    	write(kl[i]);
        write(' ');
    end;

 

Záporné čísla potom môžeš riešiť veľmi podobne. Pravdepodobne na ne budeš potrebovať ďalšie pole a ďalšiu premennú, do ktorej si budeš ukladať počet zatiaľ nájdených záporných čísel (niekoho by napadlo túto premennú vynechať a počet zatiaľ nájdených záporných počítať ako (i - 1) * m + j - pk [počet zatiaľ prejdených čísel - počet kladných], lenže nevieme, koľko bolo zatiaľ nájdených núl [čo nie je ani kladné ani záporné], takže by to zrejme nefungovalo a táto premenná bude potrebná).

Edited by DuFF
  • Děkuji (+1) 1
  • Líbí se mi to! (+1) 1

Sdílet tento příspěvek


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×