n-1 perechifor(i=0;i<n-1;i++) ... a[i], a[i+1] ...Declarare, citire, parcurgere, vecini, minim cu poziție, interschimbări. Tipul de program cerut la III.2 la științele naturii, rezolvat pe patru lucrări oficiale, cu punctele din barem.

ții minte doar fișa asta și ești acoperit
Declarare: int a[21]; pentru cel mult 20 de elemente rezervă cel puțin atât. Primul indice e 0.
III.2 SN = 10 p: tablou declarat 1, citire 1, prelucrare 6, afișare sau mesaj 1, restul 1.
Vecini: for(i=0;i<n-1;i++) și folosești a[i], a[i+1]. Bucla se oprește la penultimul.
Truc: n elemente, n-1 perechi de vecini.
Minim cu poziție: pornești cu p=0 și schimbi p când găsești un element mai mic. Valoarea e a[p].
Interschimbare: aux=a[i]; a[i]=a[j]; a[j]=aux;
Verificare de proprietate: ok=1 la început, ok=0 la primul contraexemplu, mesajul se afișează la final.
Culorile din lecție:termencifră, datăidee-cheie
for, prelucrezi cu un for, afișezi.Dacă ai de memorat 3 note, îți ajung 3 variabile. Pentru 20, ai vrea un singur nume și un număr de ordine: nota 0, nota 1, nota 2. Asta e un tablou unidimensional, iar numărul de ordine se numește indice.
int a[21],n,i;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
cout<<a[i]<<" ";
Un tablou cu 5 elemente
int a[21] rezervă 21 de locuri, de la a[0] la a[20].n este cel mult 20, ai nevoie de cel puțin 20 de locuri.a[0] nefolosit și mergi de la 1 la n, cu dimensiune cu 1 mai mare.În Pascal: var a:array[0..20] of integer;. Accesul este tot a[i].
n-1 perechifor(i=0;i<n-1;i++) ... a[i], a[i+1] ...n-1a[n-1]p=0; for(i=1;i<n;i++) if(a[i]<a[p]) p=i;aux=a[i]; a[i]=a[j]; a[j]=aux;| Sarcină | Idee | Cod |
|---|---|---|
| Vecini | n-1 perechi | for(i=0;i<n-1;i++) ... a[i], a[i+1] ... |
| Ultimul element | indicele n-1 | a[n-1] |
| Poziția minimului | pornești de la primul | p=0; for(i=1;i<n;i++) if(a[i]<a[p]) p=i; |
| Interschimbare | trei atribuiri | aux=a[i]; a[i]=a[j]; a[j]=aux; |
Mai există verificarea unei proprietăți: ok pornește 1 și devine 0 la primul contraexemplu. Baremul o numește „algoritm de bază pentru verificarea unei proprietăți”.
Se citesc n (din [2,20]) și n numere întregi nenule din [-10⁹,10⁹]. Se afișează alterneaza dacă nu există două numere pozitive sau două negative pe poziții consecutive, altfel nu alterneaza. Pentru (-32,15,-7,16,-20) mesajul e alterneaza, iar pentru (-32,15,-7,16,20) e nu alterneaza.
#include <iostream>
using namespace std;
int main()
{ int n,i,a[21],ok=1;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n-1;i++)
if((a[i]>0 && a[i+1]>0) || (a[i]<0 && a[i+1]<0))
ok=0;
if(ok==1) cout<<"alterneaza";
else cout<<"nu alterneaza";
return 0;
}
Barem (10 p)Puncte
| Barem (10 p) | Puncte |
|---|---|
| tablou declarat | 1 |
| date citite | 1 |
| proprietate verificată: câte 1 p pentru algoritmul de verificare, identificarea unui număr pozitiv sau negativ, accesul la poziții consecutive, perechi pozitive, perechi negative, valori suport verificate | 6 |
| mesaj afișat | 1 |
| variabile simple, corectitudine globală | 1 |
Ce valori trebuie comparate ca să vezi dacă în șir există doi vecini pozitivi?
Se citesc n (din [2,50]) și n numere naturale din [0,100]. Interschimbă minimul cu primul element, dacă minimul e par, sau cu ultimul, dacă e impar, apoi afișează tabloul. Pentru (8,6,2,2,7,4) se poate obține (2,6,8,2,7,4), iar pentru (8,6,1,2,7,4) se obține (8,6,4,2,7,1).
#include <iostream>
using namespace std;
int main()
{ int n,i,a[51],p,aux,j;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
p=0;
for(i=1;i<n;i++)
if(a[i]<a[p]) p=i;
if(a[p]%2==0) j=0;
else j=n-1;
aux=a[p]; a[p]=a[j]; a[j]=aux;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
Barem (10 p)Puncte
| Barem (10 p) | Puncte |
|---|---|
| tablou declarat | 1 |
| date citite | 1 |
| tablou determinat: câte 1 p pentru minim, poziția lui, primul/ultimul element, interschimbare, elemente interschimbate/păstrate, obținere în memorie | 6 |
| afișare | 1 |
| variabile simple, corectitudine globală | 1 |
Dacă minimul e pe mai multe poziții, enunțul spune că se alege doar una; programul o alege pe prima.
Care sunt indicii unui tablou cu n elemente, numerotate de la 0?
Cum interschimbi a[i] cu a[j]?
Dacă n e par, primii n/2 termeni își schimbă locul cu ultimii n/2, păstrând ordinea. Pentru (2,3,4,4,5,1) rezultă (4,5,1,2,3,4). Dacă n e impar, se afișează nu exista.
#include <iostream>
using namespace std;
int main()
{ int n,i,a[101],aux;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
if(n%2==1) cout<<"nu exista";
else
{ for(i=0;i<n/2;i++)
{ aux=a[i];
a[i]=a[i+n/2];
a[i+n/2]=aux;
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
}
return 0;
}
Cheia e perechea: elementul de pe poziția i se schimbă cu cel de pe poziția i+n/2. Pe un exemplu cu n=6: 0 cu 3, 1 cu 4, 2 cu 5.
Barem: câte 1 p pentru identificarea unui tablou cu număr par de elemente, interschimbare sau mutare, valori din prima jumătate, valori din a doua jumătate, transformare în memorie, tratarea cazului nu exista.
Se citesc n și n numere din [1,10⁴]. Afișează câți termeni sunt pătrate perfecte impare și strict mai mici decât ultimul număr citit. Pentru 9 27 81 25 49 100 101 25 77 16 49, răspunsul este 3 (adică 9, 25, 25).
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int n,i,a[101],r,nr=0;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
{ r=sqrt(a[i]);
if(r*r==a[i] && a[i]%2==1 && a[i]<a[n-1])
nr++;
}
cout<<nr;
return 0;
}
De aceea enunțul are nevoie de tablou: ultimul număr se află abia la final.
Barem: câte 1 p pentru numărare cu inițializare și actualizare, pătrat perfect, par/impar, identificarea ultimului element (pentru rezolvare parțială), din 6 p la determinarea numărului.
Lucrare SNCerința de la III.2
DA k sau NU| Lucrare SN | Cerința de la III.2 |
|---|---|
| August 2026 var. 1 | perechi cod-ore în tablou: codul cu cel mai mic necesar de ore |
| August 2025 var. 4 | înlocuirea minimului cu ultima valoare |
| Iulie 2024 var. 3 | toate valorile au același număr de cifre: DA k sau NU |
La matematică-informatică, tablourile unidimensionale apar cel mai des la III.3, ca vector de frecvență (vezi lecția despre fișiere).
int a[20] pentru „cel mult 20” merge doar cu indici de la 0.a[n] în loc de a[n-1] pentru ultimul element.i<n la vecini: accesezi un element în afara șirului.aux: a[i]=a[j]; a[j]=a[i]; pierde o valoare.