Sunteți pe pagina 1din 4

MINISTERUL AGRICULTURII I INDUSTRIEI

ALIMENTARE AL REPUBLICII MOLDOVA

Colegiul Agroindustrial Gheorghe Rducan


din satul Grinui, r. Ocnia

Olimpiada local
la Informatic Ediia 2017

Elaborat : Russu Oleg


EXAMINAT:
Catedra Discipline de cultur general
Proces verbal nr.___ din ______________
ef catedr _________________
Russu O.

Grinui 2017
Olimpiada local la Informatic Ediia 2017

Lucrarea conine problemele propuse la Olimpiada local la Informatic a elevilor,


ediia 2017. Pentru fiecare problem sunt descrise algoritmul i soluia respectiv n
limbajul de programare PASCAL.
Materialele Olimpiadei pot fi de un real folos la studierea Informaticii att elevilor,
ct i profesorilor de Informatic.

Problema 1. S se scrie un program Pascal pentru crearea unui fiier text i


afiarea numrului de linii din fiier.

Problema 2. Convertorul

Fiind mptimit de informatic, Ion a construit un dispozitiv digital, pe care l-a denumit
convertor. Acest dispozitiv accepta la intrare numerele naturale a scrise n baza b i furnizeaz la
ieire numerele respective, scrise n baza 10 (vezi figura de mai jos).

a b z

De exemplu, dac la intrarea convertorului este aplicat numrul , iar , la ieirea


convertorului va aprea numrul zecimal .
Amintim, c n sistemele de numeraie n baza b, , se utilizeaz urmtoarele cifre: 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Ion a mprumutat convertorul prietenei sale Lenua, care, fiind i ea mptimit de
informatic, a decis s elaboreze un program ce simuleaz funcionarea convertorului.

Sarcin. Scriei un program, care, cunoscnd numrul a de la intrarea convertorului i baza b


n care este scris acest numr, calculeaz numrul zecimal z de la ieirea convertorului.

Date de intrare. Fiierul text CONVERT.IN conine pe prima linie un ir de caractere ce


reprezint numrul a scris n baza b. Linia a doua a fiierului de intrare conine baza b, scris n
sistemul zecimal.

Date de ieire. Fiierul text CONVERT.OUT va conine pe o singur linie numrul ntreg
zecimal z.

Restricii. . Numrul a este format din cel mult apte caractere. Timpul de execuie nu va
depi 0,1 secunde. Programul va folosi cel mult 32 Megaoctei de memorie operativ. Fiierul
surs va avea denumirea CONVERT.PAS, CONVERT.C sau CONVERT.CPP.

Exemplu. Pentru exemplul din enunul problemei, fiierele de intrare i ieire sunt:

CONVERT.IN CONVERT.OUT
121 16
3
Rezolvare
Admitem c numrul natural N este format din n 1 cifre:
N cn cn1 ... c1c0 .
Valoarea acestui numr se calculeaz n funcie de baza sistemului de numeraie b dup cum urmeaz:
(N )b cn bn cn1bn1 c1b1c0b0.
Prin urmare, pentru a transforma numrul a din fiierul de intrare n numrul zecimal z, parcurgem irul
respectiv de caractere de la dreapta la stnga, nmulim fiecare cifr cu semnificaia rangului respectiv i
nsumm produsele obinute. ntruct numrul a conine cel mult apte cifre, valoarea lui maximal este
. n consecin, ]n cayul mediului de programare Turbo Pascal,
variabila z, care reprezint numrul zecimal de la ieirea convertorului, trebuie s fie de tipul longint.
Pentru a transforma cifrele din componena irului de caractere a de la intrarea convertorului n valori
numerice, n programul ce urmeaz este folosit funcia ord, care returneaz numerele de ordine ale
caracterului conform tabelului de codificare utilizat mediul respectiv de programare. Valoarea numeric a
fiecrei cifre poate fi calculat cunoscnd numerele de ordine ale caracterelor 0 i A.

Program Convert;
{ Clasele 07-09 }
var a : string;
b : integer;
z : longint;

procedure Citeste;
var Intrare :
text; begin
assign(Intrare, 'CONVERT.IN');
reset(Intrare); readln(Intrare,
a); readln(Intrare, b);
close(Intrare);

end; { Citeste }

procedure Scrie;
var Iesire :
text; begin
assign(Iesire, 'CONVERT.OUT');
rewrite(Iesire);
writeln(Iesire, z);
close(Iesire);
end; { Citeste }

procedure Convertor;
{ Transforma a in z }
var i : integer; { rangul cifrei }
c : integer; { valoarea cifrei curente }
p : longint; { semnificatia rangului }
begin
z:=0;
p:=1;
for i:=length(a) downto 1
do begin
if a[i] in ['0'..'9'] then c:= ord(a[i])-ord(0) else
c:= ord(a[i])-ord(A)+10;
z:=z+c*p;
p:=p*b;
end;

end; { Convertor }

begin
Citeste;
Convertor;
Scrie;
end.
Din analiza textului procedurii Convertor rezult c aceast procedur conine doar un singur
ciclu for. Evident, instruciunile din componena acestui ciclu vor fi executate de cel mult apte ori,
mrime neglijabil n comparaie cu capacitatea de prelucrare a calculatoarelor personale din
laboratorul de Informatic. Prin urmare, timpul de calcul cerut de procedura Convertor va fi cu
mult mai mic dect 0,1 secunde.

PROGRAM fisiere_text;
{program care afiseaza numrul de linii dintr-un fiier text}
VAR
f:text;
nr:integer;
BEGIN
Assign(f,Fis.txt);
Reset(f);
nr:=0;
WHILE NOT eof(f) DO
BEGIN
readln(f);
nr:=nr+1
END;
Close(f);
writeln(Fiierul Fis.txt are ,nr, linii);
readln
END {fiiere_text}.

S-ar putea să vă placă și