Clasa a V-a lecția 12 - 20 nov 2012
Tema – verificare
Rezolvări aici [1]
Lecție
Exerciții
Scrieți schema logică și programul C pentru următoarele probleme, folosind fișiere pentru citirea și scrierea datelor.
- Să se spună de cîte ori un număr conține pe altul. Exemplu: 439453967 conține 39 de două ori, iar 2323232 conține 232 de 3 ori. Iată o variantă de algoritm. Acest algoritm nu funcționează într-un caz particular. Puteți spune cînd? Cum putem repara problema?
- Să se spună dacă un număr are toate cifrele distincte. Avem mai multe variante. Iată o variantă posibilă.
Secvențe
Definiție: denumim secvență un șir de numere. Exemplu: 34 20 4 0 12 5 8 7. Simplu?
Citirea unei secvențe
Deoarece nu avem unde păstra numerele unei secvențe, le vom citi, pe rînd, în aceeași variabilă. Pentru a ști cîte numere citim (cîte numere are secvența) de obicei vom citi mai întîi numărul de numere din secvență, n și apoi cele n numerele din secvență, într-o buclă WHILE-DO. Exemplu:
![]() |
fscanf( fin, "%d", &n ); i = 0; while ( i < n ) { fscanf( fin, "%d", &a ); i = i + 1; } |
Suma unei secvențe
Ca prim exemplu de lucru cu secvențe să calculăm suma a n numere citite la intrare:
Exemple:
Fișierul suma.in | Fișierul suma.out |
---|---|
3 4 2 6 |
12 |
5 25 10 8 0 4 |
47 |
Observații:
- variabila i se numește contor, deoarece ea contorizează numărul de execuții al buclei WHILE-DO. Pentru a executa o buclă de n ori inițializăm contorul cu 0 și ne oprim cînd devine egal cu n. Preferăm această variantă, față de a porni cu i de la 1, deoarece ne obișnuiește pentru viitor să lucrăm corect cu vectori.
- Variabila suma se numește acumulator, deoarece în ea se acumulează rezultatul, pe măsură ce citim secvența. Orice variabilă de tip acumulator trebuie inițializată înainte de a începe calculele! În acest caz, deoarece este o sumă, ea se va inițializa cu 0, deoarece 0 este elementul neutru la adunare. Dacă am fi calculat produsul secvenței am fi inițializat acumulatorul cu 1, deoarece 1 este elementul neutru la înmulțire.
Numărul de elemente pare din secvență
Să se afișeze cîte elemente pare se află într-o secvență
Numărul de elemente zero și diferite de zero din secvență
Să se calculeze cîte numere zero apar într-o secvență, precum și cîte numere diferite de zero.
Căutare număr în secvență
Să se spună dacă un număr e apare într-o secvență și pe ce poziție. Dacă e apare în secvență se va afișa poziția primei apariții a lui, între 0 și n - 1. În caz contrar se va afișa n.
Observații:
- Variabila poz are dublu rol. Pe de o parte ea memorează poziția primei apariții a numărului e în secvență. Pe de altă parte ea ne spune dacă am găsit numărul, astfel încît să ieșim din bucla WHILE-DO imediat ce am găsit numărul e. Variabilele care semnalează îndeplinirea unei condiții de oprire se numesc stegulețe, deci putem spune că variabila poz este un steguleț.
Tema
- Faceți-vă cont la campion.edu.ro/arhiva (link Înregistrare în dreapta sus)
- Rezolvați problema pinochio, OJI 2003 (schemă logică + program C în CodeBlocks, trimis la campion, dar imi aduceți și mie programul).
- Poziții (schemă logică + program C în CodeBlocks): se citește o secvență de n numere. Să se spună cîte din numere sînt egale cu poziția lor în secvență. Primul număr este pe poziția 0, ultimul pe poziția n – 1. Exemple:
pozitii.in | pozitii.out |
---|---|
4 0 3 2 5 |
2 |
10 7 1 2 3 2 5 9 7 3 9 |
6 |
- Problemă de logică: dispunem de 3000 de banane pe care vrem să le transportăm din orașul A în orașul B aflate la 1000km distanță. Dispunem de o cămilă care poate să care maxim 1000 de banane. În timp ce mergea ea mănîncă o banană la fiecare kilometru. Care este numărul maxim de banane pe care le puteți duce din A în B și cum procedați? Puteți desigur să depozitați banane în orice loc de pe drum.
Rezolvări aici [2]