Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Puțin ajutor (eroare) [rezolvat]  (Citit de 1863 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
robert.badea
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 16



Vezi Profilul
« : Decembrie 24, 2010, 16:58:00 »

Am făcut acest algoritm banal ca să ma prind cum stă treaba cu A ? B : C. Însă când rulez programul am o eroare cum că folosesc variabila n, însă nu este inițializată, cu toate ca eu văd clar că este inițializată ca int.

Cod:
#include "stdio.h"
#include "stdafx.h"

int maxp(int a, int b) {
return b < a ? a : b;
}

int minp(int a, int b) {
return b > a ? a : b;
}

void main () {
int n;
printf ("N = ");
scanf ("%d", n);
int c, i;
printf ("Element #1: ");
scanf ("%d", i);
int max, min;
max = min = i;
int p = n;
n--;
while (p) {
printf ("Element #%d: ", p-n+1);
scanf ("%d", c);
max = maxp(c, max);
min = minp(c, min);
p--;
}
printf ("Max = %d\nMin = %d", max, min);
}

Da, folosesc Visual C++.
« Ultima modificare: Decembrie 24, 2010, 20:48:42 de către Robert Badea » Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #1 : Decembrie 24, 2010, 17:34:43 »

In primul rand ti-as recomanda o chestie : ia-ti un compilator mai nou, pentru ca daca iti compileaza cu void main inseamna ca e vechi. Deci, dupa ce faci rost de unul nou ( iti recomand CodeBlocks ), trebuie sa modifici void main in int main, apoi headerul stdafx.h nu mai exista, si nu mai ai nevoie de el, stdio.h ( sau cstdio, acelasi lucru ) e suficient. Acum o problema, la scanf iti trebuie ca parametru &n, nu n simplu, pentru ca tu il citesti pe n in memorie ( scanf ( "%d", &n ) ), la fel si cu celalte citiri. Si nu stiu ce program faci acolo, ca afisarile is cam proaste. La printf acolo trebuie afisat n-p+2, nu p-n+1, odata pentru ca n e mai mare ca p, si a doua oara p nu trebuie dus pana la 1, ci pana la 2 . Si nu trebuie sa faci acea operatie, --n. Si inca ceva, utilizeaza <>, in loc de "" la headere, pentru ca <> reprezinta header care exista deja , iar "" inseamna ca e definit de tine, desi merge pentru cele default.
Cod:
# include <cstdio>

int maxp(int a, int b) {
return b < a ? a : b;
}

int minp(int a, int b) {
return b > a ? a : b;
}

int main () {
int n;
printf ("N = ");
scanf ("%d", &n);
int c, i;
printf ("Element #1: ");
scanf ("%d", &i);
int max, min;
max = min = i;
int p = n;
while (p > 1) {
printf ("Element #%d: ", n-p+2);
scanf ("%d", &c);
max = maxp(c, max);
min = minp(c, min);
p--;
}
printf ("Max = %d\nMin = %d", max, min);
}
Memorat
robert.badea
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 16



Vezi Profilul
« Răspunde #2 : Decembrie 24, 2010, 19:05:47 »

Aaahh, așa, omisesem &n.

Folosesc Microsoft Visual C++ 2010, nu mi se pare ceva vechi, iar header-ul "stdafx.h" este necesar aproape mereu (dacă nu mereu).

Da, este un maxim și minim dintr-un vector ...fără vector, iar decrementarea acelei variabile este necesara pentru a se afișa "A[1] = ", "A[2] = ", etc.

Am rezolvat, mersi mult, codul aici:
Cod:
#include "stdio.h"
#include "stdafx.h"

int maxp(int a, int b) {
return b < a ? a : b;
}

int minp(int a, int b) {
return b > a ? a : b;
}

void main () {
int n;
printf ("N = ");
scanf ("%d", &n);
int c, i;
printf ("Element #1: ");
scanf ("%d", &i);
int max, min;
max = min = i;
int p = n;
p--;
while (p) {
printf ("Element #%d: ", n-p+1);
scanf ("%d", &c);
max = maxp(c, max);
min = minp(c, min);
p--;
}
printf ("Max = %d\nMin = %d", max, min);
}
« Ultima modificare: Decembrie 24, 2010, 20:37:01 de către Robert Badea » Memorat
truenight
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #3 : Decembrie 24, 2010, 21:54:38 »

ia-ti un compilator mai nou, pentru ca daca iti compileaza cu void main inseamna ca e vechi.
Nu... mi se pare ca da warning, dar de compilat, ar trebui sa compileze fara eroare. Code::Blocks foloseste MinGW, MinGW e un port de GCC, iar ultimul GCC da warning, nu eroare. Si ca o completare, in C main-ul e definit ca int main(void), pentru ca in C pui void ca sa arati ca functia nu ia niciun argument. In C++ nu pui nimic, dar in C, asta inseamna numar nedefinit de argumente.

Citat
Acum o problema, la scanf iti trebuie ca parametru &n, nu n simplu, pentru ca tu il citesti pe n in memorie ( scanf ( "%d", &n ) ), la fel si cu celalte citiri.
Functia lucreaza cu pointeri pentru ca modifica valoarea in interiorul ei, deci are nevoie de o adresa la acea variabila, nu de o copie a valorii ei.

Citat
Si inca ceva, utilizeaza <>, in loc de "" la headere, pentru ca <> reprezinta header care exista deja , iar "" inseamna ca e definit de tine, desi merge pentru cele default.
De fapt, daca il pui intre <>, header-ul e cautat in directorul in care se afla header-ele standard. Daca il pui intre "", e cautat intai in directorul specificat, iar apoi in cel pe care-l stie compilatorul.

Sper ca am tinut bine minte Think
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #4 : Decembrie 25, 2010, 13:36:00 »

Da, in mare e bine, dar mie pe CB-ul meu, daca am void main nu compileaza deloc, adica am eroare.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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