Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: problema C++  (Citit de 5335 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« : Martie 08, 2009, 22:49:03 »

Salut! Am urmatoarea problema:

"La un concurs scolar de patinaj, fiecare concurent este notat de o echipa formata din n arbitrii. Un arbitru are voie, conform regulamentului, sa acorde o nota de la 1 la 100 concurentului care evolueaza.Fiecare arbitru transmite arbitrului-sef nuta lui,iar acesta calculeaza punctajul final al concurentului astfel: elimina nota maxima si nota minima, apoi face media aritmentica a notelor ramase."

Cod:
...........
for (i=1;i<=n;i++)
{
if (max<v[i]) max=v[i]; //max a avut initial valoarea 0
if (min>v[i]) min=v[i]; //min a avut initial valoarea 400
s=s+v[i];
}
s=s-max;
s=s-min;
m=s/(n-2)
cout<<"media="<<m;
}


CE GRESESC?  Brick wall
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #1 : Martie 08, 2009, 22:56:26 »

probabil ca gresesti daca ai mai multe medii minime/maxime. si ca trebuie sa ai media de tip real.
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #2 : Martie 08, 2009, 23:15:18 »

nu, am pus ca media este de tip float Eh?
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #3 : Martie 08, 2009, 23:26:32 »

Spune si ce nu'ti da bine... s de ce tip e? Nu trebuie sa pui m = (float)s / (n - 2) ? (... asta daca s e intreg)
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #4 : Martie 08, 2009, 23:31:51 »

pai de ex daca pun:
n=4
100,50,90,90 arata m=-80  Indifferent
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #5 : Martie 08, 2009, 23:35:03 »

Ai initializat m = 0 ?  Huh
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #6 : Martie 08, 2009, 23:41:09 »

chiar s trebuie initializat defapt Smile
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #7 : Martie 08, 2009, 23:44:03 »

da, am initializat ambele variabile cu 0 (trecute in tipul float)
am initializat si min, max  Ok

dar ce are
daca pun sa zicem :
n=4 1000,50,100,100
m=375  Aha
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #8 : Martie 08, 2009, 23:50:19 »

ceva nu calculezi cum trebuie. plus ca:
Citat
Un arbitru are voie, conform regulamentului, sa acorde o nota de la 1 la 100 concurentului care evolueaza

eu zic sa iti determini minimul si maximul, parcurgi vectorul si daca v[ i ] != min si v[ i ] != max adaugi la suma si iti retii cate elemente ai adaugat la suma. si dupa imparti suma la numarul de elemente.

ceva de genu:

Cod:
min = 32000;
max = 0;
for(i = 1; i <= n; i++)
     if(v[i] < min)
        min = v[i];
     if(v[i] > max)
        max = v[i];

s = 0;
k = 0;
for(i = 1; i <= n; i++)
     if(v[i] !=min && v[i] != max)
            {
             s+=v[i];
             k++;
            }

g<<s/k;
                 

nu am verificat dar ar trebui sa mearga
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #9 : Martie 08, 2009, 23:50:46 »

de ce primul numar e 1000?
Tu initializezi max cu 400 care e mai mic decat acel 1000.
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #10 : Martie 08, 2009, 23:56:38 »

Cod:
#include <cstdio>
int N, S, min, max, x;
double m;

int main()
{
freopen("prob.in","r",stdin);
freopen("prob.out","w",stdout);

scanf("%d",&N);

min = 101;
for (int i = 1; i <= N; i++)
{
scanf("%d",&x);
if (x > max) max = x;
if (x < min) min = x;
S += x;
}
S -= (max + min);
m = (double) S / (N - 2);
printf("%lf\n", m);
return 0;
}
 
Vezi ce nu faci la fel....
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #11 : Martie 08, 2009, 23:59:51 »

am uitat ca nu am voie sa pun 1000, probabila sta mi-a incurcat si minimul
dar, cum spune "gaboru corupt" am incercat si afiseaza pentru
: n=4 100,50,90,90 m=50
cod:
Cod:
for (i=1;i<=n;i++)
{
if ( (v[i]!=min) && (v[i]!=max))
s=s+v[i];
}
m=s/(n-2)

ma uit maine dim la eal, ca's rupta

iar daca pun
Cod:
if ( (v[i]!=min) && (v[i]!=max))
{
s=s+v[i];
nr++; //nr initializat cu 0
}

imi afiseaza m=75  Fool
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #12 : Martie 09, 2009, 00:11:12 »

am uitat sa deschid un bloc in primul FOR  Brick wall

Cod:
min = 32000;
max = 0;
for(i = 1; i <= n; i++)
     {
     if(v[i] < min)
        min = v[i];
     if(v[i] > max)
        max = v[i];
     }

s = 0;
k = 0;
for(i = 1; i <= n; i++)
     if(v[i] !=min && v[i] != max)
            {
             s+=v[i];
             k++;
            }

g<<s/k;
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #13 : Martie 09, 2009, 18:32:00 »

merge, slava domnului...mersi! cred ca eu greseam ca in acelasi for citeam si componentele si le faceam si min,max...mersi! Applause
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #14 : Martie 09, 2009, 19:01:34 »

nu cred ca aia era problema. Gabi determina min/max in for unde citeste in programul de mai sus si merge. probabil ca daca aparea minimul sa zicem de 3 ori, tu nu il scadeai de 3 ori, doar o data. Thumb up
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #15 : Martie 09, 2009, 20:45:03 »

Nu cred ca trebuie scazut de 3 ori minimul daca frecventa lui este 3. Programul trebuie sa prelucreze punctajele arbitrilor si ma gandesc ca trebuie sa le prelucreze ca si in realitate, adica sa scada cele mai "eronate" 2 scoruri (cel mai mare si cel mai mic). Daca toate elementele din sir ar fi egale, punctajul nu ar trebui sa fie 0. Parerea mea e ca trebuie scazut maximul si minimul o singura data.
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #16 : Martie 09, 2009, 21:21:36 »

scuze, eram cam nedocumentat. am cautat regulamentul pt sarituri cu schiurile (cred ca e la fel ca la patinaj) si zice ca cel mai mare si cel mai mic sunt eliminate, si scorul final e media aritmetica a celor 3 ramase Smile
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #17 : Martie 09, 2009, 21:29:11 »

Citat
scuze, eram cam nedocumentat. am cautat regulamentul pt sarituri cu schiurile (cred ca e la fel ca la patinaj) si zice ca cel mai mare si cel mai mic sunt eliminate, si scorul final e media aritmetica a celor 3 ramase

la sarituri nota cea mai mare si cea mai mica se elimina, se aduna celelalte 3 si se aduna punctele pe saritura... asta e punctajul final... de unde te-ai doucmentat? ca nu e prea bine ce ai zis pe acolo  Very Happy
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #18 : Martie 09, 2009, 21:32:31 »

am revenit asupra afirmatiei post-anterioare si m-am corectat. am cautat regulamentul FIS.  pana la urma am inteles Har har
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines