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

Se citeste un vector de n intregi. Eliminati toate aparitiile celui mai mare element din vector si afisati noul vector. ex: v=(4, 5, 9, 8, 9), se va elimina 9 si v=(4, 5, 8)
eu am facut asa, ar fi foarte bine daca mi-ar corecta cineva programul meu.
#include
using namespace std;
unsigned short int maxx(int v[100], int n)
{
unsigned short int i, maxx=-2000000000;
for(i=1; i<=n; i++)
{
if(v[i]>maxx)
maxx=v[i];
}
return maxx;
}
int main()
{
int i, n, m, v[100];
cout<<"n=";
cin>>n;
for(i=1; i<=n; i++)
{
cout<<"vector=";
cin>>v[i];
m=maxx(v, n);
for(i=1; i<=n; i++)
{
if(v[i]!=m)
cout<<v[i]<< " ";
}
return 0;
}

Răspunsuri la întrebare

Răspuns de chisebogdan
1
#include <iostream>
using namespace std;

unsigned short int maxx(int v[100], int n)
{
int i, maxx=-2000000000;
for(i=1; i<=n; i++)
{if(v[i]>maxx)
maxx=v[i];}
return maxx;}

int main()
{int i, n, m, v[100];
cout<<"n=";cin>>n;
for(i=1; i<=n; i++)
{cout<<"vector=";
cin>>v[i];}
m=maxx(v, n);
for(i=1; i<=n; i++)
{if(v[i]!=m)
cout<<v[i]<< " ";
}
return 0;
}

Erau doua greseli:
1. Cand initializai maxx=-20000000 il initializai cu unsigned deci in loc sa iti puna cu - iti punea cu plus. Sterge unsigned pt ca asta inseamna fara semn adica mereu pozitiv. Ajunge int.
2. ai uitat o acolada dupa cin >> v[i];

alinutalioana: multumesc foarte mult! as vota ca raspuns favorit, dar nu stiu cum
chisebogdan: ai niste stele langa multumesc
chisebogdan: cred ca asa se fac :)))
alinutalioana: mersi!
Răspuns de zeul777
1
#include<iostream> 

In primul rand fiindca ai pus unsigned , variabila ta "maxx" va fi mereu pozitiva.
Daca ai numai numere negative, maxx va fi gresit.
Am verificat ce numar printeaza  un unsigned int daca este asignat  cu -2000000000 si mi-a dat 2294967296 . 
In orice caz, nu initializa variabila maxx cu o constanta, in schimb scrie inainte de for initalizeaza maxx= v[1]. Cum maxx este initializat cu v[1] poti incepe de la 2 for(int i=2;i<=n;i++) . In rest programul pare corect.

Nu stiu daca asa v-a invatat la scoala, dar in C vectorii incep de la 0 si nu de la 1, deci ar trebui ca in loc de for(int i=1;i<=n;i++) sa scrii for(i=0;i<n;i++). Nu e neaparat gresit sa incepi de la 1 dar daca de exemplu ai un vector pe care ti-l declari direct, adica int vector[] = {1,2,3,4,5,6} 1 va fi vector[0] si nu vector[1]

alinutalioana: nu stiu daca sunteti profesor sau elev. in teoria informaticii se accepta v de la 0, dar fara atingere la n, dar si vector de la 1 cu atingere la n.
alinutalioana: sunt 2 metode corecte ambele.
alinutalioana: multumesc ptr explicatii si rezolvare.
zeul777: poate in pseudocod e permis sa incepi de la 1, dar intr-un limbaj de programare, sa incepi de la 1 poate cauza probleme cu programul...si nu o sa stii de ce. Un exemplu foarte banal e asta int a[10]; int numarPrintat=-1; for(int i=1;i<=10;i++) a[i]=i; cout<<numarPrintat; Scriind a[10] este a 11-a pozitie in vector, cand tu ti-ai declarat 10 pozitii.  In cel mai bun caz scrii peste alta variabila, dar se poate chiar inchide programul..
alinutalioana: multumesc!
Alte întrebări interesante