Teste de informatică pentru liceu, articole C#, C/C++, PHP
Un program C++ conţine una sau mai multe funcţii, dintre care una, funcţia main() este obligatorie. Un program poate să conţină apeluri ale unor funcţii predefinite sau definite de utilizator. De exemplu, dacă dorim să calculăm radicalul unui număr real, apelăm funcţia sqrt care se găseşte în biblioteca de funcţii cmath. Dar dacă dorim să determinăm suma cifrelor unui număr natural, atunci suntem nevoiţi să ne construim propria funcţie.Aceste funcţii pe care le definim se numesc funcţii utilizator. Acestea se definesc înainte de funcţia main, sau măcar prototipul lor este descris înaintea funcţiei main.
Funcţiile predefinite se găsesc într-un header, precum cmath care se include în program printr-o linie de forma:
#include<cmath>
Dacă dorim să definim un header propriu, atunci acesta va avea extensia .h şi va fi inclus tot cu ajutorul directivei include, dar numele header-ului va fi scris între ghilimele:
#include "nume_header.h"
Dorim în continuare să definim un header care să conţină funcţii referitoare la operaţii cu mulţimi de numere naturale din mulţimea {0, 1, 2, ..., 1000}. Pentru implementarea mai simplă a operaţiilor, o mulţime va fi un vector t de lungime 1001, în care t[i] = 1 dacă i este în mulţime şi t[i] = 0, dacă i nu este în mulţime. Aceasta înseamnă că de exemplu mulţimea {2, 3, 6, 7, 9} va fi reprezentată de un vector de lungime 1001 care memorează valoarea 1 la poziţiile 2, 3, 6, 7, 9 şi în rest 0. Se va utiliza deci mai multă memorie, chiar şi pentru mulţimi mici, dar operaţiile vor fi rapide şi uşor de implementat.
Operaţiile cu mulţimi pe care le vom defini:
Header-ul este următorul:
#include<iostream> #include<ctime> #include<cstdlib> #define DimMax 1001 using namespace std; void Init(int t[])// multime vida { int i; for (i = 0; i < DimMax; i++) t[i] = 0; } int EsteVida(int t[]) { int i; for (i = 0; i < DimMax; i++) if (t[i] == 1) return 0; return 1; } int Apartine(int x, int t[])// x apartine lui t? { if (t[x] == 1) return 1; return 0; } void Reuniune(int x, int t[]) // t = t U {x} { t[x] = 1; } void Reuniune(int a[], int b[])// a = a U b { int i; for (i = 0; i < DimMax; i++) a[i] = a[i] | b[i]; } void Reuniune(int a[], int b[], int c[])//c=a U b { int i; for (i = 0; i < DimMax; i++) c[i] = a[i] | b[i]; } void Intersectie(int a[], int b[], int c[])//c=a * b { int i; for (i = 0; i < DimMax; i++) c[i] = a[i] * b[i]; } void Diferenta(int a[], int x)// a = a - {x} { a[x] = 0; } void Diferenta(int a[], int b[], int c[])//c = a - b { int i; for (i = 0; i < DimMax; i++) if (a[i] == 1 && b[i] == 0) c[i] = 1; else c[i] = 0; } void ProdCart(int a[], int b[]) { int i, j; for (i = 0; i < DimMax; i++) if (a[i] == 1) { for (j = 0; j < DimMax; j++) if (b[j] == 1) cout << "(" << i << "," << j << ") "; } cout << "\n\n"; } void Afisare(int t[]) { int i; for (i = 0; i < DimMax; i++) if (t[i] == 1) cout << i << " "; cout << "\n"; }
Salvaţi fişierul sub numele mulţimi.h, apoi creaţi un fişier cu extensia .cpp care va utiliza acest header. Iată un exemplu:
#include "multimi.h" int a[DimMax], b[DimMax], c[DimMax]; int main() { int i; srand(time(0)); Init(a); Init(b); for (i = 0; i < 5; i++) Reuniune(rand()%30, a); for (i = 0; i < 7; i++) Reuniune(rand()%30, b); cout << "a = "; Afisare(a); cout << "b = "; Afisare(b); Reuniune(a,b,c); cout << "b = "; Afisare(c); cout << "Produs cartezian a x b :\n"; ProdCart(a, b); return 0; }
Mediile de lucru actuale permit ca o astfel de aplicaţie precum cea de mai sus să fie conţinută într-un proiect în care va apărea inclus şi fişierul header, şi fişierul .cpp. Altfel este evident că pentru a putea fi identificat, fişierul mulţimi.h trebuie să se afle în acelaşi folder cu fişierul .cpp.
Propun spre implementare un header care permite operaţii cu vectori, deci în care se definesc funcţii pentru citire, afişare, sortare, căutare etc. Un alt header util poate conţine funcţii pentru lucrul cu şiruri de caractere, funcţii care de exemplu să evite lucrul cu pointeri.
Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică
Utilizator 7-5-2015 0:56:19
error 'srand' was not declared in this scope, spuneti-mi va rog frumos cum trebuie sa il declar
CPP 10-5-2015 17:9:52
Trebuie incluse in antet:
#include <ctime>
#include <cstdlib>
Gabi 19-9-2015 9:26:51
Foarte bun articolul, mulțumesc frumos!