Sunteți pe pagina 1din 48

INFORMATIC PENTRU GIMNAZIU anul I de studiu

INFORMATIC
Suport de lucru pentru anul I de studiu - gimnaziu

-1 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

I. INTRODUCERE Calculatorul, cruia datorit complexitii sale i se mai spune sistem de calcul este alctuit din dispozitive care realizeaz: introducerea datelor cu tastatur, mouse, scaner i altele; prelucrarea datelor pe baza unui program cu microprocesorul; extragerea (vizualizarea) rezultatelor - folosind imprimanta, monitorul i nu numai; memorarea datelor cu ajutorul memoriei interne, discului hard, discului flexibil (floppy), compact discului (CD), discului digital versatil (DVD) i altele. Sistemul de calcul este un ansamblu format din trei componente: hardware (componente fizice); software (componente logice); peopleware (personalul necesar pentru programarea, operarea i ntreinerea calculatorului). Definiie: BIT Unitatea de msur utilizat pentru a msura cantitatea de informaie se numete BIT (BInary digiT cifr binar). Un bit exprim o cifr binar (0 sau 1) sau o condiie logic (adevrat sau fals). Definiie: OCTET (BYTE) Un grup de 8 bii se numete octet sau byte i poate reprezenta diferite tipuri de informaii, cum ar fi o liter din alfabet, o cifr zecimal sau altceva. Pentru cantiti mari de informaie se utilizeaz multipli octetului: 1 kilobyte (1 KB) = 1024 bytes 1 megabyte (1 MB) = 1024 KB 1 gigabyte (1 GB) = 1024 MB 1 terrabyte (1 TB) = 1024 GB Definiie: INFORMATICA Informatica este tiina care se ocup cu studiul prelucrrii automate a datelor n scopul obinerii informaiilor. Deseori se confund termenul informaie cu cel de dat. Datele sunt nite cunotine care au fost deja folosite, pe cnd informaiile sunt obinute n urma prelucrrii datelor. SISTEMUL DE NUMERAIE ZECIMAL I BINAR Numere zecimale Metoda noastr pentru scrierea numerelor se bazeaz pe puterile numrului 10. Vom vedea imediat ce nseamn putere ... Observaie: cu semnul * notm operaia de nmulire. De ce? Ca s nu confundm litera x cu semnul de nmulire.

-2 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Definiie: PUTERE Dac am dou numere, s zicem a i b, atunci prin a la puterea b neleg operaia notat cu ab care este egal cu a * a * ... * a, unde pe a l nmulesc cu el nsui de (b-1) ori. Exemplu: zece la puterea a patra este 104 = 10*10*10*10 = 10000 (adic 10 nmulit cu el nsui de trei ori) Fie numrul 2468. Atunci, 2 reprezint 2 mii, 4 reprezint 4 sute, 6 reprezint 6 zeci, iar 8 reprezint 8 uniti: 2468 = 2*1000 + 4*100 + 6*10 + 8*1 O mie este 10*10*10, ceea ce poate fi scris 103, sau 10 la puterea a treia. Utiliznd aceast notaie, putem scrie relaia precedent astfel: 2468 = 2*103 + 4*102 + 6*101 + 8*100 aceasta este forma notaiei n baza 10 Observaii: 100 = 1 (zece la puterea zero este egal cu 1) n general, orice numr diferit de zero ridicat la puterea zero este egal cu 1 Deoarece notaia este bazat pe puterile lui 10, o denumim notaie n baza 10 sau zecimal. Oricine poate alege un alt numr ca baz. Pentru a marca faptul c numrul 2468 este scris n baza 10, l vom nota 2468 (10). Exerciiu S se scrie urmtoarele numere zecimale sub forma notaiei n baza 10 (zecimal). 1209(10) = 804(10) = 7180(10) = Numere binare Chiar dac folosii notaii zecimale pentru a scrie un numr ntreg, calculatorul l va stoca (memora) n valoare binar, sau n baza 2. n notaia binar se folosesc doar dou cifre, 0 i 1. De exemplu, 10011011 este un numr binar. Ca s l deosebim de numerele reprezentate n alte sisteme de numeraie, cum ar fi sistemul n baza zece, l vom nota: 10011011 (2) Numerele binare se bazeaz pe puterile lui 2: 10011011 (2) = 1*27+0*26+0*25+1*24+1*23 +0*22+1*21+1*20 = 128(10)+0(10)+0(10)+16(10)+8(10)+0(10)+2(10)+1(10) = 155 (10) Observaie: calculul de mai sus reprezint modalitatea de a trece un numr scris n baza 2 n numrul corespunztor, scris n baza 10.

-3 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exerciiu S se scrie urmtoarele numere binare n baza zece. 101001(2) = 110010(2) = 011001(2) = Notaia binar se potrivete memoriei unui calculator, n care fiecare element, care se numete bit, poate fi activ (egal cu 1) sau inactiv (egal cu 0). Memoria este organizat de obicei n grupuri de bii, care se numesc octei, fiecare octet avnd 8 bii. Biii ntr-un octet sunt numerotai dup puterile lui 2 corespunztoare. Astfel, cel mai din dreapta este bitul 0, urmtorul este bitul 1 i aa mai departe. Mai jos este prezentat un numr ntreg pe doi octei. Observaie: cel mai din dreapta bit se numete bitul cel mai puin semnificativ (bitul zero), iar cel mai din stnga bit se numete bitul cel mai semnificativ (bitul 15, n exemplul care urmeaz). Exemplu de numr ntreg reprezentat pe 16 bii (doi octei):
numr bit valoare bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 1 0 0 1 0 0 0 1 0

Valoarea numrului binar de mai sus n baza 10 este: 1*211 + 1*28 + 1*25 + 1*21 = 2048 + 256 + 32 + 2 = 2338 Observaie: n suma de mai sus lipsesc termenii corespunztorii biilor cu valoarea zero, deoarece acetia sunt egali cu zero. Atenie: n calculator un numr ntreg poate fi reprezentat pe 32 de bii (4 octei), iar mai nou, pe 64 de bi, nu pe 16 bii (doi octei). Exist ns i excepii, n care nu lucrm cu numere ntregi mari i ajung doi octei pentru reprezentarea lor. Corespondene zecimal binare Numr zecimal Numr binar 0(10) 0(2) 1(10) 1(2) 2(10) 10(2) 3(10) 11(2) 4(10) 100(2) 5(10) 101(2) 6(10) 110(2) 7(10) 111(2) 8(10) 1000(2)

Numr zecimal 9(10) 10(10) 11(10) 12(10) 13(10) 14(10) 15(10) 16(10) 17(10)

Numr binar 1001(2) 1010(2) 1011(2) 1100(2) 1101(2) 1110(2) 1111(2) 10000(2) 10001(2)

-4 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Trecerea unui numr din baza 10 n baza 2 Lund spre exemplu numrul 57 i folosind teorema mpririi cu rest, obinem : 57 2 . 56 28 1 28 0

2 . 14 14 0

2 7 6 1

. 2 . 3 2 . 2. 1 1

57( 10) = 111001( 2 )

Observaie: Cifrele obinute pentru scrierea n baza 2 sunt luate ncepnd cu ultima mprire. De reinut: Pentru a trece un numr din baza 10 n baza 2 se mparte numrul la 2 i se reine restul, apoi ctul obinut se mparte la 2 i se reine restul; se continu procedeul pn se obine ctul 0. Numrul scris n baza 2 se obine scriind toate resturile de la ultimul la primul. Exemple: 2 = 2(10) =10(2); 62(10) = 111110(2); 1995(10) = 11111001011(2); 1024(10) = 10000000000(2) ; Exerciiu S se scrie urmtoarele numere zecimale n baza doi. 39(10) = 47(10) = 64(10) = Datele se pstreaz n memoria intern, codificate n sistemul de numeraie binar. Folosind codul ASCII (American Standard Code for Information Interchange cod standard american pentru schimbul de informaii) fiecrui caracter de pe tastatur (liter, cifr, semn special) i se ataeaz n mod unic un numr din mulimea numerelor ntregi {0 ... 255}. De exemplu, litera mare A, are codul n zecimal 65, litera B are codul 66 i aa mai departe, iar caracterul 1 are codul 49, caracterul 2 are codul 50, caracterul 3 are codul 51 etc. Memoria calculatorului este alctuit din componente fizice care au dou stri: fals, codificat prin 0 i adevrat, codificat prin 1. Aadar, datele vor fi reprezentate n calculator printr-o succesiune de bii de lungime fix. De exemplu, numrul zecimal ntreg 92 va fi reprezentat n calculator pe 4 octei: octetul 3 octetul 2 octetul 1 octetul 0 00000000 00000000 00000000 01011100 iar litera mare A (care are codul ASCII 65), va fi reprezentat n calculator pe 1 octet: octetul 0 01000001

-5 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. S se scrie urmtoarele numere din baza 10 n baza 2: 2(10) = 4(10) = 8(10) = 16(10) = 31(10) = 120(10) = 256(10) = 2. S se scrie urmtoarele numere din baza 2 n baza 10: 1100(2) = 111(2) = 1000(2) = 101011(2) = 3. De ci bii avem nevoie pentru a putea reprezenta n baza 2 numrul 65(10)? 4. Care este cel mai puin semnificativ bit al numrului 38(10) reprezentat n baza 2? 5. Se d numrul zecimal 29(10). Ce valoare are bitul 1 n reprezentarea binar a acestui numr? 6. S se scrie n baza 2 codul ASCII al literei mari B. 7. S se descopere modul n care se poate utiliza aplicaia Calculator pentru efectuarea operaiilor de conversie a numerelor din baza 10 n baza 2 i din baza 2 n baza 10. Aplicaia Calculator este accesibil din: Start All Programs Accessories Calculator. Verificai apoi dac ai rezolvat corect exerciiile 1, 2, 3, 4, 5 i 6.

-6 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

II. DE LA ALGORITM LA PROGRAMUL C Dac n matematic noiunea cea mai important este numrul, n informatic cea mai important noiune cu care se lucreaz este algoritmul. Definiie: Prin algoritm vom nelege o metod universal de rezolvare a problemelor de un anumit tip. Algoritmul este o succesiune finit de operaii cunoscute, care se execut ntr-o ordine stabilit astfel nct plecnd de la un set de date (numite datele problemei sau date de intrare = D.I. ) ce ndeplinesc anumite condiii, s obinem ntr-un interval de timp finit un set de valori (numite soluiile problemei sau date de ieire = D.E.). Proprietile algoritmului Nu orice descriere pas cu pas a etapelor rezolvrii unei probleme reprezint un algoritm . Pentru a fi algoritm, o metod de rezolvare a unei probleme trebuie s aib trei proprieti: 1. generalitate (universalitatea) - un algoritm ofer o metod general de rezolvare a unui anumit tip de probleme; 2. finitudine - orice algoritm se ncheie ntr-un timp dup un numr finit de pai; 3. unicitatea - pentru aceleai date de intrare se obin totdeauna aceleai date de ieire. Pentru a rezolva o problem cu ajutorul calculatorului trebuie s procedai astfel: s stabilii datele de intrare i datele de ieire; s elaborai algoritmul i s l descriei folosind schema logic sau limbajul pseudocod; s transcriei algoritmul ntr-un limbaj de programare (construirea programului); s executai programul cu mai multe seturi de date de intrare, s corectai erorile i s stabilii rezultatele. Problem rezolvat Activitatea unui lucrtor de la Primrie este aceea de a delimita, cu panglic, terenurile agricole, de form dreptunghiular, ale ranilor. Lucrtorul v cere s l ajutai s calculeze ci metri de panglic i sunt necesari pentru a mprejmui un teren, de form dreptunghiular, a crui lungime i lime le cunoate. Observai c el vrea s scriei un program care s i rezolve problema pentru orice teren agricol de form dreptunghiular, de dimensiuni cunoscute. 1. Datele problemei Date de intrare: lungimea i limea terenului, pe care le numim lung i lat. Date de ieire: perimetrul terenului, pe care il numim perim. 2. Se elaboreaz algoritmul, adic se stabilete o succesiune finit i bine stabilit de operaii (pai) prin care datele de intrare se transform n rezultate (date de ieire). Algoritmii lucreaz cu date care pot fi variabile sau constante. O variabil corespunde unei zone de memorie, are un nume i o valoare ataat. De exemplu, lung, lat i perim sunt variabilele ce intervin n problema lucrtorului. n cadrul algoritmului, datele sunt supuse urmtoarelor operaii: operaia de citire realizeaz ntroducerea de date n memoria calculatorului;
-7 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

operaia de scriere realizeaz extragerea rezultatelor din memoria calculatorului i, de multe ori, afiarea lor; operaia de atribuire permite efectuarea de calcule; operaia de decizie n funcie de ndeplinirea sau nendeplinirea unei condiii, algoritmul se ramific.

De reinut: Algoritmii efectueaz 3 tipuri de operaii: intrare/ieire (citire/scriere) atribuire decizie Definiie: Algoritm secvenial Un algoritm de forma: operaie 1 operaie 2 ............... operaie n este un algoritm secvenial. Schema logic are simboluri adecvate pentru fiecare operaie. Simboluri utilizate n schema logic Semnificaie bloc terminal indic nceputul sau sfritul algoritmului bloc de citire/scriere corespunde operaiei de citire sau scriere bloc de calcul corespunde operaiei de atribuire

bloc de decizie descrie operaia de decizie

conector de pagin permite scrierea algoritmului pe mai multe pagini

-8 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Limbajul pseudocod reprezint o alt modalitate foarte utilizat de reprezentare a algoritmilor. Spre deosebire de schema logic, care utilizeaz mijloace grafice, limbajul pseudocod folosete o serie de cuvinte-cheie. De aceea se spune c este o modalitate textual (adic prin cuvinte) de reprezentare a algoritmilor. n exemplul anterior cuvintele-cheie utilizate au fost: start, stop, citete, scrie. Scrierea programului conform algoritmului elaborat anterior. Un program reprezint o succesiune de comenzi date calculatorului n scopul executrii lor. Mai jos este scris programul n C care rezolv problema lucrtorului de la Primrie. Dac sunt lucruri pe care nu le nelegei, nu v speriai. Vom reveni asupra acestuia. #include <stdio.h> void main(void) { int lung, lat, perim; printf(Introduceti lungimea terenului: ); scanf(%d, &lung); printf(Introduceti latimea terenului: ); scanf(%d, &lat); perim = 2*(lung+lat); printf(Lungimea panglicii este de %d metri., perim); }

-9 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exerciiu Completai blocurile schemei logice i scriei algoritmul n limbajul pseudocod pentru urmtoarea prolem: Schema logic Se cunosc lungimile laturilor unui teren agricol de form triunghiular (n metri). Determinai ci metri de srm sunt necesari pentru mprejmuirea lui. Date de intrare: Date de ieire:

Pseudocod:

- 10 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. Completai blocurile schemei logice i scriei algoritmul n limbajul pseudocod pentru urmtoarea prolem: Schema logic Pentru echipa de fotbal FC Steaua calculai golaverajul tiind c acesta se calculeaz ca diferena dintre numrul de goluri marcate i numrul golurilor primite. Date de intrare: Date de ieire:

Pseudocod:

- 11 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

2. Reprezentai algoritmul sub form de schem logic i limbaj pseudocod pentru urmtoarea problem: Un alergtor parcurge un traseu a crui lungime o cunoate, fiind exprimat n km. Ci metri are traseul alergtorului? Date de intrare: Date de ieire: Schema logic Limbaj pseudocod

- 12 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

3. Concepei un enun pentru problema care are ca algoritm schema logic reprezentat mai jos. Enunul problemei:

- 13 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

III. DECLARAREA VARIABILELOR I CONSTANTELOR Datele cu care lucreaz algoritmii pot fi variabile sau constante. n program, ele se declar astfel: const char a[]=elev; int nota1, nota2; char adresa[80]; La declarare se precizeaz numele variabilelor i constantelor (n cazul de mai sus: a, nota1, nota2, adresa) i tipul lor (n cazul de mai sus: char, int, char). Variabilele i constantele pot fi: ntregi (int) reale (float sau double) caracter (char) ir de caractere (char[]) i altele ... Se observ c n cazul declaraiei const char a[]=elev; n interiorul parantezei drepte nu apare niciun numr, iar n cazul declaraiei char adresa[80]; n interior este numrul 80, adic adresa este o variabil de tip ir de caractere, cu lungimea de 80 de caractere. Precizri: n primul caz, nu este nevoie s spunem care este lungimea irului de caractere deoarece chiar n momentul declaraiei, constanta a primete i valoarea sa (elev). Aadar, se poate cunoate, din declaraie, c a va avea lungimea de 4 caractere. n cel de al doilea caz, trebuie s precizm care va fi lungimea variabilei adresa, deoarece nu se face nicio atribuire n acel moment i nu se poate deduce numrul caracterelor variabilei adresa. De aceea, n declaraie, se specific aceast lungime. n cadrul algoritmului, asupra variabilelor se execut operaii de citire i scriere. Corespunztor, n program se utilizeaz funciile scanf pentru citire i printf pentru scriere. Exemplu #include <stdio.h> void main(void) { char nume[80]; int varsta; printf(Tasteaza numele tau:); scanf(%s, nume); printf(Tasteaza varsta:); scanf(%d, &varsta); printf(%s ai varsta de %d ani !!!, nume, varsta); } Efectul execuiei programului de mai sus va fi: Tasteaza numele tau: Stefan Tasteaza varsta: 10 Stefan ai varsta de 10 ani !!!
- 14 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

S analizm programul de mai sus: Prima linie: #include <stdio.h> Aceast declaraie exist n aproape orice program C. Prin ea programul este informat c, funciile de citire scanf i de scriere printf sunt definite n fiierul stdio.h. Dac aceast declaraie nu ar exista, programul ne-ar da un mesaj de eroare prin care ne-ar informa c nu tie ce e aia scanf i printf. A doua i a treia linie: void main(void) { Aa ncepe un program. Ultima linie: } Aa se termin programul. Liniile 4 i 5: char nume[80]; int varsta; Aici se declar variabila nume care este de tipul ir de caractere i este lung de 80 de caractere. Apoi se declar variabila varsta care este de tipul ntreg. Linia 6: printf(Tasteaza numele tau:); Cu ajutorul funciei printf, se scrie pe ecran mesajul Tasteaza numele tau: Se observ c mesajul este pus ntre ghilimele. Linia 7: scanf(%s, nume); Cu ajutorul funciei scanf, se citete de la tastatura un ir de caractere. Utilizatorul scrie un nume i apas apoi tasta ENTER. Numele scris la tastatura va fi preluat i atribuit vaiabilei nume. Se observ aici c, ntre ghilimele apare %s. Acesta indic funciei scanf c va citi de la tastatur un ir de caractere (s vine de la string care nseamn ir). Linia 8: printf(Tasteaza varsta:); Cu ajutorul funciei printf, se scrie pe ecran mesajul Tasteaza varsta: Se observ c mesajul este pus ntre ghilimele. Linia 9: scanf(%d, &varsta); Cu ajutorul funciei scanf, se citete de la tastatura un varsta. Utilizatorul scrie un numr i apas apoi tasta ENTER. Numrul scris la tastatura va fi preluat i atribuit vaiabilei varsta. Se observ aici c, ntre ghilimele apare %d. Acesta indic funciei scanf c va citi de la tastatur un numr ntreg (d vine de la decimal care nseamn numr zecimal, adic numr ntreg scris n baza 10). Se mai observ aici c, nainte de numele variabilei varsta, apare caracterul &. Acesta de regul nu trebuie s lipseasc atunci cnd citim numere. Excepie este cazul n care citim un ir de caractere (vezi linia 7).
- 15 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Linia 10: printf(%s ai varsta de %d ani !!!, nume, varsta); Cu ajutorul funciei printf, scriem pe ecran mesajul dintre ghilimele. Mesajul ncepe cu %s, care va fi nlocuit de coninutul primei variabile (nume), apoi urmeaz ai varsta de, %d va fi nlocuit de coninutul celei de a doua variabile (varsta) i n final mesajul se ncheie cu !!! Despre ultima linie, am discutat deja. Aceasta ncheie programul. Observaie: Numele de variabile i de constante se formeaz numai cu: litere cifre caracterul _ i trebuie s nceap obligatoriu cu o liter sau cu caracterul _ Spre exemplu, a1, nr, v32, a_2, x, xy sunt nume de variabile i constante corecte. Exerciiu: Subliniai numele corecte pentru variabile din urmtoarea list: 32_a, a_32, x1, x2, s$, $b, xy, lung camera, lung_camera Exerciiu: Completai n coloana liber de tip de date vei folosi pentru a lucra cu: alocaia unui elev preul unei cri numrul de elevi ai unei clase numele profesorilor numrul crilor dintr-o bibliotec autorii crilor Citirea de la tastatur scanf Pentru a citi numere (ntregi, reale), texte de la tastatur, se folosete funcia scanf. Pentru a putea folosi scanf, trebuie inclus, nainte de nceperea programului, fiierul stdio.h astfel: #include <stdio.h> Citirea unui numr ntreg Pentru a citi un numr ntreg de la tastatur, se declar o variabil de tip numr ntreg, dup care, cu ajutorul scanf se poate citi de la tastatur numrul i plasa n acea variabil: int numar; scanf(%d, &numar); %d nseamn c se va citi un numr ntreg & - nseamn c numrul scris la tastatur va fi plasat n variabila numr.

- 16 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Citirea unui numr real Pentru a citi un numr real de la tastatur, se declar o variabil de tip numr real, dup care, cu ajutorul scanf se poate citi de la tastatur numrul i plasa n acea variabil: float numar_real; scanf(%f, &numar_real); %f nseamn c se va citi un numr real (flotant, n simpl precizie) & - nseamn c numrul scris la tastatur va fi plasat n variabila numr_real. ... sau, dac doresc s folosesc numere reale n precizie dubl declar variabila: double numar_real; Citirea unui ir de caractere Pentru a citi un ir de caractere de la tastatur, se declar o variabil de tip ir de caratere, dup care, cu ajutorul scanf se poate citi de la tastatur irul de caractere i plasa n acea variabil: char mesaj[60]; scanf(%s, mesaj); %s nseamn c se va citi un ir de caractere n cazul citirii unui ir de caractere, nu se folosete semnul &, nainte de variabila mesaj. Scrierea pe ecran printf Pentru a scrie pe ecran numere (ntregi, reale), texte, se folosete funcia printf. Pentru a putea folosi printf, trebuie inclus, nainte de nceperea programului, fiierul stdio.h astfel: #include <stdio.h> Scrierea unui numr ntreg Pentru a scrie un numr ntreg pe ecran, se folosete funcia printf astfel: printf(%d, numar); %d nseamn c se va scrie un numr ntreg Scrierea unui numr real Pentru a scrie un numr real pe ecran, se folosete funcia printf astfel: printf(%f, numar_real); %f nseamn c se va scrie un numr real Scrierea unui ir de caractere din variabil Pentru a scrie pe ecran un ir de caractere dintr-o variabil, se folosete funcia printf astfel: printf(%s, mesaj); %s nseamn c se va scrie un ir de caractere

- 17 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Scrierea unui ir de caractere direct din program Pentru a scrie pe ecran un ir de caractere direct din program, se folosete funcia printf astfel: printf(Acesta este mesajul pe care vreau sa il scriu !); Trecerea la rndul urmtor, cnd se scrie pe ecran Pentru a trece la rndul urmtor cnd scriem pe ecran, putem scrie un mesaj special (\n)care face acest lucru: printf(\n); Exemplu: printf(Acesta este mesajul din primul rand\n); printf(Acesta este mesajul din al doilea rand); Programul va afia: Acesta este mesajul din primul rand Acesta este mesajul din al doilea rand Observaie: vom mai reveni asupra funciilor printf i scanf. Problem rezolvat Se citesc titlul unei cri i preul acesteia. S se afieze titlul crii i preul crii scumpit cu 24 lei folosind limbajul pseudocod i limbajul C. Date de intrare: titlu, pret Date de ieire: titlu, pret_nou Limbaj pseudocod Start citeste(titlu) citeste(pret) pret_nou = pret + 24 scrie (titlu) scrie(pret_nou) Stop

Limbaj C #include <stdio.h> void main(void) { char titlu[60]; int pret; int pret_nou; scanf(%s, titlu); scanf(%d, &pret); printf(%s, titlu); printf( costa acum ); printf(%d, pret_nou); }

- 18 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exerciiu: Precizai ce se afieaz n urma executrii urmtoarelor dou programe C: #include <stdio.h> #include <stdio.h> void main(void){ void main(void){ printf(1 iunie); printf(Sunt un elev\n); printf(2007); printf(pasionat de informatica\n); printf(de la Gimnaziul George Cosbuc.\n); printf(Tirgu Mures); } } Se afieaz: Se afieaz:

Exerciiu: Programele urmtoare citesc trei note la informatic ale unui elev i trebuie s le afieze: a) unele dup altele b) unele sub altele Completai programele astfel nct s rspund cerinelor: #include <stdio.h> #include <stdio.h> void main(void) void main(void) { { int nota1, nota2, nota3; int n1, n2, n3; printf(Introduceti notele\n); printf(Introduceti notele\n); scanf(%d, &nota1); scanf(%d, &n1); scanf(%d, &nota2); scanf(%d, &n2); scanf(%d, &nota3); scanf(%d, &n3);

- 19 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. Se citesc numele i greutatea (n grame) a doi copii. S se scrie programul C, care citete aceste date de intrare i apoi afieaz numele copiilor i greutatea lor n kilograme, ca n exemplul de mai jos: Exemplu: Programul citete Adina 35000 Dan 41000 Programul afieaz Adina 35kg Dan 41kg

- 20 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

IV. CALCULE CU DATE DE TIP NTREG Pentru a realiza calcule n cadrul algoritmilor se utilizeaz operaia de atribuire. Ea are urmtoarea form: variabila = expresie; Expresia din partea dreapt a semnului egal poate fi format din: constante; variabile; apeluri de funcii; operatori. De regul, variabila i expresia trebuie s aib acelai tip. n expresiile numerice pot aprea operatori aritmetici: +. -, *, /, %, ++, --. Mai sunt i alii ... Operatorul % (modulo) calculeaz restul mpririi ntregi a dou numere. De exemplu 7%4 va fi egal cu restul mpririi ntregi a lui 7 cu 4, adic 3. Explicaie: 7 / 4 = 1 rest 3. Operatorul de mprire mprirea a dou numere ntregi se face cu ajutorul operatorului: / Rezultatul mpririi a dou numere ntregi este restul mpririi. Exemplu: int a, b, c; /* declaram variabilele a, b si c ca fiind numere intregi */ a=20; /* lui a ii dam valoarea 20 */ b=3; /* lui b ii dam valoarea 3 */ c=a / b; /* c va fi egal cu catul impartirii lui a la b */ printf(%d\n,c); c=a % b; /* acum c va fi egal cu restul impartirii lui a la b */ printf(%d,c); Acest cod va afia: 6 2 Explicaie: 20 / 3 = 6 rest 2 Observaie: textul cuprins ntre /* i */ este un comentariu. Acesta nu face parte din program. Operatorul ++ este unul de incrementare (mrire cu 1). De exemplu, secvena: int i; i = 7; printf(%d\n,i); i++; printf(%d\n,i); va afia: 7 8

/* incrementare */

La fel, operatorul -- este unul de decrementare (micorare cu 1).

- 21 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Not: n loc de i++; poate fi scris i i = i + 1; La fel, n loc de i--; poate fi scris i i = i - 1; Problem rezolvat S se calculeze ultima cifr a produsului a dou numere naturale, mai mici ca 200, numerele fiind citite de la tastatur. #include <stdio.h> /* Calculeaza ultima cifra a produsului a*b */ void main(void) { int a, b, c, p; printf(Introduceti numarul a: ); scanf(%d, &a); printf(Introduceti numarul b: ); scanf(%d, &b); p = a * b; c = p % 10; printf(Ultima cifra a produsului este: %d, c); } S verificm cu un exemplu de date de intrare: a = 7, b = 4. Atunci: p = 7*4 = 28; c = 28 % 10 = 8. (28 / 10 = 2 rest 8). Observaie: Cele dou instruciuni: p = a * b; c = p % 10; le puteam scrie i ntr-una singur: c = (a * b) % 10; Exerciiu: Stabilii valorile expresiilor i completai n tabelul de mai jos conform modelului: Expresia Valoarea expresiei 123+4*5 123+20=143 125%5 5*24%5+25/10 14+(7*(3+9/4)) 24/9+2*5%6

- 22 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exerciiu: Alctuii un program care s afieze valorile expresiilor de la exerciiul anterior. Verificai dac valorile obinute cu ajutorul calculatorului corespund cu cele scrise de voi n tabel. Exerciiu: Care sunt valorile variabilelor a i b dup ce s-au executat instruciunile de atribuire? 1. a=3; b=a/3; b=b+1; a=.....................; b=...................... 2. a=100; a=a+20; b=a*4; a=.....................; b=...................... 3. a=100/25; b=100%25; a=a+b; a=.....................; b=...................... 4. b=99; a=b*3; a=b/3; a=.....................; b=......................

- 23 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. Se cunoate salariul pe luna noiembrie al unui muncitor. Ct a avut muncitorul salariul n luna octombrie, tiind c salariul pe luna noiembrie este cu 500 lei mai mare dect cel din luna octombrie? Scriei programul C. 2. Ce va afia urmtorul program? #include <stdio.h> void main(void) { const char c[]=Rezultatul este; int a, b; a=100; b=20; a=a+b; a=a/10; printf(%s %d,c,a); }

- 24 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

V. CALCULE CU DATE DE TIP REAL Deseori, n rezolvarea problemelor, este necesar s utilizm fracii zecimale finite. De exemplu, trebuie s calculm: media aritmetic a dou note: m = (7+8)/2 = 7,5 semiperimetrul unui triunghi (adic jumtate din perimetrul lui): s = (9+9+9)/2 = 13,5 Ca urmare, o dat ce se stabilesc care sunt datele de intrare i de ieire, de stabilesc i variabilele corespunztoare i se decide ce tip au. La scrierea programului se cere mult atenie la declararea tipului variabilelor cu care lucrm. Revenind la exemplul de mai sus, media notelor m i semiperimeptrul s vor fi toate de tip REAL (float sau double). Ca o prim concluzie, cnd dorim s lcrm cu fracii zecimale finite, n informatic se spune c se utilizeaz numere reale. Observaie: la scrierea acestor numere n program, caracterul , (virgul) este nlocuit cu caracterul . (punct). Astfel, n program, voi scrie m = 7.5; (nu 7,5) sau s = 13.5; (nu 13,5). De reinut: cnd se mpart dou numere ntregi, rezultatul este: ntreg Exemplu: int a,b,c; a=7; b=4; c=a/b; /* aici c va primi valoarea nreag 1 */ De reinut: cnd se mpart un numr ntreg la unul real, rezultatul este: real Exemplu: int a; float b,c; a=7; b=4; c=a/b; /* aici c va primi valoarea real 1.75 */ Notaia numerelor reale Un numr real se poate reprezenta folosind notaia comun (de exemplu 6.2) sau folosind notaia tiinific (de exemplu, 6.200E+00). Nu insistm asupra notaiei tiinifice. Vom folosi doar notaia comun. Problem rezolvat Se cunosc cele dou note ale Andrei la informatic, obinute n urma unor lucrri de control. S se calculeze media notelor sale. Datele de intrare sunt cele dou note crora le atam variabilele nota1 i nota2, de tip intreg (int). Datelor de ieire media aritmetic le corespunde variabila media, care va fi de tip real (float sau double) (deoarece prin mprirea la 2 putem obine un rezultat real). Algoritmul n limbaj pseudocod este:
- 25 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Start citeste(nota1) citeste(nota2) media=(nota1+nota2)/2 scrie(media) Stop Programul se scrie cu uurin: #include <stdio.h> void main(void) { int nota1, nota2; float media; printf("Introduceti nota 1: "); scanf("%d",&nota1); printf("Introduceti nota 2: "); scanf("%d",&nota2); /* impart suma notelor la 2.0, pt. ca media sa fie un real */ media=(nota1+nota2)/2.0; printf("Media notelor este %f", media); } Exerciiu: Se citesc a, b i c, lungimile laturilor unui triunghi. S se calculeze semiperimetrul triunghiului, scriind programul C. Programul C

Exerciiu: Regula celor trei pahare Care este efectul execuiei urmtorului program tiind c a, b i aux sunt numere reale.

- 26 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

/* Regula celor trei pahare */ #include <stdio.h> void main(void) { float a, b, aux; printf("Introduceti a= "); scanf("%f",&a); printf("Introduceti b= "); scanf("%f",&b); aux=a; a=b; b=aux; printf("a=%f si b=%f", a,b); } a) dac a=10.2 i b=9.3 programul afieaz b) dac a=100 i b=200 programul afieaz c) dac a=-60.53 i b=10 programul afieaz d) dac a=10 i b=9.27 programul afieaz e) dac a=-60 i b=1000.1 programul afieaz DE REINUT Algoritmul implementat de programul de mai sus realizeaz interschimbarea valorilor a dou variabile folosind regula celor trei pahare. TEM 1. Se cunosc baza mare, baza mic i nlimea unui trapez. S se calculeze aria lui. Scriei programul C. (Formula de calcul a ariei este A = (B+M)*H/2, unde am notat cu B baza mare, cu M baza mic, cu H nlimea i cu A aria trapezului). Exemplu: pentru B=16, M=8 i H=3, se va afia 36.

Programul C

- 27 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

VI. OPERAIA DE DECIZIE I INSTRUCIUNEA if De multe ori, n rezolvarea unei probleme apar operaii de decizie care conduc la ramificaii n cadrul algoritmului. Definiie: Algoritmi cu ramificaii Algoritmii n care se folosesc operaii de decizie se numesc algoritmi cu ramificaii. Problem rezolvat Se citesc salariile a dou persoane a i b. S se afieze cel mai mare salariu. Algorimul prezentat n limbajul pseudocod este: Start citeste(a,b) daca a>b atunci scrie(a) altfel scrie(b) Stop Schema logic a algoritmului este:

- 28 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Decizia se ia n funcie de o condiie sau o expresie logic. Expresia logic poate lua una din valorile TRUE (adevrat) sau FALSE (fals). Spre exemplu, 9>4 are valoarea TRUE, iar 10<7 are valoare FALSE. Sintaxa instruciunii if if(expresie logic) { set de instruciuni 1; } else { set de instruciuni 2; } Operatorii relaionali sunt: - mai mic: < - mai mare: > - mai mic sau egal: <= - mai mare sau egal: >= - egal: == - diferit: != Instruciunea if transcrie n limbajul C operaia de decizie, aa cum rezult din exemplul urmtor: #include <stdio.h> void main(void) { long int a,b; /* un intreg lung, adica pana la 2147483647 */ /* daca era int, valoarea maxima era doar 65535 */ printf("Introduceti primul salariu: "); scanf("%ld",&a); printf("Introduceti al doilea salariu: "); scanf("%ld",&b); if(a>b) { printf("Salariul maxim este %ld",a); } else { printf("Salariul maxim este %ld",b); } } Operatori logici n expresiile logice pot aprea i operatorii logici && (operatorul I), || (operatorul SAU) sau ! (operatorul de negare, NU).

- 29 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exemple: if(x<9 && x>7) se traduce prin: dac x este mai mic decat 1 i x este mai mare dect 7 if(x<5 || y>8) se traduce prin: dac x este mai mic decat 5 sau y este mai mare dect 8 if(!(x<13)) se traduce prin: dac x nu este mai mic dect 13 Tabele de adevr ale operatorilor logici I, SAU, NU operatorul I a b && FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE operatorul SAU a b || FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE operatorul NU a ! FALSE TRUE TRUE FALSE

Exerciiu: Completai urmtoarele enunuri: 1. O expresie logic poate lua valoarea sau 2. n expresiile logice pot aprea i operatorii logici , 3. n expresiile logice se pot utiliza i operatorii relaionali <,

. i . .

Exerciiu: Se citesc dou numere naturale a i b, mai mici dect 65535. Dac a este mai mic dect b, se interschimb valorile celor dou variabile. S se calculeze ctul i restul mpririi celor dou numere. Exemplu: pentru a=5000 i b=5001 se vor afia ctul 1 i restul 1. Programul C

- 30 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. Andrei este elev n clasa a V-a i tatl su i-a promis o excursie la munte dac la teza la matematic ia cel puin nota 6, iar la teza la romn ia nota 10. Se citesc cele dou note obinute de Andrei la teze i se afieaz dac biatul pleac sau nu n excursie. Programul C

- 31 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

VII. PROBLEME DE DIVIZIBILITATE Problem rezolvat Ionel a participat la un concurs de cultur general i are de primit un premiu n bani. Acest premiu are o valoare cunoscut x (numr ntreg mai mic dect 65535). Aflai dac suma poate fi pltit n bancnote de 50 lei. Ca date de intrare se consider x de tipul int, deoarece suma este mai mic dect 65535). Rezultatul sau datele de ieire l reprezint unul din mesajele: suma poate fi platita in bancnote de 50 lei suma nu poate fi platita in bancnote de 50 lei Completai urmtorul tabel: x Rezultat 5000 100 bancnote de 50 lei 1500 ..... bancnote de 50 lei 2250 ..... bancnote de 50 lei Algoritmul va determina dac numrul x este divizibil (se mparte exact) cu 50: Start citete(x) dac x%50 == 0 atunci scrie(suma poate fi platita in bancnote de 50 lei) altfel scrie(suma nu poate fi platita in bancnote de 50 lei) Stop Verificarea paritii unui numr natural x Se face folosind condiia: if(x%2 == 0) { /* numarul x este par */ } Verificarea imparitii unui numr natural x Se face folosind condiia: if(x%2 == 1) { /* numarul x este impar */ } Verificarea apartenenei unui numr natural x la un interval [a, b] Se face folosind condiia: if(x>=a && x<=b) { /* numarul x apartine intervalului [a, b] */ }

- 32 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exerciiu: Dac a reprezint o variabil ntreag, ce expresie se utilizeaz pentru a testa dac a este divizibil cu 10? a) if(a/10 == 0) b) if(a%10 == 10) c) if(a%10 == 0) d) if(a%10 == 1) Exerciiu: Dac a reprezint o variabil ntreag, ce expresie se utilizeaz pentru a testa dac a este divizibil cu 3? a) if(a/3) b) if(a%3 == 2) c) if(a/3 == 0) d) if(a%3 == 0) Aflarea primei i ultimei cifre a unui numr S considerm un numr natural n de trei cifre. S se afle prima cifr i ultima cifr a acestui numr. Exemplu: dac n = 153, atunci prima cifr este p = 1, iar ultima cifr este u = 3. Mod de calcul: p = n/100; u = n % 10; Generalizare Dac avem un numr natural n de k cifre, atunci prima cifr p i ultima cifr u se calculeaz astfel: p = n/10(k-1) u = n%10 Observaie: 10(k-1) nseamn 10 la puterea (k-1) adic 10 nmulit cu el nsui de (k-2) ori. Observaie: ultima cifr se calculeaz fr s conteze cte cifre k are numrul n. Exerciiu: Scriei un program care calculeaz cifra zecilor a unui numr natural n. Programul C

- 33 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. Un elev este declarat respins la examen dac una din cele dou note (n1, respectiv n2) obinute este sub 5 sau dac media lor aritmetic este sub 5. Care dintre urmtoarele expresii verific aceste condiii? a) if(n1 || n2<5 && (n1+n2)/2) b) if(n1 <5 || n2<5 || (n1+n2)/2) c) if((n1 <5) || (n2<5) || ((n1+n2)/2<5) d) if(n1 <5 || n2<5 || n1+n2/2<5) 2. De la matematic se cunoate c dac ultimele dou cifre ale unui numr formeaz un numr divizibil cu 4, atunci numrul respectiv este divizibil cu 4. S se scrie programul care citete nu numr natural n i care verific dac este divizibil cu 4 folosind criteriul de mai sus. Programul va citi numrul i afia unul din mesajele de mai jos: este divizibil cu 4 nu este divizibil cu 4 Programul C

- 34 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

VIII. INSTRUCIUNEA switch Exist situaii n rezolvarea unei probleme cnd sunt mai multe ci posibile de urmat, caz n care putem folosi instruciunea switch. Sintaxa instruciunii switch este urmtoarea: switch (var) { case c1: set_instructiuni; break; case c2: set_instructiuni; break; ...................................... case cn: set_instructiuni; break; default: set_instructiuni; } Observaii: 1. var este o variabil, iar c1, c2, ..., cn sunt constante (valori cunoscute) 2. break determin ca execuia programului s se fac ncepnd cu prima instruciune de dup terminarea blocului switch } 3. default face referire la oricare alt valoare ck nemenionat printre valorile c1, c2, ..., cn. Problem rezolvat un calculator simplu Se citesc dou valori reale a i b i un caracter (un semn grafic ce reprezint un simbol de operaie), op din mulimea {+, -, *, /}. S se afieze pe ecran rezultatul operaiei a op b. Exist 4 ci de urmat n funcie de valoarea operatorului op. Vor rezulta 4 ramuri pe care se vor realiza 4 operaii diferite de atribuire.

- 35 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Schema logic

Programul C #include <stdio.h> void main(void) { float a, b, r; /* variabile reale */ char c; /* tip caracter */ printf(a=); scanf(%f,&a); printf(b=); scanf(%f,&b); printf(op=); scanf(%c,&c); switch(c) { case +: r=a+b; break; case -: r=a-b; break; case *: r=a*b; break; case /: r=a/b; break; } printf(Rezultatul este: %f,r); }

Problem: Se introduce de la tastatur o cifr zecimal i se cere s se obin denumirea acesteia. De exemplu, dac se introduce de la tastatur 5, programul va afia cinci. Scriei programul C. Programul C

- 36 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM: 1. Se d urmtorul program. ncercai s descoperii ce anume realizeaz acesta. Program C necunoscut #include <stdio.h> #include <conio.h> #include <dos.h> void main(void) { int c; int gata; gata=0; while(gata==0) { c=getch(); switch(c) { case '1': sound(262); delay(200); nosound(); break; case '2': sound(294); delay(200); nosound(); break; case '3': sound(330); delay(200); nosound(); break; case '4': sound(349); delay(200); nosound(); break; case '5': sound(392); delay(200); nosound(); break; case '6': sound(440); delay(200); nosound(); break; case '7': sound(494); delay(200); nosound(); break; case '8': sound(523); delay(200); nosound(); break; case '0': gata=1; } } } Descriei cu cuvintele voastre ce anume face programul:

- 37 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

2. Se citete un numr n, corespunztor unei luni calendaristice (de exemplu, pentru luna ianuarie, n este 1, pentru februarie este 2, pentru martie 3 etc.). S se determine trimestrul calendaristic corespunztor. Se va verifica corectitudinea datei de intrare. Exemplu: dac se citete de la tastatur numrul 7, programul va afia trimestrul trei. Programul C

- 38 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

IX. ALGORITMI CICLICI Ciclul cu un numr necunoscut de pai i instruciunea while Problem rezolvat Se citete un numr natural n. S se afle suma cifrelor acestui numr. Exemplu: pentru n = 579, rezultatul este 21 (5 + 7 + 9). Vom efectua n mod repetat urmtoarele prelucrri: se extrage ultima cifr - restul mpririi numrului la 10 se face adunarea (restul + suma (iniial suma este zero)) se obine un nou numr se face o mprire la 10 Repetiia acestor operaii poart numele de ciclu sau iteraie. Orice ciclu are un numr finit de pai, altfel spus trebuie s se ncheie. n exemplul prezentat, repetiia se ncheie cnd numrul obinut prin mprire la 10 devine 0. Reprezentarea algoritmului n schema logic:

- 39 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Observaii: Ciclul (iteraia) asigur executarea n mod repetat a unor operaii. Ciclul este controlat de una sau mai multe expresii logice. Ciclurile pot fi: cu numr necunoscut de pai i cu numr cunoscut de pai. Definiie: ALGORITMI CICLICI Algoritmii care conin cicluri se numesc algoritmi ciclici. Programul C #include <stdio.h> void main(void) { int n, s, r; printf("Scrieti un numar n= "); scanf("%d",&n); s=0; while(n>0) { r=n%10; s=s+r; n=n/10; } printf("Suma cifrelor este: %d",s); } De reinut: 1. Pentru a se calcula o sum se procedeaz astfel: se iniializeaz o variabil s cu 0 (n afara ciclului, de obicei naintea lui) se aplic n mod repetat formula de calcul s = s (anterior) + termenul curent

Instruciunea while codific n limbajul C ciclul cu numr necunoscut de pai. Are sintaxa: while (expresie_logica) { instructiune_1; instructiune_2; ...................... instructiune_n; }

- 40 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Exerciiu: S se verifice dac un numr natural n citit de la tastatur este divizibiul cu 3, conform criteriului de divizibilitate cu 3 (dac suma cifrelor lui n este multiplu de 3, atunci n este divizibil cu 3). Exemplu: pentru n = 333999, rezultatul va fi este divizibil cu 3, iar pentru n = 46, rezultatul va fi nu este divizibil cu 3. Programul C

- 41 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

TEM 1. Se citete un numr natural n. S se calculeze produsul cifrelor sale. Indicaie: o variabil p se iniializeaz cu 1; se aplic n mod repetat formula de calcul p = p (anterior) * factorul curent Programul C

- 42 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

2. Se citete un numr natural n. S se calculeze produsul cifrelor sale impare. Dac nu are asemenea cifre n componena sa, atunci se afieaz nu are cifre impare. Exemplu: pentru n = 2347, rezultatul va fi 21, iar pentru n = 224466, rezultatul va fi nu are cifre impare. Programul C

- 43 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

X. ALGORITMI CICLICI Ciclul cu contor i instruciunea for Am vzut pn acum c ciclurile se clasific n cicluri cu un numr necunoscut de pai i cicluri cu un numr cunoscut de pai. Pentru a le implementa pe cele din prima categorie n limbajul C se utilizeaz instruciunea while, iar pentru cealalt categorie se folosete instruciunea for. Problem rezolvat S se calculeze suma s = 13 + 23 + ... + n3 pentru n natural citit de la tastatur (1<=n<=50). Amintim c 13 = 1*1*1 = 1, 23 = 2*2*2 = 8, 33=3*3*3 = 27 etc. Precum se tie c se procedeaz la calcularea unei sume, o variabil s se iniializeaz cu 0. n continuare se repet de n ori operaia de atribuire s = s + i*i*i, unde i se numete variabila de ciclu i ia pe rnd valorile 1, 2, 3, ..., pn la n. Algoritmul se va reprezenta folosind schema logic astfel:

- 44 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

De reinut: CICLUL CU CONTOR sau cu numr cunoscut de pai Ciclul cu contor sau cu numr cunoscut de pai asigur repetiia uneia sau mai multor operaii de un numr cunoscut de ori. Contorul ine evidena numrului de repetiii (pai). Programul C care implementeaz algoritmul problemei rezolvate i care utilizeaz instruciunea for este: #include <stdio.h> void main(void) { int n, i; long int s; /* intreg lung, deoarece suma poate fi mare */ printf("Scrieti numarul n= "); scanf("%d",&n); s=0; for(i=1; i<=n; i++) { s=s+i*i*i; } printf("Suma este: %ld", s); } Sintaxa instrunciunii for este urmtoarea: for(v=val_i; v<=val_f; v++) { instructiune; instructiune; ..................... instructiune; } unde: v este variabila de ciclu sau contor val_i este valoarea iniial a contorului val_f este valoarea final a contorului v++ corespunde atribuirii i=i+1 din schema logic a problemei rezolvate (valoarea contorului crete cu o unitate)

Exerciiu: Se cunosc nlimile celor n biei dintr-o clas (1<=n<=30). Calculai i afiai cea mai mare nlime, tiind c nlimile sunt numere ntregi, exprimate n centimetri. Date de intrare: n (numrul de biei) i h (pstreaz pe rnd nlimea fiecrui biat din cei n biei) Date de ieire: hmax (nlimea maxim) Indicaie: variabila hmax, n care se va obine rezultatul se iniializeaz cu valoarea 0, o valoare pe care nlimile bieilor nu o pot lua niciodat.

- 45 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

Programul C

TEM 1. Un lift parcurge distana dintre dou etaje a i b (a i b se citesc de la tastatur). S se afieze toate etajele parcurse, n ordinea atingerii lor. Exemple: pentru a=4 i b=7 programul va scrie 4 5 6 7; pentru a=10 i b= 8 programul va scrie 10 9 8. Programul C

- 46 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

2. Ce afieaz urmtorul program? #include <stdio.h> void main(void) { int i, j, p; for(i=7; i<=8; i++) { for(j=1; j<=9; j++) { p=i*j; printf("%d x %d = %d\n", i, j, p); } printf("\n"); } } Rezultatul afiat

- 47 (C) 2007 - Mircea Sabu

INFORMATIC PENTRU GIMNAZIU anul I de studiu

CUPRINS I. Introducere n informatic. Sistemul de numeraie zecimal i binar. ....................................................................................................................... pag. 2 II. De la algoritm la programul C. Implementarea algoritmilor n limbajul C. Algoritmi secveniali. ....................................................................................................................... pag. 7

III. Implementarea algoritmilor n limbajul C. Algoritmi secveniali. Declararea variabilelor i constantelor. ....................................................................................................................... pag. 14 IV. Implementarea algoritmilor n limbajul C. Algoritmi secveniali. Calcule cu date de tip ntreg. ....................................................................................................................... pag. 21 V. Implementarea algoritmilor n limbajul C. Algoritmi secveniali. Calcule cu date de tip real. ....................................................................................................................... pag. 25 VI. Implementarea algoritmilor n limbajul C. Algoritmi cu ramificaii. Operaia de decizie i instruciunea if. ....................................................................................................................... pag. 28 VII. Implementarea algoritmilor n limbajul C. Algoritmi cu ramificaii. Probleme de divizibilitate. ....................................................................................................................... pag. 32 VIII. Implementarea algoritmilor n limbajul C. Algoritmi cu ramificaii. Instruciunea switch. ....................................................................................................................... pag. 35 IX. Implementarea algoritmilor n limbajul C. Algoritmi ciclici. Ciclul cu numr necunoscut de pai i instruciunea while. ....................................................................................................................... pag. 39 X. Implementarea algoritmilor n limbajul C. Algoritmi ciclici. Ciclul cu contor i instruciunea for. ....................................................................................................................... pag. 44

- 48 (C) 2007 - Mircea Sabu

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