Dobrý den, pomohl by mi nekdo vyresit ulohu cislo 6???Dekuju mockrat!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!§
Fórum › Pascal
Matice
To Jura: Ne to ne, ale napadaj me dve reseni a nevim, jak to spravne udelat...zaprvy kazder radek a sloupec seradit a pak zjistit, jestli je tam patricna posloupnost nebo nejakej algoritmus a otestovat, jestli jsou tam ty hodnoty....
Mno, zřejmě řešíme každý jinou úlohu. Jedná se o úlohu č. 6 z dokumetu http://www.fm.tul.cz/prg/Ulohy/UlohyMatice.pdf?
Pokud ano, tak bych postupoval asi takto:
1) naplnit matici
2) zapamatovat si index řádku a sloupce, ve kterém se nachází maximální hodnota - normálně projdeš 2 rozměrné pole
3) prohodit třeba nejprve 1.řádek s řádkem, ve kterém je maximální hodnota
4) prohodit 1. sloupec s požadovaným sloupcem
5) radovat se
To tucna:promin, mozna me mas za nejvetsiho idiota, ale ja mam s tim fakt nejvetsi problem, ze si prectu zadani a vubec nevim cp mam delat...az pak mi to dojde..jsem rad, ze mi pomahas, ale nemusis na me porad utocit.ja vim, ze nejsem dobrej programator a asi nikdy nebudu, ale docela me to bavi a chtel bych se neco naucit, tak se mnou mej strpeni
Citát viz. Wikipedie
Příklad
Mějme skupinu tří různých prvků a,b,c.
Permutace těchto prvků představují skupiny abc, acb, bac, bca, cab, cba.
...ale předpokládám že víš co je permutace, to jen tak na okraj ;)
Tedy máš matici řádu N. Nechť N je 3. Tzn že je ta matice dvourozměrné pole 3x3. Teď musíš zkontrolovat zda jsou prvky každého sloupce, řádku, diagonály, permutací 1..N, tedy 1,2,3. Tzn. že řádek může vypdat např. takto - 1,3,2. Ale ne např. takto - 5,3,1 (5 už je větší než N).
To tucna: slo by to takhle?..udelal jsem jenom pro radky. Prosimte, rekl by si mi taky k tomu jak se ma delat spravne odsazeni?
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
P : array [1..20, 1..20] of integer;
perumtace : boolean;
N,i,j : integer;
begin
read(N);
permutace:=true;
for i:=1 to N
do for j:=1 to N
do P[i,j]:=Random(N+1);
for i:=1 to N
do begin
for j:=1 to N
do write(P[i,j]:3);
writeln;
end;
for i:=1 to N
do begin
for j:=1 to N
do if P[i,j]<>j then permutace:=false else permutace:=true;
end;
readln;
end.
Co myslíš odsazením?
První chybu máš tady
for i:=1 to N
do for j:=1 to N
do P[i,j]:=Random(N+1);
...patrně jsi měl na mysli spíš
for i:=1 to N
do for j:=1 to N
do P[i,j]:=Random(N)+1;
Ten první a druhý blok bych napsal do jednoho cyklu (prostě vložil do matice a hned vypsal na monitor).
A ten třetí blok
for i:=1 to N
do begin
for j:=1 to N
do if P[i,j]<>j then permutace:=false else permutace:=true;
end;
Není správně - nemusí to vypadat jen 1,2,3. Může to být třeba 2,3,1. Nastuduj si použití množin (set of). Ty ti v tomto případě dost pomůžou - přidáš do množiny prvky od 1 do N, pak když prvek v řádku najdeš odstraníš jej z množiny a na konci průchodu řádku zkontroluješ jestli je množina prázdná. Pokud ano je to OK pokud ne, víš že tam jsou jinné prvky a nastává FALSE.
to tucna: program matka;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
P : array [1..20, 1..20] of integer;
permutace : boolean;
N,i,j : integer;
cislice : set of byte;
begin
read(N);
cislice:=[1..N];
permutace:=true;
for i:=1 to N
do for j:=1 to N
do P[i,j]:=Random(N)+1;
for i:=1 to N
do begin
for j:=1 to N
do write(P[i,j]:3);
writeln;
end;
for i:=1 to N
do begin
for j:=1 to N
do if P[i,j] in cislice then
begin
cislice:=cislice - [P[i,j]];
end;
if cislice=[] then permutace:=True else permutace:=False; //todle asi nebude spravne, ale nevedel jsem jak otestovat, kdyz je mnozina spravna
end;
write(permutace);
readln;
readln;
end.
ty jo ale stejne mi to nefunguje :-((((((
Zrovna nemám moc času, ale jak na to tak zběžně koukám příjde mi to ok. Možná to místo kde se ptáš jestli je ta množina prázdná - nejde použít length?
EDIT: a nezapomeň ještě, že tu proměnou cislice musíš po každém řádku znova naplnit čísly 1..N ;)
>Kadla:
Prosimte, rekl by si mi taky k tomu jak se ma delat spravne odsazeni?
Jestli myslíš, jak to udělat, aby se ti tady na fóru zobrazil kód správně odsazený, tak si ho celý označ a pak klikni na tlačítko KOD vpravo nad tím polem, do kterého píšeš.
A jestli máš na mysli, jak správně odsazovat příkazy ve zdrojáku, tak je odpověď jednoduchá: tak, aby ses v něm vyznal, jinak na tom nezáleží. Já osobně mám rád, když jsou begin a k němu patřící end přesně pod sebou, ale to je věc vkusu.
BTW - místo tohohle:
if cislice=[] then permutace:=True else permutace:=False;
se dá napsat:
permutace:=cislice=[];
Výraz "cislice=[]" dává hodnotu typu boolean, kterou můžeš rovnou přiřadit do proměnné Permutace, která je taky boolean, a nemusíš se zdržovat psaním ifů. Výsledný efekt je ale stejný.
>tucna:
Možná to místo kde se ptáš jestli je ta množina prázdná - nejde použít length?
Length dává délku řetězce a ne množiny, takže nejde.
Moje stránka.
To Mircosoft:Jo a jeste bych se chtel zeptat, ted jsem resil priklad, kdy jsem mel vypsat pismena, ktere uzivatel nenapsal v retezci. Ja jsem to resil odcitanim z mnoziny vsech pismen. Mam ted jen takovej problem, ze nevim jak se vypisuje mnozina.Potrebuju vypsat, pismena, ktery uzivatel nenapsal...
Jinak jsem myslel spravne odsazeni ve zdrojaku
Hmmm... tak tohle je zajímavá úloha. Množina normálně vypsat nejde, musíš oklikou:
var znak:char;
mnozina:set of char;
...
for znak:=#0 to #255 do if znak in mnozina then write(znak);
Moje stránka.
Jasně:
if not (znak in mnozina) then ...
Pozor, že potřebuješ znegovat celý výraz "znak in mnozina". Kdybys to napsal bez té závorky, vyhodnotilo by se to jako "if (not znak) in mnozina" (protože not má ze všech operátorů největší prioritu), což by dalo úplně jiný výsledek, než jsi chtěl (not použitý na znak nebo číslo otočí hodnotu všech jeho bitů).
Moje stránka.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Matice - inverzní matice — založil Mara
Moderátoři diskuze