Najvacšia nulova submatica – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Najvacšia nulova submatica – Pascal – Fórum – Programujte.comNajvacšia nulova submatica – Pascal – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
djreaper0
Duch
1. 2. 2012   #1
-
0
-

Je daná obdĺžniková matica typu MxN. Napíšte procedúru v ktorej nájdete najväčšiu nulovú submatica v tejto matici. parametrami tejto procedúry bude matica, a indexy ľavého horného rohu a pravého dolného rohu

potreboval by som poradit ako ma vyzerať ten syntax pre tie indexy...

ja už som beznádejne v koncoch...

Nahlásit jako SPAM
IP: 213.81.220.–
Reklama
Reklama
JoDiK
~ Anonymní uživatel
981 příspěvků
1. 2. 2012   #2
-
0
-

#1 djreaper


procedure najvacsia_nulova_submatica(var vstupna_matica:Tmatica; var lh_riadok, lh_stlpec : integer; var pd_riadok, pd_stlpec : integer);

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
981 příspěvků
1. 2. 2012   #3
-
0
-

#2 JoDiK
Viz ukázka...

Nahlásit jako SPAM
IP: 88.103.233.–
djreaper0
Duch
1. 2. 2012   #4
-
0
-

No stale neviemako pouzit tie riadky asi v cykle nemajú byt:) a dik konecne po týždni aspon nejaká pomoc..

program MATICE;
uses crt;
const max=100;
type MATICA=array[1..max,1..max] of integer;

var A:MATICA;
    m,n,I,J:integer;

procedure CITAJ;
begin
  writeln('Zadajte pocet riadkov matice!');
  readln(n);
  writeln('Zadajte pocet stlpcov matice!');
  readln(m);
  writeln('Zadavajte prvky matice!');
  for I:=1 to n do for J:=1 to m
  do begin write('[',I,',',J,']: ');
                                          readln(A[I,J]);
                                    end;
end;

procedure PIS;
begin
  writeln('Vypisanie zadanej matice: ');
  for I:=1 to n do begin for J:=1 to m do write(A[I,J],' ');
  writeln;
                   end;
end;
procedure najvacsia_nulova_submatica(var vstupna_matica:matica; var lh_riadok, lh_stlpec : integer; var pd_riadok, pd_stlpec : integer);
begin
for lh_riadok:=1 to lh_stlpec do begin for pd_riadok:=1 to pd_stlpec do
end; end;end;
begin
  clrscr;
  CITAJ;
  PIS;
  najvacsia_nulova_submatica;
  readkey;
end.

Nahlásit jako SPAM
IP: 213.81.220.–
JoDiK
~ Anonymní uživatel
981 příspěvků
2. 2. 2012   #5
-
0
-

#4 djreaper
Máš v tom trochu chaos - asi jsi pořád nepochopil zadání...

Ještě jednou se podívej na ten obrázek...

Procedura má najít a vrátit hodnoty lh_riadok, lh_stlpec, pd_riadok, pd_stlpec

Vstupní údaje jsou matica, M, N (M a N bych asi ještě přidal do parametrů procedury).

Takže cyklus v proceduře bude nějak takto:

for i:=1 to M do

  for j:=1 to N do

     hledej souvislou oblast složenou z nul a její souřadnice si ulož do

     výstupních parametrů lh_riadok, lh_stlpec, pd_riadok, pd_stlpec

  end;

end;

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
981 příspěvků
2. 2. 2012   #6
-
0
-

#5 JoDiK
A ještě bych ti doporučil dát volání procedury CITAJ do poznámkových závorek a nachystat si matici dopředu jako typovou konstantu - třeba tu coje v obrázku a ladit tak dlouho, dokud ti nevypadnou ty správné výsledky. Zadávat po každém spuštění matici je fakt vopruz...

Jestli nevíš o co jde, koukni třeba sem na proměnnou POLE...

http://www.spsemoh.cz/…scal/std.htm#…

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
981 příspěvků
2. 2. 2012   #7
-
0
-

#6 JoDiK
Ještě dovol jednu poznámku...

Asi je něco špatně. Buď nejsem tak dobrý programátor jak jsem si myslel (protože tohle zadání by mi dalo dost zabrat), nebo udělal někdo chybu u vás (buď ten co ti to zadal přecenil tvoje schopnosti, nebo ty jsi něco zanedbal, když jsi dostal tak těžké zadání a teprve bojuješ s cykly).

Podle mě máš tři možnosti:

1. někde si to seženeš hotové (určitě už to zadali mnoha lidem před tebou)

2. necháš si to od někoho udělat

3. naučíš se programovat

Pokud sis vybral variantu 3, doporučím ti začít něčím jednodušším, nejdřív to dělej s jednorozměrným polem...

1. najdi a vypiš pozici nulové hodnoty

2. najdi a vypiš seznam pozic s nulovými hodnotami

3. najdi a vypiš odkud kam se nachází souvislá řada nul

4. najdi a vypiš odkud kam se nachází souvislé řady nul, je-li jich více a která z nich je nejdelší

Až to budeš mít hotové, teprve jdi na tu matici...

Nahlásit jako SPAM
IP: 88.103.236.–
djreaper0
Duch
2. 2. 2012   #8
-
0
-

#7 JoDiK
Veľmi pekne ti ďakujem... aj tak si mi pomohol... a s tým precenil moje schopnosti máš úplnu pravdu pascal sa učim od oktobra a na skúške nám dal vylosovať si papieriky a hold ja som si vylosoval taký ktorý sa dá len veľmi ťažko zvládnuť ale ja ho raz sfunkčním :) a ešte raz ďakujem...

Nahlásit jako SPAM
IP: 213.81.220.–
Řešení
Mircosoft+1
Věrný člen
3. 2. 2012   #9
-
0
-
Vyřešeno Nejlepší odpověď

Díky za brouka v hlavě :-).

Trochu jsem o tom přemýšlel a došlo mi, že v zadání vůbec není řečeno, co přesně znamená pojem "největší submatice". Má to být submatice s největším počtem prvků? Nebo s největší šířkou nebo největší výškou? Čili: je větší 2x2, 4x1, nebo jsou obě stejné? To by chtělo zjistit u zadavatele.

Pro řešení mě napadla taková celkem primitivní metoda hrubé síly. Nejdřív by se napsala funkce, která zjistí, jestli daná submatice je nebo není nulová (fungovala by tak, že by tu submatici prošla prvek po prvku a kdyby narazila na cokoli nenulového, nahlásila by false). Potom by se ta velká matice procházela prvek po prvku. Vždycky když by se narazilo na nulu, zkusila by se postupně testovat nulovost submatic od té nuly až do pravého a dolního okraje matice, pak o 1 řádek menší, pak o 1 sloupec atd. (rozměry by se kombinovaly stylem "každý s každým", aby to nebyly jenom čtverce: 4x4, 4x3, 4x2, 4x1, 3x4, 3x3 atd.), a ta dosud největší nalezená by se někde pamatovala.

Elegantnější a míň náročné na procesor by bylo, kdyby se od té nuly šlo doprava a dolů, hledaly by se souvislé nulové řádky a sloupce a nějak by se zjišťovalo, jak velkou submatici tvoří. Ale to je o dost složitější.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
djreaper0
Duch
3. 2. 2012   #10
-
0
-

presne takto mi to bolo dneska vysvetlene na skuske uplne jednoduche ...no co mam sa co ucit :)

Nahlásit jako SPAM
IP: 213.81.220.–
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, 12 hostů

Podobná vlákna

Nulova reference? — založil Mutagen

Nulovanie premenej — založil johnw

Ciastocne nulovanie matice v C — založil pietro62

Moderátoři diskuze

 

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