» Poradna » Programy

Probel s programkem v pascalu

 |   | 

Mam problem, mam tohle zadani: Program načte posloupnost celých čísel ukončenou číslem nula a zjistí, zda je tato posloupnost rostouci (další číslo vždy vetsi než předchozí).tahle verze programku mi nebyl uznana, a ja nevim jak dalvar, b,a:integer;writeln('zadej prvky, ukonci nulou');readln(a);readln(b);while b0 dobeginif a>b then writeln('ne, neni klesajici') else ('ano je klesajici');a:=b;readln(b);end;writeln('konec');rea dln;end.

Mohlo by vás také zajímat

Odpovědi na otázku

 |   | 

v programu ma byt ano ne, neni rostouci else ano je rostouci

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Zadání: zjistit, zda je posloupnost rostoucíTy testuješ, zda je posloupnost klesající. To není totéž - co když je posloupnost nerostoucí/neklesající (samé nuly.)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

Zadanie mas na rastucu postupnost ale ty pocitas klesajucost - navyse to mas presne naopak ;) ked je klesajuca, tak vypise, ze nie je a naopak ;) Predpokladajme teda, ze si to uz opravil, potom:Hlavny problem spociva v tom, ze to pocita zle. :) Vypisuje ti to totiz vysledok po nacitani kazdeho cisla, ale ty to mas vypisat az na konci, po nacitani celej postupnosti. Skus si tam zadat postupnost 1, 2, 3, 1, 2, 3, 0 - po poslednej 3 ti vypise, ze postupnost je rastuca, co samozrejme nie je pravda. Takze do while cyklu si daj iba nejaky priznak, ci je postupnost stale este rastuca, alebo uz nie. Ked sa vsak uz postupnost zmeni na nerastucu, ukonci cyklus a zvysne cleny postupnosti uz iba docitaj v dalsom cykle. Na nerastucosti uz totiz nic nezmenia - postupnost vzdy ostane nerastuca.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

da sa to cele urobit v jednom cykle - na zaciatku nastavis flag na TRUE (rastuca), v podmienke ho nastavis na FALSE ak zistis jedno klesnutie, ale v podmienke ho nenastavujes na TRU, flag ostane na FALSE, na konci len vypises hlasku podla toho flagu. Je to uplne trivialne, na 5riadkov.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

To ano ale potom sa zbytocne testuje rastucost aj ked uz podmienka nikdy nebude splnena ;) Ja viem, pri takomto priklade to neprinesie absolutne ziadnu usporu, ale ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Asi takvar  b,a:integer;       roste:boolean;begin  writeln('zadej prvky, ukonci nulou');  roste:=true;  readln(a);  repeat    readln(b);    if(a>=b)then roste:=false;    a:=b;  until(b=0)if roste then writeln('je rastouci') else ('je klesajici');writeln('konec');rea dln;end.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

else ('je klesajici');musis zmenit na else ('neni rostouci');Ak nieco nie je rastuce to este neznamena ze je klesajuce (zaklady logiky!)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a chyba tam aj writteln else writteln('neni rostouci');

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Mas to pochopitelne spatne – posloupnost ti vzdycky vyjde jako nerostouci.A vubec se to v krajnich pripadech chova dost osklive...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Hm, spis tedy "ze neni rostouci" nez "je nerostouci."Abych tady taky sam nekazal bludy :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

preco by to mal blbo? (okrem toho co som mu pripomienkoval vyssie)? Kukal som sa mu na to aspon 30sekund a podla mna to ma dobre.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

... jaj uz vidim kvoli tej ukoncovacej nule Samozrejme test ci b=0 treba dat uz predtym ako sa testuje a>=b, alebo ten cyklus inac zorganizovat...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

jo diky to je moc, nenapadlo me resit to pres true a false, porad jsem to resil pres pole, ale to bylo taky spatne, jeste jendou DIKY.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

no nevím ale když to má žrát posloupnost tak to asi cpu do proměnné typu pole a vyhodnocuju to u víc čísel než u dvou a to nejspíš cyklem. sprasil bych to nahrubo asi tak /nbemám delphi nemám jak vyzkoušet/var pocet,a,i:integer pole:array [1..1024]of integer roste, klesa:integer;repeatwriteln ('zadej prvek, ukonci yadanim nuly')realn(a);if a0 then inc pocetif a0 then pole[pocet]:=a;until a0for i:=1 to pocet-1 do begin if pole[i] > pole[i+1] then inc roste if pole[i] end;if roste=pocet then writeln('Posloupnost roste');if klesa=pocet then writeln('Poslopnoust klesa');end;

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

if pole[i+1] > pole[i] then inc rosteif pole[i+1] < pole[i] then inc klesa

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

Skutocne dobry vtip :) Co spravis, ak bude postupnost obsahovat 1025 prvkov?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

tak jich nadefinuju 1milión nebo se napřed v programu zeptám kolik jivch bude a nadefinuju je dynamicky. jinak nic horšího jsi tam nenašel ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

pole naozaj v tomto pripade nie je potrebne, akurat vznikaju problemy s velkostou, a je to neoptimalne co sa tyka pamatovej narocnosti (kazdeho sere ked IE zabera 150MB ale sam sa nezamysla nad pam. narocnostou svojho programu ).Daleja) roste a klesa nemas inicializovane na 0 (alebo to robi packal automaticky?)b) roste a klesa sa nebude nikdy rovnat pocet, ptz porovnani je tem len (pocet-1)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

A co spravis az tam budes mat postupnost o dlzke 10^50? Alokujes si 10^50 bytov? No to by ta ta pamat vysla dost draho. A co urobis vtedy, ak budes mat nekonecnu postupnost? Co ak program dostane kazdu milisekundu na vstupe jedno cislo? A bude tieto cisla spracovavat den za dnom, rok za rokom?Pole v tomto pripade je uplne nepotrebne, pretoze po precitani nejakeho prvku uz ho nikdy v zivote nebudes potrebovat a mozes ho kludne zabudnut. Naco by si si ho ukladal?Proti tomu je vsetko ostatne len malickou chybyckou krasy Ja ta teda nechcem urazat, ale mal by si absolvovat nejake zaklady programovania, ak sa tomu chces venovat. Skutocne to neber ako urazku, ale ako radu

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

njn jenže to co sem napsal já /jak sem psal nahrubo bez odladění/ se mi zdá funkční narozsíl tady od těch námětů které když jim dáš 4čísla třeba 10 20 10 0 tak to bude klesa i roste. myslel jsem že úkolem je vyhodnotit víc čísel ne jen dvě mezi sebou. ostatně kdyby šlo jen o dvě čísla tak se to asi nepřerušuje nulou...ze zadání teda logicky usuzuju že se porovnává čísel víc. možná blbě ale tak sem prostě pochopil zadání

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

Samozrejme, ze sa tam porovnava viac cisel, preto je tam while cyklus ;) Ved si zober nejaku postupnost a odkrokuj si ten algoritmus ;)Na zaciatku mas jedno cislo C0 - to je rastuca postupnost. Precitas si dalsie cislo C1, ak C1 > C0, tak mas opat rastucu postupnost. Na cislo C0 mozes zabudnut a zapamatas si iba C1. Potom precitas C2, ak C2>C1, tak postupnost je rastuca a C1 mozes zabudnut, C2 si zapamatas. Nacitas C3, porovnas s C2, atd. atd. - postupnost moze byt lubovolne dlha a porovnaju sa vzdy vsetky cleny postupnosti. Stare cleny mozes kludne zabudnut, pretoze ak C0 Zadanie si teda pochopil spravne, ale zle si pochopil algoritmus, ktory tu ktosi napisal

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Posloupnost