Pomoc s programom v Turbo Pascale

Programovacie jazyky, rady, poradňa...
macik16
Amateur
Amateur
Príspevky: 17
Registrovaný: 04 dec 2008, 16:35

Pomoc s programom v Turbo Pascale

Príspevok od používateľa macik16 »

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. :cry:
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Príspevok od používateľa mirak2 »

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
macik16
Amateur
Amateur
Príspevky: 17
Registrovaný: 04 dec 2008, 16:35

Príspevok od používateľa macik16 »

Potrebujem prosím pomôcť so zdrojakom vypisuje mi to stále chybu a nefunguje to ako to má díki moc.
feromakovi
Expert
Expert
Príspevky: 165
Registrovaný: 24 okt 2008, 14:16
Bydlisko: Bánovce nad Bebravou

program

Príspevok od používateľa feromakovi »

macik16 napísal:Potrebujem prosím pomôcť so zdrojakom vypisuje mi to stále chybu a nefunguje to ako to má díki moc.
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 hracka :D

//autoeditácia príspevku ( 27 Mar 2009, 15:30 )
no dobre mas stastie ze som sa nudil :D bolo treba pomoct aj mne tu pomohli...

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.
mohlo by to byt nejak takto isto je milion moznosti spravit tento program tak tu mas jedno z nich... :smt006
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

macik16 napísal:Potrebujem prosím pomôcť so zdrojakom vypisuje mi to stále chybu a nefunguje to ako to má díki moc.
Úžasná žiadosť o radu. :) (pre istotu si nedal žiadne relevantné informácie, asi preto, aby ti nikto nevedel poradiť)
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

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. :D netreba sa s tym babrat...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

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
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Príspevok od používateľa mirak2 »

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
neutronmind 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.
tak pre moznost ked je rozdiel prveho a posledneho 10 ci je tam inc(1)...dajak sa nakodi...strasny bug
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Lol, jasne ze sa to da "dajak nakodit", ja ani nehovorim, ze to je nejaky "strasny bug", proste to porovnanie, ci je rozdiel prveho a posledneho 10, je zbytocne, nic viac.
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Príspevok od používateľa mirak2 »

ako podmienka pre nejake vetvenie furt lepsia ako nejake 20prvkove pole
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

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.
Napísať odpoveď