Delphi 7 - generace náhodných čísel do matice – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Delphi 7 - generace náhodných čísel do matice – Delphi – Fórum – Programujte.comDelphi 7 - generace náhodných čísel do matice – Delphi – Fórum – Programujte.com

 

pigin0
Duch
3. 12. 2013   #1
-
0
-

Dobrý den,

potřeboval bych poradit, jak se generují náhodná čísla do matice. Nějaký základ jsem udělal, nejprve jsem si matici připravil, což funguje, ale když zmáčknu tlačítko "generuj" tak se v matici nic neobjeví a já nevím kde jsem udělal chybu. Děkuji.

type

Tmatice= array[1..100,1..100] of integer;
var
  Form1: TForm1;

n,m:integer;
a:Tmatice;

b:array[1..1000,1..1000] of integer;

procedure TForm1.pripravClick(Sender: TObject);
var m,n:integer;
begin
m:=strtoint(edm.Text);
n:=strtoint(edn.Text);
sg.RowCount:=m;
sg.ColCount:=n;
sg.Width:=n*sg.DefaultColWidth+n+4;
sg.Height:=m*sg.DefaultRowHeight+m+4;
sg.Visible:=true;
end;

procedure TForm1.generujClick(Sender: TObject);
var j,i:integer;
begin
randomize;   // spuštění generátoru náhodných čísel
for i:=1 to n do
for j:=1 to n do
begin
a[j,i]:=random(10);  // náhodné číslo
sg.Cells[j,i]:=inttostr(a[j,i]);
end;

Nahlásit jako SPAM
IP: 77.104.233.–
Honzc0
Stálý člen
4. 12. 2013   #2
-
0
-

#1 pigin
To bude nejspíš tím, že v proceduře generujClick používáš globální proměnné m,n (i když tam máš chybu, místo m máš 2xn-to první for i:=1 to n do změň na for i:=1 to m do) a ty jsou zatím nastavené na nulu, a to proto, že v proceduře pripravClick používáš ty samé proměnné, ale pouze uvnitř té procedury. Odstranění bude jednoduché. V proceduře pripravClick odstraň řádek var m,n:integer; a pak se už použijí m,n jako globální.

Navíc si myslím, že StringGrid počítá řádky i sloupce od nuly a tak jak to máš napsané,(pokud tedy máš FixedCol a FixedRow nastavené na 1) tak ti to bude plnit matici, která bude mít pouze m-1 řádků a n-1 sloupců. Tedy chtělo by to změnit

sg.RowCount:=m; a sg.ColCount:=n; na sg.RowCount:=m+1; sg.ColCount:=n+1;

a také sg.Width:=n*sg.DefaultColWidth+n+4; a sg.Height:=m*sg.DefaultRowHeight+m+4; na

           sg.Width:=(n+1)*sg.DefaultColWidth+n+4; a sg.Height:=(m+1)*sg.DefaultRowHeight+m+4;

Pokud ovšem máš FixedCol a FixedRow nastavené na 0, pak proceduru pripravClick nech jak je a potom v proceduře generujClick počítej m i n od 0 do m-1 respective do n-1.

Nahlásit jako SPAM
IP: 93.181.78.–
pigin
~ Anonymní uživatel
6 příspěvků
4. 12. 2013   #3
-
0
-

#2 Honzc
Děkuji za pomoc,

ještě bych tady měl jeden problém. Mám za úkol s maticí udělat toto, ale nevím si rady. Děkuji za pomoc.

1)Matici vytiskněte po řádcích ve tvaru tabulky
2)Vytvořte součty sudých čísel v každém sloupci.
   Pro součet těchto čísel použijte proceduru nebo funkci

Nahlásit jako SPAM
IP: 195.113.129.–
pigin
~ Anonymní uživatel
6 příspěvků
4. 12. 2013   #4
-
0
-

tak na součet čísel v jednotlivých sloupcí jsem přišel, ale potřeboval bych poradit jak udělat, aby se ve sloupcích sčítaly pouze sudá čísla..dodávám zdrojový kód k součty řádků. díky

function soucet(i,n:integer;var a:Tmatice):integer;
var j,s:integer;
begin
s:=0;
for i:=1 to m do
s:=s+a[i,j];
soucet:=s;
end;

procedure Tsgs.Button3Click(Sender: TObject);
var i,j,s:integer;
begin
sgs.Visible:=true;
for i:=1 to m do
for j:=1 to n do
a[i,j]:=strtoint(sg.Cells[j-1,i-1]);

for j:=1 to n do
  begin
  s:=soucet(j,n,a);
  sgs.Cells[j-1,0]:=inttostr(s);
  end;

Nahlásit jako SPAM
IP: 77.104.233.–
4. 12. 2013   #5
-
0
-

sudá čísla jsou dělitelná 2 beze zbytku. 

http://programujte.com/clanek/2005041419-delphi-3-lekce/

hu

Nahlásit jako SPAM
IP: 195.178.67.–
pigin
~ Anonymní uživatel
6 příspěvků
4. 12. 2013   #6
-
0
-

#5 hlucheucho
děkuji za radu, ale potřeboval bych spíše vědět jak se to udělá v tomto konkrétním příkladu, aby se nesčítaly všechny čísla ve sloupečku , ale pouze sudá..nevím jak a kam se zadá jaký příkaz..děkuji

Nahlásit jako SPAM
IP: 77.104.233.–
miHan0
Návštěvník
5. 12. 2013   #7
-
0
-

#6 pigin
mno vždyť ti hlucheucho už napověděl všechno co potřebuješ vědět ...

Napiš podmínku, ve které budeš testovat, zda je číslo sudé (dělitelné 2 beze zbytku [použij funkci MOD]) pokud číslo podmínce bude vyhovovat, přičteš ho, pokud vyhovovat nebude, přičítat ho nebudeš ... snadné.

Nahlásit jako SPAM
IP: 46.13.193.–
Honzc0
Stálý člen
5. 12. 2013   #8
-
0
-

#4 pigin
Ta tvá funkce na součet je nějaká divná. Zadáváš do ní i a pak sním počítáš v cyklu. Naopak proměnná j je pořád nastavená na nulu, takže by mě zajímalo co vlastně sčítáš. Pokud chceš sčítat jednotlivé sloupce, pak to napiš takto (i s stím, že budeš sčítat jenom sudá čísla-to se dělá tak, že pokud číslo mod 2=0 tak je číslo sudé) 

function soucet(j:integer; var a:Tmatice):integer; //sčítá sudá čísla v řádku j
var i:integer;
begin
Result := 0;
for i := 1 to m do
  if a[i,j] mod 2=0 then
    Result := Result+a[i,j];
end;
Nahlásit jako SPAM
IP: 93.181.78.–
Honzc0
Stálý člen
5. 12. 2013   #9
-
0
-

V poznámce má být sčítá sudá čísla ve sloupci j.

Nahlásit jako SPAM
IP: 93.181.78.–
pigin
~ Anonymní uživatel
6 příspěvků
5. 12. 2013   #10
-
0
-

#8 Honzc
díky funguje to..

Nahlásit jako SPAM
IP: 77.104.233.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Generovani nahodnych cisel — založil jouda

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý