Informatică, întrebare adresată de andriesboss92, 9 ani în urmă

1.
a) Scrieţi definiţia completă a subprogramului sterge, care primeşte prin cei 4 parametri
v,n,i,j:
- v,un tablou unidimensional cu maximum 100 de elemente întregi din intervalul [-1000;1000]
- n , un număr natural reprezentând numărul de elemente din tabloul v
- i şi j două valori naturale cu 1≤i≤j≤n
şi elimină din tabloul v elementele vi,vi+1,…,vj actualizând valoarea parametrului n.
Tabloul modificat este furnizat tot prin parametrul v.
b) Fişierul text NUMERE.IN conţine pe prima linie un număr natural nenul n (1≤n≤100) şi pe următoarea linie n numere întregi din intervalul [-1000;1000], separate prin câte un spaţiu.
Scrieţi un program C/C++ care citeşte din fişierul NUMERE.IN numărul natural n,
construieşte în memorie un tablou unidimensional v cu cele n numere întregi aflate pe linia a doua în fişier şi utilizează apeluri utile ale subprogramului sterge pentru a elimina din tablou un număr minim de elemente astfel încât să nu existe două elemente alăturate cu aceeaşi valoare. Elementele tabloului obţinut se afişează pe ecran, separate prin câte un spaţiu.

Exemplu: Dacă fişierul NUMERE.IN are conţinutul:
12
10 10 2 2 19 9 9 9 9 15 15 15 atunci se afişează 10 2 19 9 15.

Răspunsuri la întrebare

Răspuns de blindseeker90
3
Nu mai imi aduc aminte cum se face salvarea unui calcul prin referinta la pointer asa ca dau raspunsul cu variabile globale: n si vectorul v sunt globale, si functia de stergere ia doar doi parametri: i si j. Valorile globale vor fi modificate in toate functiile si operatiile. Programul ar trebui la final sa arate ceva similar cu codul de mai jos:

#include <iostream>
#include <fstream>
using namespace std;

int n,v[100];
//functie si pentru afisare daca este nevoie
void afiseaza(){
int i;
for(i=1;i<=n;i++){
cout<<v[i]<<" ";
}
cout<<endl;
}
void sterge(int i,int j){
//daca j este mai mic decat i
//atunci nu face nimic in functie
if(j<i){
return;
}
int k,v_copie[n],nr=1;
for(k=1;k<=n;k++){
v_copie[k]=v[k];
}
for(k=1;k<i;k++){
v[nr]=v_copie[k];
nr++;
}
for(k=j+1;k<=n;k++){
v[nr]=v_copie[k];
nr++;
}
n=n-(j-i+1);
}
int main(){

int i,j;
ifstream fin("numere.in");
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
}
i=1;
while(i<n){
j=i;
while(v[j]==v[j+1]&&j<n){
j++;
}
sterge(i+1,j);
i++;
}
afiseaza();
return 0;
}
Alte întrebări interesante