Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Dobrý den
Úkolem je odebrat z čísla jeho první číslici
tak to vůbec nevím jak na to - je na to nějakej příkaz?
Celé zadání: Na standardním vstupu je jedno kladné celé číslo menší než 32768. Určete číslo, které vznikne odebráním první cifry ze zápisu zadaného čísla, a vypište ho na standardní výstup. Případné vedoucí nuly ve výsledném čísle nevypisujte, ledaže by mělo výsledné číslo hodnotu 0.
Příklad vstupu:
23551
Odpovídající výstup:
3551
Děkuji za nápady
Offline
Ahoj, pokud to načteš jako string:
var text:string;
i:byte;
readln(text);
{ string je pole znaků s indexy číslovanými od jedné, já potřebuji vypsat všechny znaky s indexy od dvou:}
for i:= 2 to length(text) do
write(text[i])
Pokud to načteš jako číslo, pak jsi schopen pomocí desítkového logaritmu zjistit počet cifer zadaného čísla:
pocet_cifer = dolni_cela_cast(log10(zadane_cislo)+1)
V pascalu existuje funkce pow(základ, exponent), pomocí které vytvořím číslo 10^(pocet_cifer-1).
Výsledek získám jako zbytek po dělení zadaného čísla tímto číslem 10^(pocet_cifer-1).
Tento postup funguje pro čísla větší nebo rovna deseti.
Offline
já sem to dělal takhle ale splnil sem ten ukol jenom na 60% ulítávaj mi čísla jako 1001
Program pocetcifer;
const m=ln(10);
var x,v,h,z: integer;b,c,d,e,y,w:real;
begin
read(v);
y:=ln(v);
w:=y/m;
x:=Trunc(w);
b:=exp(x*m);
z:=trunc(b);
c:=v/z;
d:=frac(c);
e:=d*b;
h:=trunc(e);
writeln(h);
end.
Offline
↑ vojta01: Ještě to chce ošetřit odebrání případných 0. Třeba pro číslo 10002 by ti tvůj program vypsal 0002.
Jinak myslím, že rozumnější to bude s využitím stringu.
Offline
tak už to mám a jede to pro všechny čísla
Program pocetcifer;
const m=ln(10);
var x,v,i,z: integer;b,c,d,e,h,y,w:real;
begin
read(v);
y:=ln(v);
w:=y/m;
x:=Trunc(w);
b:=exp(x*m);
z:=trunc(b);
c:=v/z;
d:=frac(c);
e:=d*b;
h:=round(e);
i:=trunc(h);
writeln(i);
end.
Offline
↑ vojta01:
hele a to i:byte mám umístit v programu před nebo za begin ?
Offline
v pascalu mám sečíst sudý cifry
tak sem napsal tohle
program soucetsudych;
var d:string;z,w,y:char;
i:byte;q:integer;
begin
readln(d);
for i:=1 to length(d) do y:=d[2];z:=d[4];w:=[6];
q:=(y+z)+w;
write(q);
end.
ale furt mi to hlásí dvě chyby
Offline
↑ Mr.Pinker:
Jaký chyby? Jinak v tom cyklu máš napevno zadaný indexy, spíš by to chtělo ověřovat, zdali i je sudé a pokud ano, tak sčítat.
Offline
↑ Mr.Pinker:
by mě zajímalo jak chceš sčítat nějaký 2 znaky, nevím jestli to v pascalu jde, ale třeba v javě to určo nejde + jak římal ↑ septolet: tam máš napevno danné indexi takže buď tam musíš mít to i místo těch pevných a nebo tam máš naprd ten cyklus
já bych to přepsal trošku jinak... for i:=1 to length(d)/2 do y:=[2*i];
a tak by jsi měl v y postupně uloženy všechny sudé číslice...jak dále snimi pracovat už nevím a ani nevím jak převést v pascalu cahr na integer a jestli je to vůbec potřeba....jo a to kouzlení s tím length(d)/2 je proto, že ty chceš všechny čísla sudá, proto si délku vydělám 2mi a jelikoř se mi i pokžadé zvedne o 1 tak mi to nepřesáhne délku když ho poté násobím dvěmi(neumím vysvětlovat to se omlouvám, ale snad jsi to pochopil)
Offline
myslíš cifry na sudých pozicích zprava?
c ,soucet: integer;
...
readln(c);
while c > 0 do
begin
c := c div 10; {odeberu poslední - lichou cifru}
soucet := soucet + c mod 10; {přičtu aktuálně poslední cifru}
c := c div 10; {odeberu i tu sudou cifru}
end;
writeln(soucet);
Pokud to mají být sudé cifry zleva, tak sečtu cifry na lichých i sudých pozicích zprava a nakonec vypíšu součet lichých nebo sudých cifer podle toho, jestli byla poslední přičtená cifra na liché pozici zleva (vypíšu sudé) nebo na sudé pozici zleva (vypíšu lichou).
Offline
nakonec sem to dokopal k tomuhle
program soucetcifer; const m=ln(10); var c,x,a,q:integer;w,y:real; begin readln(c); y:=ln(c); w:=y/m; x:=Trunc(w)+1; a:=x mod 2; if a=1 then while c>0 do begin c:=c div 10; q:=q + c mod 10; c:=c div 10; end else while c>0 do begin q:=q + c mod 10; c:=c div 100; end; writeln(q); end.
Offline
Stránky: 1