Sunteți pe pagina 1din 5

Laborator 1 - Algoritmi

1. Scriei i testati o funcie C care implementeaz algoritmul sortrii prin inserie, dup pseudocodul
prezentat la curs. Lucrai cu fiiere header.

MAIN() INSERTION_SORT(A, N)
READ n //lungime array FOR j := 1 TO N - 1
READ_ARRAY(a, n) key := A[j]
INSERTION_SORT(a, n) i:= j 1
PRINT_ARRAY(a, n) // sorted array //insert A[j] into
END MAIN //sorted sequence A[0 .. j-1]
READ_ARRAY( V, N ) WHILE i 0 AND A[i] > key DO
FOR i := 0 TO N 1 A[i+1] := A[i]
READ V[ i ] i := i 1
END FOR END WHILE
END READ_ARRAY A[i+1] := key
END FOR
PRINT_ARRAY(V, N) END INSERTION_SORT
FOR i := 0 TO N 1
PRINT V[ i ]
END FOR
END PRINT_ARRAY

2. Scriei i testati o funcie C care implementeaz algoritmul merge sort, dup pseudocodul prezentat la
curs. Lucrai cu fiiere header.

MAIN() MERGE_SORT(A, P, R)
READ n //lungime array q := 0;
READ_ARRAY(a, n) IF P < R THEN
MERGE_SORT(a, 0, n-1) //mijlocul secventei
PRINT_ARRAY(a, n) // sorted array q := ( P + R) / 2
END MAIN
//divide et impera
//vezi functiile READ_ARRAY si PRINT_ARRAY de
mai sus //sortare prima jumatate
MERGE_SORT( A, P, q)

//sortare a doua jumatate


MERGE_SORT(A, q + 1, R)

//combina cele doua jumatati


MERGE (A, P, q, R);
END IF
END MERGE_SORT
MERGE(A, P, Q, R) i := 1
ARRAY left, right j := 1
FOR k := P TO R
n1 := Q P + 1 IF left[ i ] right[ j ] THEN
n2 := R Q A[ k ] := left[ i ]
i := i + 1
FOR i := 1 TO n1 ELSE
left[ i ] := A[P + i 1] A[ k ] := right[ j ]
END FOR j := j + 1
FOR j :=1 TO n2 END IF
right[ j ] := A[Q + j] END FOR
END FOR END MERGE

left[n1 + 1]=
right[n2 + 1]=
//continuare --

3. Sortare prin selecie. Se consider problema sortrii a unui ir A de n numere utiliznd urmtorul
algoritm: se identific cel mai mic element din A i se interschimb acest element cu A[1]; apoi se
identific al doilea cel mai mic element din A i se interschimb acest element cu A[2]; se continu n
acelai fel cu primele n-1 numere din A. S se scrie pseudocodul pentru acest algoritm. S se scrie i
testeze o funcie C care implementeaz acest algoritm.

Tem:

Combinai sortarea prin interclasare cu sortarea prin inserie direct, astfel nct atunci cnd, la sortarea
prin interclasare, dimensiunea subsirurilor de sortat scade sub un anumit nivel, s se renunte la
recursivitate i s se aplice sortarea prin insertie direct. Calculai complexitatea acestui algoritm.
1. Exemple de implementare a algoritmilor in C pe baza pseudo-codului

Pb1. Calculai cel mai mare divizor comun pentru dou numere naturale citite de la tastatur.

Vom implementa Algoritmul lui Euclid descris prin pseudo-codul i prin codul C:

Pseudo-cod Implementare C
MAIN()
//citire numere
a := READ_NUMBER()
b := READ_NUMBER()
cmmdc:=CALC_CMMDC(a,b)
//afisare ccmdc
PRINT_CMMDC( cmmdc )
END MAIN

CALC_CMMDC(X, Y)
tmp := 0
cmmdc := 0
WHILE Y <> 0 DO
tmp := Y
Y := X MOD Y //rest
X := tmp
END WHILE
cmmdc := X
RETURN cmmdc
END CALC_CMMDC

READ_NUMBER()
DO
READ n //cit. tastatura
WHILE ( n 0 )
RETURN n
END READ_NUMBER

PRINT_CMMDC ( DC )
//afisare monitor
PRINT Cmmdc al celor 2
numere este:
PRINT DC
END PRINT_CMMDC
Pb. 2 Pe un vector de intregi citit de la tastatur s se determine minumul i maximul apoi sa se afiseze
elementele din vector. S se utilizeze funcii i fiiere .h pentru implementarea programului n C.

Pseudo-cod
MAIN () MINIMUM( A, N)
//citire vector a min := A[0]
READ n //n nr elemente FOR i := 1 TO N 1
READ_ARRAY(a, n ); IF A[ i ] < min THEN
min := A[ i ]
min := MINIMUM ( a, n) END IF
max := MAXIMUM (a, n) END FOR
RETURN min
PRINT min END MINIMUM
PRINT max
END MAIN MAXIMUM(A, N)
max := A[0]
READ_ARRAY( V, N ) FOR i := 1 TO N 1
FOR i := 0 TO N 1 IF A[ i ] > max THEN
READ V[ i ] max := A[ i ]
END FOR END IF
END READ_ARRAY END FOR
RETURN max
PRINT_ARRAY(V, N) END MAXIMUM
FOR i := 0 TO N 1
PRINT V[ i ]
END FOR
END PRINT_ARRAY
Implementare C cu fiiere .h
fiier minmax_main.c fiier array_io.h

fiier minmax.h
fiier array_io.c fiier minmax.c

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