NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Tunndr
Člen
Avatar
Tunndr:10.6.2015 12:33

Dobrý den, potřeboval bych poradit s výpisem pole v pascalu. Program mi sice vypíše všechna čísla, která potřebuju ale někdy mezi ně vsadí nulu a některá napíše 2x. Díky za případné rady.

uses crt;
var i,j,m,n: integer;
matice: array[1..99,1..99] of integer;
S: array[1..99] of integer;
L: array[1..99] of integer;

procedure podprogram;
begin
randomize;
writeln('Matice:');
for i:=1 to m do
begin
for j:=1 to n do
begin
matice[i,j] := random(100);
write(' ',matice[i,j]);
end;
writeln;
end;
end;
begin
writeln('Zadej pocet radku: ');
readln(m);
writeln('Zadej pocet sloupcu: ');
readln(n);
writeln;
clrscr;
podprogram;
writeln;
begin
writeln('Liche prvky: ');
for i:=1 to m do
begin
for j:=1 to n do
begin
if matice[i,j] mod 2 = 0 then else L[i]:= matice[i,j];
write(' ',L[i]);
end;
end;
writeln;
writeln;
writeln('Sude prvky: ');
for i:=1 to m do
begin
for j:=1 to n do
begin
if matice[i,j] mod 2 = 0 then S[i]:= matice[i,j];
write(' ',S[i]);
end;
end;
readln;
end;
end.

Editováno 10.6.2015 12:36
 
Odpovědět
10.6.2015 12:33
Avatar
Odpovídá na Tunndr
Michal Haňáček:10.6.2015 13:56

Ahoj, ten kód sem prosímtě hoď ještě jednou a použij pro to nástroj pro "vkládání kódu" (takové ty dva listy s pluskem) - tohle nikdo číst nebude.

Nahoru Odpovědět
10.6.2015 13:56
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
Tunndr
Člen
Avatar
Tunndr:10.6.2015 14:01
uses crt;
var i,j,m,n,ps,pl: integer;
matice: array[1..99,1..99] of integer;
     S: array[1..99] of integer;
     L: array[1..99] of integer;

procedure podprogram;
begin
randomize;
writeln('Matice:');
for i:=1 to m do
    begin
    for j:=1 to n do
        begin
        matice[i,j] := random(100);
        write('  ',matice[i,j]);
        end;
        writeln;
    end;
end;
begin
writeln('Zadej pocet radku: ');
readln(m);
writeln('Zadej pocet sloupcu: ');
readln(n);
writeln;
clrscr;
podprogram;
writeln;
for i:=1 to m do
    begin
    for j:=1 to n do
    begin
    if matice[i,j] mod 2 = 0 then ps:=ps+1 else pl:=pl+1;
    end;
  end;

begin
writeln('Liche prvky: ');
for i:=1 to m do
    begin
    for j:=1 to n do
    begin
    if matice[i,j] mod 2 = 0 then else L[pl]:= matice[i,j];
    write('  ',L[pl]);
    end;
end;

writeln;
writeln;
writeln('Sude prvky: ');
for i:=1 to m do
    begin
    for j:=1 to n do
    begin
    if matice[i,j] mod 2 = 0 then S[ps]:= matice[i,j];
    write('  ',S[ps]);
    end;
end;
readln;
end;
end.
Editováno 10.6.2015 14:03
 
Nahoru Odpovědět
10.6.2015 14:01
Avatar
Odpovídá na Tunndr
Michal Haňáček:10.6.2015 14:07

Teď nemám moc času ten zdroják zkoumat, ale v "Lichých prvcích" ti na první pohled chybí THEN větev ...

Nahoru Odpovědět
10.6.2015 14:07
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
Tunndr
Člen
Avatar
Tunndr:10.6.2015 14:09

To tam mám schválně, v tom podle mě chyba nebude

 
Nahoru Odpovědět
10.6.2015 14:09
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Tunndr
David Novák:10.6.2015 14:46

Co takhle použít debbuger? ;)

Nahoru Odpovědět
10.6.2015 14:46
Chyba je mezi klávesnicí a židlí.
Avatar
Tunndr
Člen
Avatar
Tunndr:10.6.2015 14:47

Už mi to někdo radil, ale vůbec netuším jak se to používá ani k čemu slouži.

 
Nahoru Odpovědět
10.6.2015 14:47
Avatar
Tunndr
Člen
Avatar
Tunndr:10.6.2015 15:02

Program by měl vložit do sudého pole sudá čísla a do lichého pole lichá čísla, to sice děla ale je tam chyba. Když je např. první číslo sudé tak se v sudém poli vypíše na prvním místě ale zároveň v lichém poli se vypíše jako první nula, když je další číslo sudé tak se to číslo vypíše v sudém poli na druhém místě a v lichém poli se na druhém místě zopakuje to z prvního.
např:

Matice
41 78
25 20

Sudé pole:
0 78 78 20

Liché pole:
41 41 25 25

Neví někdo co s tím?

Editováno 10.6.2015 15:05
 
Nahoru Odpovědět
10.6.2015 15:02
Avatar
martanec
Člen
Avatar
Odpovídá na Tunndr
martanec:10.6.2015 15:55

problem je s poliami L[] a S[]...

for i:=1 to m do
     begin
     for j:=1 to n do
     begin
     if matice[i,j] mod 2 = 0 then else L[pl]:= matice[i,j];
     write('  ',L[pl]);
     end;
 end;

if matice[i,j] mod 2 = 0 then else L[pl] matice[i,j]; ... nepracujes s celym polom, ale vzdy len zmenis hodnotu posledneho prvku pola a nasledne tento prvok vypises. Takze aj ked narazis na cislo v matici, ktore je parne/sude, do L[pl] sa nezapise ziadna hodnota,no v nasledujucom kroku vypisujes hodnotu L[pl]. (Ak doteraz nebola najdena neparna/licha hodnota, vypise sa 0, inak naposledy najdena neparna/licha hodnota)

to iste plati aj pre S[ps]

hadam som to popisal zrozumitelne :)

 
Nahoru Odpovědět
10.6.2015 15:55
Avatar
Tunndr
Člen
Avatar
Tunndr:10.6.2015 16:03

Nevypsal by jste mi tady jak to udělat? Pořád nevím jak na to :/

 
Nahoru Odpovědět
10.6.2015 16:03
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Tunndr
David Novák:10.6.2015 16:12

Tak jsem kvůli tobě oprášil Pascal ;)

uses crt;

var i, j, m, n, ps, pl: integer;
matice: array[1..99,1..99] of integer;
     S: array[1..99] of integer;
     L: array[1..99] of integer;

 procedure podprogram;
 var i,j :integer;
 begin
 randomize;
 writeln('Matice:');
 for i := 1 to m do
     begin
     for j := 1 to n do
         begin
         matice[i,j] := random(100);
         write('  ',matice[i,j]);
         end;
         writeln;
     end;
 end;

 begin
  ps := 0;
  pl := 0;

  write('Zadej pocet radku: ');
  readln(m);
  write('Zadej pocet sloupcu: ');
  readln(n);

  writeln;
  clrscr;
  podprogram;
  writeln;

  for i := 1 to m do
  begin
   for j := 1 to n do
     begin
      if matice[i,j] mod 2 = 0 then
        begin
          ps := ps + 1;
          S[ps] := matice[i,j];
        end
      else
        begin
          pl:= pl + 1;
          L[pl] := matice[i,j];
        end;
     end;
  end;

  writeln('Liche prvky: ');
  for i := 1 to pl do
    write('  ',L[i]);

  writeln;
  writeln;
  writeln('Sude prvky: ');
  for i := 1 to ps do
    write('  ',S[i]);

  readln;
end.
Editováno 10.6.2015 16:13
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
10.6.2015 16:12
Chyba je mezi klávesnicí a židlí.
Avatar
Tunndr
Člen
Avatar
Tunndr:10.6.2015 16:14

Díky moc! Vážně jsi mi pomohl!

 
Nahoru Odpovědět
10.6.2015 16:14
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Tunndr
David Novák:10.6.2015 16:17

Abych to vysvětlil.. Měl jsi úplně zybtečný a chybný přístup ;)

V prvním cyklu jsi počítal sudé a liché prvky - to bylo ještě OK. Pak jsi tam ale nějak zběsile přiřazoval nějaké šílenosti :D Zkus si ten tvůj algoritmus rozepsat na papír, co vůbec dělá ;)

Moje řešení je následovné - máš čítač sudých a lichých čísel (ty musíš mimochodem na začátku preventivně vynulovat). Rozeznávání je stejné - ale když už poznáš, co je to za číslo, tak ho rovnou uložíš do toho pole (na index daný čítačem).. na závěr jen vypíšeš (od 1 do počet_sudých etc.)

Chápeš?

Edit: Jo a v procedurách zásadně používej lokální proměnné - je to dobrý zvyk, co ve složitějších programech ušetří tunu starostí ;)

Editováno 10.6.2015 16:18
Nahoru Odpovědět
10.6.2015 16:17
Chyba je mezi klávesnicí a židlí.
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.