| | |
| Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
Autor | Správa |
---|
Registrovaný: 13.04.07 Prihlásený: 15.05.09 Príspevky: 68 Témy: 9 |
nemohli by ste mi niekto napisat syntax StrToInt prikazu?? v pascal helpe mam nieco taketo :
i:=StrToInt(str)
kde i je premenna typu integer, str je premenna typu string.. lenze ked to tam takto zadam napise mi Error3 : Unknown identifier....
|
|
Registrovaný: 17.11.06 Prihlásený: 31.12.07 Príspevky: 677 Témy: 9 |
a máš deklarované premenné i a str? lebo je to správen.. strtoint prevedie textový reťazec ktorý máš uložený v premennej str a uloží to do premennej i ktora je typu integer
|
|
Registrovaný: 13.04.07 Prihlásený: 15.05.09 Príspevky: 68 Témy: 9 | Napísal autor témy neznamy: 20.04.2007 20:03 | |
|
jasne ze mam deklarovane zajtra sem hodim zdrojovy kod a presne zadanie ulohy...
|
|
Registrovaný: 13.04.07 Prihlásený: 15.05.09 Príspevky: 68 Témy: 9 | Napísal autor témy neznamy: 21.04.2007 14:18 | |
|
takze zadanie: na vstupe je rad znakov ukoncenych bodkou(veta).napiste program, ktory : 1. zisti pocet znakov vo vete.
2. zisti, kolko z nich je cislic.
3.scita zistene cislice z retazca.
to co som napisal ja (zdrojovy kod):
Kód: program bodka; uses crt; var veta:string; i,k,suc,poc:integer; begin clrscr; writeln('zadaj vetu'); readln(veta); writeln('pocet znakov vo vete je',length(veta)); {zisti pocet znakov vo vete} poc:=0;suc:=0; for i:=1 to length(veta) do case veta[i] of '1'..'9' : begin inc(poc); {zisti pocet cislic} k:=StrToInt(veta[i]); suc:=suc+k; {zisti sucet cislic} end; end writeln('pocet cislic vo vete je ',poc); writeln('sucet cislic vo vete je ',suc); readln; end.
poznamka: neberiem do uvahy vyskyt cisel vacsich ako 9.
|
|
Registrovaný: 02.09.05 Prihlásený: 17.11.10 Príspevky: 154 Témy: 1 |
Tu fciu StrToInt si musis napisat sam(inak ona je v pascal helpe napisana), moze vyzerat takto :
Kód: function StrToInt(value : string) : integer; var code, num : integer; begin Val(value, num, code); StrToInt := num; end;
a este by som povedal nieco k tomu tvojmu programu : Mas tam 1 logicku chybu, ze ak v tom retazci je cislo 0, tak ho nezaregistrujes, teda neinkrementujes pocet cislic... Takze tu je kompletna verzia tvojho programu : Kód: program bodka; uses crt; var veta:string; i,suc,poc:integer;
function StrToInt(value : string) : integer; var code, num : integer; begin Val(value, num, code); StrToInt := num; end;
begin clrscr; writeln('zadaj vetu'); readln(veta); writeln('pocet znakov vo vete je',length(veta)); {zisti pocet znakov vo vete} poc:=0; suc:=0; for i:=1 to length(veta) do if (veta[i] in ['0'..'9']) then begin inc(poc); {zisti pocet cislic} inc(suc, StrToInt(veta[i])); {zisti sucet cislic} end; writeln('pocet cislic vo vete je ',poc); writeln('sucet cislic vo vete je ',suc); readln; end.
|
|
Registrovaný: 13.04.07 Prihlásený: 15.05.09 Príspevky: 68 Témy: 9 | Napísal autor témy neznamy: 21.04.2007 18:34 | |
|
dakujem za opravenie tej chybnej 0 a aj za vyriesenie. funguje to len neviem co to robi.nemohol by si mi prosim vysvetlit co urobi ta funkcia??
|
|
Registrovaný: 02.09.05 Prihlásený: 17.11.10 Príspevky: 154 Témy: 1 |
neznamy píše: dakujem za opravenie tej chybnej 0 a aj za vyriesenie. funguje to len neviem co to robi.nemohol by si mi prosim vysvetlit co urobi ta funkcia?? No ta funkcia jednoducho prevadza retazec na cislo, pokial je to mozne...A vo svojom vnutri vola fciu, ktora je definovana v pascali , teda VAL, ktora prevedie retazec na cislo, ibaze pouziva 3 vstupne premenne, prva je retazec, druha je typu integer a je volana odkazom a tretia premenna je taktiez typu integer a volana odkazom a pri nespravnom prevadzani retazca na cislo vracia kod , ktory znamena chybu...
|
|
Registrovaný: 17.11.06 Prihlásený: 31.12.07 Príspevky: 677 Témy: 9 |
programator píše: No ta funkcia jednoducho prevadza retazec na cislo, pokial je to mozne...A vo svojom vnutri vola fciu, ktora je definovana v pascali , teda VAL, ktora prevedie retazec na cislo, ibaze pouziva 3 vstupne premenne, prva je retazec, druha je typu integer a je volana odkazom a tretia premenna je taktiez typu integer a volana odkazom a pri nespravnom prevadzani retazca na cislo vracia kod , ktory znamena chybu... nevracia žiaden kód, vracia miesto kde nastala chyba (teda prvý znak ktorý nevie previesť na číslo) a to je trošku rozdiel.
a ešte k tomu tvojmu riešeniu:
mal si overiť či je code<>0 lebo ak ti tam podhodím text tak tá funkcia strtoint je rovnako oničom ako val (mala by upozorniť že sa nedá previesť a zastaviť beh programu)
|
|
Registrovaný: 13.04.07 Prihlásený: 15.05.09 Príspevky: 68 Témy: 9 | Napísal autor témy neznamy: 23.04.2007 17:14 | |
|
programator: dakujem. som potreboval pocut hlavne co robi ten code kedze ho tam potom nepouzivas. ale teraz je to uz jasne
|
|
Registrovaný: 02.09.05 Prihlásený: 17.11.10 Príspevky: 154 Témy: 1 |
audiotrack píše: nevracia žiaden kód, vracia miesto kde nastala chyba (teda prvý znak ktorý nevie previesť na číslo) a to je trošku rozdiel.
a ešte k tomu tvojmu riešeniu: mal si overiť či je code<>0 lebo ak ti tam podhodím text tak tá funkcia strtoint je rovnako oničom ako val (mala by upozorniť že sa nedá previesť a zastaviť beh programu) Ano to je pravda s tym ze vracia prvy znak (dakujem za si ma opravil, pomylil som si to), ale myslim ze overovat v tej funkcii ci je code<>0 je v tomto pripade zbytocne, pretoze pred zavolanim funkcie sa overuje v podmienke, ci je dany znak v mnozine cisel od 0 po 9 (if (veta[i] in ['0'..'9']) then ......)
|
|
Registrovaný: 17.11.06 Prihlásený: 31.12.07 Príspevky: 677 Témy: 9 |
programator píše: Ano to je pravda s tym ze vracia prvy znak (dakujem za si ma opravil, pomylil som si to), ale myslim ze overovat v tej funkcii ci je code<>0 je v tomto pripade zbytocne, pretoze pred zavolanim funkcie sa overuje v podmienke, ci je dany znak v mnozine cisel od 0 po 9 (if (veta[i] in ['0'..'9']) then ......) keď robíš funkciu, tak ju dotiahni do konca.. čo ak ju budeš neskôr znovu potrebovať? a potom znovu a znovu..?
|
|
| Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
| 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
|
|