Datuve :: Forums :: Arhīvs :: PASCAL - vajag palīdzību

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 94

Reģistrētie lietotāji online: 0

Viesi online: 94

Datuve.lv video
Top.LV

PASCAL - vajag palīdzību

Ievietoja: qwerty1299 @ 2012.11.01 22:32  

Vajag uzrakstīt programmu, kura atrod ievadītajam skaitlim N tuvāko divnieka pakāpi X,  kuras rezultāts 2^x ir mazāks par N.

Piemēram, ja ievad N=9, tad programmai jāizvada X=3, jo 2^3<N.
Otrs piemers: ja N=8, tad programmai jāizvada X=2, jo 2^2<N (nevis X=3, jo 2^3=N, tātad vienāds, nevis mazāks).

Es būtu ļoti priecīgs, ja kāds var palīdzēt =)

Komentāri:

#1 Datorikis @ 2012.11.01 22:52

Un kas tu būsi par programmētāju, ja visus jautājumus prasīsi taisīt citiem?

#2 shadowmangb @ 2012.11.02 01:22

pasdziedējs nepalīdz? Viņš par to saņem algu.
bet vispār
tuvākā divnieka pakāpe no skaitļa N vienmēr būs kvadrātsakne no šī skaitļa.
Tāpēc N, x; real;
x:=SQRT(N);writeln ('Tuvaka divnieka pakape ir ', sqrt(N):0:0, ';')
0:0 nozime, ka noapaļos vērtību uz tuvāko veselo skaitli, tālak jataisa salīdzinajums
if (2^x>N) then
x:=x-1 ; writelen (' Tuvaka pakape ir ');

#3 shadowmangb @ 2012.11.02 01:23

bet te čakars kapinasanu pascal!

#4 shadowmangb @ 2012.11.02 02:24

uzkodēju tev, tiesa gan netradicionālā veidā, bet ja nav īpaši kodēšanas nosacījumu tad derēs.
program kapinatajs;
var N,X:real;
Kapinasana:real;

begin
  writeln ( 'Programma  tuvakas divnieka pakapes noteiksanai');

writeln('Ievadi skaitli N !');
readln(N);
X:=SQRT(N);
Kapinasana := Exp(2*Ln(X));
if (Kapinasana>=N) then
writeln ('Tuvaka divnieka pakape no N ir ', X-1:0:0, ';')
else
writeln ('Tuvaka divnieka pakape no N ir ', sqrt(N):0:0, ';');
readln(X);
end.

#5 Whatever @ 2012.11.02 15:31

@shadowmangb: kvadrātsakne pavisam noteikti nav pareizā atbilde. Piemērs: n=1000, atbildei jābūt 9, nevis 31.

Rekur variants, kas varētu strādāt daudzmaz korekti. Paskaidrojumu, kāpēc tas darbojas meklē algebras grāmatā.

readln(n);
if n > 2 then x := ln(n-1)/ln(2) else x := 0;
writeln(x:0:0);