| | |
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 01.05.14 Prihlásený: 07.11.19 Príspevky: 152 Témy: 52 Bydlisko: Dubovce |
Zdravím, Potreboval by som zasa pomoc Profesor nám na konci hodiny zadal DÚ: Vytvorte program ktorý zistí či cifry v zadanom čísle používateľom stúpajú alebo klesajú. Dodal k tomu že to máme robiť cez boolean ktorý sme ešte neskúšali Snažil som sa to nejak urobiť ale ako prvá chyba v programe je tá že cifry sa napíšu od zadu napr.: 123 sa mi zapíše ako 321 + neviem ako tieto cifry porovnám. Program:Kód: program Project1; {$APPTYPE CONSOLE} uses SysUtils; var c:word; cf,cf2:byte; moznost:boolean; begin { TODO -oUser -cConsole Main : Insert code here } write('Zadajte cislo: '); readln(c); while c<>0 do begin cf:=c mod 10; c:=c div 10; cf2:=cf; if cf>cf2 then moznost:=true; if cf<cf2 then moznost:=false; end; writeln; if moznost=true then writeln('stupa'); if moznost=false then writeln('klesa'); readln; end.
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 08.02.2017 17:38 | |
|
čisto technická otázka, čo v prípade, že bude číslo: 12321232123
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 01.05.14 Prihlásený: 07.11.19 Príspevky: 152 Témy: 52 Bydlisko: Dubovce | Napísal autor témy GamerSK: 08.02.2017 17:46 | |
|
tak zmenim datovy typ
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 08.02.2017 17:51 | |
|
ja sa len pýtam, lebo tam nejak nie je zmienená táto situácia // Spojený príspevok Str 08.02.17 18:36Kód: program cifry; var cislo, pomocne_cislo: longint; cifra: byte; stav, p: boolean; { true ak stupa, false ak klesa } begin write('Zadajte cislo: '); readln(cislo); pomocne_cislo := cislo div 10; cifra := cislo mod 10; stav := (cifra >= pomocne_cislo mod 10);
while pomocne_cislo > 0 do begin p := cifra >= pomocne_cislo mod 10; if p <> stav then begin writeln('Cisla nestupaju, ani neklesaju.'); break; end; cifra := pomocne_cislo mod 10; pomocne_cislo := pomocne_cislo div 10; end;
if p = stav then if p then writeln('Cifry stupaju.') else writeln('Cifry klesaju.'); readln(); end. // Spojený príspevok Str 08.02.17 19:49Vysvetlenie:- V tom cykle opakovane vkladáš do [c]cf2[/c] hodnotu [c]cf[/c], čo sa bude samozrejme vždy rovnať, a teda to nesplní ani jednu z podmienok
- Podmienku nemôžeš meniť podľa posledného stavu. Uvediem príklad na prvočísla, vtedy overuješ či je dané číslo deliteľné niečím iným okrem 1 a sebou samým => nemôžeš ako výsledok považovať poslednú získanú hodnotu, napr. 7x4 = 28 pri použití efektívneho algoritmu posledné číslo, ktoré testuješ je 5 -> 28 nie je deliteľná 5, ale to nič nemení na tom, že nie je prvočíslo, lebo je deliteľná aj 7 a 4.
- Pri spracovávaní odzadu musíš brať do úvahy, že to ide odzadu. To znamená, že keď si určíme, že [c]true[/c] bude pre stúpajúce cifry, tak musíme kontrolovať či posledná cifra od konca je väčšia ako tá pred ňou... ak by si išiel zľava tak to presne naopak overuješ...
- V cykle mám použitý aj [c]break[/c], ten okamžite ukončí cyklus
- Vnorená podmienka na konci overuje či cyklus skončil tak ako má -> cifry buď klesajú alebo stúpajú, ak je to pravda, tak sa na základe hodnoty p alebo stavu (je to jedno, lebo sú rovnaké) určí čo sa vypíše
Nejaké otázky?
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 09.02.2017 8:15 | |
|
Ja to trochu zjednoduším, pseudokódom by to šlo nejako takto: Kód: boolean stupaju = true, klesaju = true; //na zaciatku cislo stupa aj klesa zaroven (ziadne cislo to splnuje) integer stup_minule = 0; //nastavim na najmensiu moznu hodnotu integer kles_minule = 9; //nastavim na najvacsiu moznu hodnotu
pre vsetky cifry (cifra) v cisle begin if cifra < stup_minule then stupaju = false; //ak je cifra mensia, nez predchadzajuca, tak urcite nestupaju if cifra > kles_minule then klesaju = false; //ak je cifra vacsia, nez predchadzajuca, tak urcite neklesaju
//obe nastavim na cifru, aby v dalsom cykle boli predchadzajuce stup_minule = cifra; kles_minule = cifra; end
vysledok mam v premennych stupaju, klesaju
focko píše: čisto technická otázka, čo v prípade, že bude číslo: 12321232123 Prečo by to mala byť nejaká výnimka? Ani neklesá, ani nestúpa, tam nie je čo riešiť.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 09.02.2017 8:20 | |
|
Nie je špecifikované čo sa má vtedy diať... Teoreticky nemusíš všetky prechádzať, akonáhle narazíš na zmenu, tak môžeš cyklus ukončiť
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 09.02.2017 8:22 | |
|
Mám v paži, pri takto malých vstupoch bude overhead kontroly ukončenia podobný, ako to prejsť do konca bez nej. To bude mať zmysel až pri kontrole mnoho-ciferných čísel.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C výpis cisle v Assembler, C, C++, Pascal, Java | 3 | 455 | 15.04.2017 13:00 BX | | Zistenie teploty v nVidia grafické karty | 3 | 840 | 09.01.2006 20:53 jaffar | | Zistenie hesla v Bezpečnosť a firewally | 3 | 861 | 04.08.2011 21:02 Bajzik | | Zistenie zostavy v Služby a webstránky | 1 | 278 | 13.12.2013 11:07 Icehammer | | Zistenie suradnic v JavaScript, VBScript, Ajax | 1 | 332 | 16.08.2012 8:53 Ďuri | | Zistenie FSB v Benchmarky a diagnostické programy | 1 | 775 | 21.10.2009 10:57 f4r0 | | Zistenie IP v Sieťové a internetové programy | 11 | 2262 | 18.08.2009 0:49 zmija31 | | Zistenie hesla v Sieťové a internetové programy | 12 | 12895 | 06.07.2011 17:17 Etoeto | | Zistenie teplot v AMD čipové sady | 2 | 446 | 25.10.2011 11:58 MilanYX | | Zistenie hostingu v Webhosting a servery | 2 | 999 | 10.03.2008 15:21 ove | | Zistenie id v JavaScript, VBScript, Ajax | 4 | 768 | 29.09.2010 19:40 shaggy | | zistenie prehliadaca v PHP, ASP | 7 | 1248 | 31.08.2008 17:28 m4r14n | | Zistenie portu adresy v Siete | 2 | 1543 | 03.11.2009 12:40 maross99 | | Zistenie pristopovych bodov v Siete | 6 | 478 | 28.08.2008 22:03 KatjushaMan | | Zistenie nazvu pesniciek v Audio programy | 7 | 8750 | 25.05.2006 17:16 prostor | | Zistenie textoveho suboru v Assembler, C, C++, Pascal, Java | 2 | 497 | 12.05.2012 22:18 Siriuse |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|