Program ktorý načíta pole o veľkosti 10 čísiel ľubovoľne usporiadaných(nemusia tvoriť postupnosť) a zistí či čísla (aj po prípadnom prehádzaní) zodpovedajú inkrementálnej (vždy o jednu sa zvyšujúcej) postupnosti čísiel v uvažovanom rozsahu 10 čísiel ak nie vypíše koľko a ktoré čísla nespĺňajú podmienku postupnosti.Čísla môžu byť zadané max. v rozsahu od 0-20.
Pomoc s programom v Turbo Pascale
Pomoc s programom v Turbo Pascale
Prosím Vás potreboval by som nutne pomôcť z jedným programom:
Program ktorý načíta pole o veľkosti 10 čísiel ľubovoľne usporiadaných(nemusia tvoriť postupnosť) a zistí či čísla (aj po prípadnom prehádzaní) zodpovedajú inkrementálnej (vždy o jednu sa zvyšujúcej) postupnosti čísiel v uvažovanom rozsahu 10 čísiel ak nie vypíše koľko a ktoré čísla nespĺňajú podmienku postupnosti.Čísla môžu byť zadané max. v rozsahu od 0-20.
Program ktorý načíta pole o veľkosti 10 čísiel ľubovoľne usporiadaných(nemusia tvoriť postupnosť) a zistí či čísla (aj po prípadnom prehádzaní) zodpovedajú inkrementálnej (vždy o jednu sa zvyšujúcej) postupnosti čísiel v uvažovanom rozsahu 10 čísiel ak nie vypíše koľko a ktoré čísla nespĺňajú podmienku postupnosti.Čísla môžu byť zadané max. v rozsahu od 0-20.
-
mirak2
Hardcore addict
- Príspevky: 6719
- Registrovaný: 18 sep 2005, 13:44
- Bydlisko: Prague, CZE / Kosice, SVK
ak som dobre pochopil zadanie tak treba:
1. zotriedit pole
2. skontrolovat ci rozdiel medzi najvyssim a najnizsim je 10
ak ano vec vyriesena, vyhovujuca
ak nie ist od zaciatku pola a vypisat cislo v pripade ze rozdiel medzi nim a predchadzajucim je iny ako 1..a bude este pocitat pocet cisiel kedy sa to pokazi...
algoritmus mas, program kodit v TP sa mi nechce
1. zotriedit pole
2. skontrolovat ci rozdiel medzi najvyssim a najnizsim je 10
ak ano vec vyriesena, vyhovujuca
ak nie ist od zaciatku pola a vypisat cislo v pripade ze rozdiel medzi nim a predchadzajucim je iny ako 1..a bude este pocitat pocet cisiel kedy sa to pokazi...
algoritmus mas, program kodit v TP sa mi nechce
-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
program
tak ked si sa to pokusal robit tak sem hod zdrojak a pozreme sa ti na to, ved je to celkom lahky program a kolega nadomnou ty to perfektne navrhol...mala by to byt hrackamacik16 napísal:Potrebujem prosím pomôcť so zdrojakom vypisuje mi to stále chybu a nefunguje to ako to má díki moc.
//autoeditácia príspevku ( 27 Mar 2009, 15:30 )
no dobre mas stastie ze som sa nudil
Kód: Vybrať všetko
program hej;
uses crt;
var i,a,e:integer;
pole:array [1..10] of integer;
begin
clrscr;
write('Zadaj mi 10 cisel z intevalu od 0 po 20: ');
i:=0;
{naplnenie pola}
repeat
readln(a);
if (a<=20)and(a>=0) then begin
i:=i+1;
pole[i]:=a;
end
else write('to je blbe cislo, zadaj ho znova: ');
until i=10;
{bublinkova metoda}
for i:=1 to 9 do begin
for a:=1 to 9 do if pole[a]>pole[a+1] then begin
e:=pole[a+1];
pole[a+1]:=pole[a];
pole[a]:=e;
end;
end;
e:=0;
for i:=1 to 9 do if pole[i+1]-pole[i]<>1 then begin
writeln('cislo ',pole[i+1],' nesplna podmienku postupnosti a lisia sa o ',pole[i+1]-pole[i]);
e:=e+1;
end;
writeln;
write('pocet cisel ktore nesplnaju podmienku postupnosti: ',e);
readln;
end.-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
mirak2:
No ma to vsak jeden bug - co ak su zadane dve rovnake cisla? Ja osobne by som to riesil inak.
Mozno poslem aj kod ak sa mi bude chciet.
Edit:
Takze,
spravis pole 20tich prvkov typu char, postupne citas cisla x a vzdy zvysis hodnotu x-teho prvku pola o jedno, teda readln(x); pole[x]:=pole[x]+1; (na zaciatku pole vynuluj). Nakoniec celym polom prejdi - ak sa stane ze bude na nejakom prvku hodnota vacsia ako 1, teda sa cislo opakovalo, tak nevyhovuje. Ak nebudeme mat suvislu postupnost 1-tiek v poli, hned vieme, ze cisla nemaju pozadovanu vlasnost. A ako to zistime? Prijdeme najprv po prvu nenulovu hodnotu v poli. Ak to nie je 1, vypiseme, ze toto cislo nesplna podmienku. Ak prideme po nejaku nulu, zapamatame si, ze sme na nu narazili (pomocou nejakej boolean premennej) a pri prvej nenulovej hodnote prehlasime, ze toto cislo taktiez nesplna podmienku(pretoze je od ostatnych oddelene nulami, takze nemame suvislu postupnost jednotiek). Programovat sa mi to vsak nechce, hadam to zvladnes.
Edit 2:
Alebo to radsej usorti a porovnaj kazde dva susedne prvky, ci sa lisia prave o 1.
netreba sa s tym babrat...
No ma to vsak jeden bug - co ak su zadane dve rovnake cisla? Ja osobne by som to riesil inak.
Mozno poslem aj kod ak sa mi bude chciet.
Edit:
Takze,
spravis pole 20tich prvkov typu char, postupne citas cisla x a vzdy zvysis hodnotu x-teho prvku pola o jedno, teda readln(x); pole[x]:=pole[x]+1; (na zaciatku pole vynuluj). Nakoniec celym polom prejdi - ak sa stane ze bude na nejakom prvku hodnota vacsia ako 1, teda sa cislo opakovalo, tak nevyhovuje. Ak nebudeme mat suvislu postupnost 1-tiek v poli, hned vieme, ze cisla nemaju pozadovanu vlasnost. A ako to zistime? Prijdeme najprv po prvu nenulovu hodnotu v poli. Ak to nie je 1, vypiseme, ze toto cislo nesplna podmienku. Ak prideme po nejaku nulu, zapamatame si, ze sme na nu narazili (pomocou nejakej boolean premennej) a pri prvej nenulovej hodnote prehlasime, ze toto cislo taktiez nesplna podmienku(pretoze je od ostatnych oddelene nulami, takze nemame suvislu postupnost jednotiek). Programovat sa mi to vsak nechce, hadam to zvladnes.
Edit 2:
Alebo to radsej usorti a porovnaj kazde dva susedne prvky, ci sa lisia prave o 1.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
myslíš že 20-prvkové pole je efektívne riešenie? Ja by som to riešil inač. Hladať jedinečnosť prvkov by mi stačilo iba v istom prípade. Preto by som toto overenie dal ako posledné, ak všetky ostatné testy vyhodnotia postupnosť ako potenciálne správnu.
1) nájdenie minima a maxima (overovanie či je aktuálny prvok < alebo > ako dočasné min/max. AK by tam bola rovnosť, automaticky končím a postupnosť je vyhodnotena ako nesprávna). V rovnakom cykle si robim aj súčet prvkov do sum
2) zistenie či je minimum menšie alebo rovné ako 10 (ak by bolo napr. 14 tak do 20 už 10 jedinečných ascendentných prvkov nevopcháme)
3) zistenie či ((min+max)*10)/2 = sum
4) v prípade že som ešte stále neskončil, overím či sa každý prvok nachádza práve raz
1) nájdenie minima a maxima (overovanie či je aktuálny prvok < alebo > ako dočasné min/max. AK by tam bola rovnosť, automaticky končím a postupnosť je vyhodnotena ako nesprávna). V rovnakom cykle si robim aj súčet prvkov do sum
2) zistenie či je minimum menšie alebo rovné ako 10 (ak by bolo napr. 14 tak do 20 už 10 jedinečných ascendentných prvkov nevopcháme)
3) zistenie či ((min+max)*10)/2 = sum
4) v prípade že som ešte stále neskončil, overím či sa každý prvok nachádza práve raz
-
mirak2
Hardcore addict
- Príspevky: 6719
- Registrovaný: 18 sep 2005, 13:44
- Bydlisko: Prague, CZE / Kosice, SVK
mirak2 napísal:ak som dobre pochopil zadanie tak treba:
1. zotriedit pole
2. skontrolovat ci rozdiel medzi najvyssim a najnizsim je 10
ak ano vec vyriesena, vyhovujuca
ak nie ist od zaciatku pola a vypisat cislo v pripade ze rozdiel medzi nim a predchadzajucim je iny ako 1..a bude este pocitat pocet cisiel kedy sa to pokazi...
algoritmus mas, program kodit v TP sa mi nechce
tak pre moznost ked je rozdiel prveho a posledneho 10 ci je tam inc(1)...dajak sa nakodi...strasny bugneutronmind napísal:mirak2:
No ma to vsak jeden bug - co ak su zadane dve rovnake cisla? Ja osobne by som to riesil inak.
Mozno poslem aj kod ak sa mi bude chciet.
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
Len tu islo o to, ze ta podmienka je tam uplne zbytocna, absolutne ti nepomoze. Na tom 20 prvkovom poli nevidim na vsak nic strasne, kedze vstupy podla zadania ulohy nikdy neprekrocia hodnotu 20. Principialne, vzhladom na zadanie je postacujuce aj riesenia feromakovi-ho pracujuce v kvadratickom case... Neviem ako tebe, ale uz sa mi nechce dotahovat, kedze zaciname byt OT.