PDA

Visualizza la versione completa : [c++] Problema stupido ma ci sto perdendo la notte...


andreadg88
08-07-2011, 01:37
Ciao ragazzi, premetto che ho pochissimo tempo in quanto entro domattina avrei dovuto consegnare gli elaborati al professore, ma ci sto perdendo la notte e non ne esco (giornataccia a lavoro e la testa ha gi di per se i suoi grattacapi...)...

Devo realizzare una divisione di un array dato un discriminante, ora io l'ho realizzato in questo modo:

#include <stdio.h>
#include <iostream.h>
int i, n, a, j;
int trovato = 0;
int numeri[100];
int vector1[100];
int vector2[100];
int num;
main()
{
cout << "Quanti numeri?: ";
cin >> n;
for (i = 0; i < n; i++)
{
cout << "Numero "<< i+1 <<" : ";
cin >> numeri[i];
}
printf ("Numero da cercare: ");
scanf ("%d", &num);
i = 0;
do
{
if (numeri[i] == num)
{
trovato = 1;
}
else
{
i++;
}
} while (trovato == 0 && i < n);
if (trovato)
{
cout << "\n\n" << "Trovato" << "\n";
cout << "L'elemento avente numero: " << numeri[i] << " si trova nella posizione: " << i+1 << "\n";
a=i;
cout << "\n\nStampo la lista degli elementi del primo vettore" << "\n";
for (i=0; i<a; i++)
{
j=i;
vector1[j]=numeri[i];
cout << vector1[j] << " ";
};
cout << "\n\nStampo la lista degli elementi del secondo vettore" << "\n";
for (i=a; i<n; i++)
{
j=a;
vector2[j]=numeri[i];
cout << vector2[j] << " ";
};
}
else
{
cout << "Numero non trovato" << "\n";
}
cout << "\n\n\n\n";
system("pause");
}

ed il tutto mi funziona, il problema che il professore lo vuole sviluppato in funzioni e non appena provo a sciogliere il tutto, mi fa un casino di errori a palla, qualcuno di voi riesce a darmi una mano? non so pi dove sbattere la testa... :messner:

oregon
08-07-2011, 10:00
Originariamente inviato da andreadg88
appena provo a sciogliere il tutto

Come hai fatto? Era quel codice che dava problemi che dovevi mostrare ...


mi fa un casino di errori a palla

Anche quelli dovevi mostrare ...

andreadg88
08-07-2011, 10:58
Ecco, avendo variato il codice, rendendo dinamico il vettore, ma splittando la parte di inserimento di dati, non funziona ed come se "skippasse" proprio la funzione...


#include <cstdio>
#include <iostream>
int i, n, a, j;
int trovato = 0;
int num;
int vector2[100];
int vector1[100];
int inserimento(int n, int array[]);

int main()
{
int *array;
std::cout << "Quanti numeri: ";
std::cin >> n;
array= (int *) malloc (n*sizeof(int));

int inserimento(int n, int array[]);

printf ("Numero da cercare: ");
scanf ("%d", &num);
i = 0;

do
{
if (array[i] == num)
{
trovato = 1;
}
else
{
i++;
}
} while (trovato == 0 && i < n);

if (trovato)
{
std::cout << std::endl << std::endl << "Trovato" << std::endl;
std::cout << "L'elemento avente numero: " << array[i] << " si trova nella posizione: " << i+1 << std::endl;
a=i;

std::cout << std::endl << std::endl << "Stampo la lista degli elementi del primo vettore" << std::endl;
for (i=0; i<a; i++)
{
j=i;
vector1[j]=array[i];
std::cout << vector1[j] << " ";
};

std::cout << std::endl << std::endl << "Stampo la lista degli elementi del secondo vettore" << std::endl;
for (i=a; i<n; i++)
{
j=a;
vector2[j]=array[i];
std::cout << vector2[j] << " ";
};
}
else
{
std::cout << "Numero non trovato" << std::endl;
}

std::cout << std::endl << std::endl << std::endl << std::endl;
system("pause");
}

int inserimento (int n, int array[])
{
for (i = 0; i < n; i++)
{
std::cout << "Numero "<< i+1 <<" : ";
std::cin >> array[i];
}
}

oregon
08-07-2011, 11:09
Allora ... prima di tutto ti consiglio di utilizzare all'inizio una



using namespace std;


in modo da evitare di scrivere sempre

std::

In secondo luogo, dato che la funzione inserimento non restituisce alcun valore, dovrebbe essere void, quindi


void inserimento(int n, int array[]);

E per ultimo, ma pi grave, quando richiami la funzione all'interno del main, devi scrivere


inserimento(n, array);

e non il suo prototipo ...

andreadg88
08-07-2011, 11:27
la funzione deve restituire all'esterno l'array...perch poi va utilizzato nelle altre funzioni etc...

non riesco ad uscirmene da ieri...

oregon
08-07-2011, 11:30
Con il codice che hai mostrato l'array lo allochi tu esternamente alla funzione e passi l'indirizzo per modificarlo ... Non questo quello che vuoi?

andreadg88
08-07-2011, 11:33
si quello che vorrei, ma nel momento in cui eseguo il codice, la funzione inserimento non viene eseguita, anche modificando con i tuoi suggerimenti, ottengo problemi di compilazione... :dh:

oregon
08-07-2011, 11:35
Originariamente inviato da andreadg88
si quello che vorrei, ma nel momento in cui eseguo il codice, la funzione inserimento non viene eseguita, anche modificando con i tuoi suggerimenti, ottengo problemi di compilazione... :dh:

Forse non hai letto bene l'ultimo suggerimento che ti ho dato ...

In ogni caso, se hai problemi di compilazione, devi scrivere quali sono ... non sono ancora un veggente ...

andreadg88
08-07-2011, 11:41
Scusa so di esser poco chiaro ma dopo 2 notti questo esercizio mi sembra assurdo... :dh:


SenzaTitolo2.cpp:11: error: expected primary-expression before ']' token
SenzaTitolo2.cpp:11: error: initializer expression list treated as compound expression
SenzaTitolo2.cpp: In function `int main()':
SenzaTitolo2.cpp:16: error: expected primary-expression before ']' token
SenzaTitolo2.cpp:16: error: `inserimento' cannot be used as a function
SenzaTitolo2.cpp: At global scope:
SenzaTitolo2.cpp:66: error: redefinition of `int inserimento'
SenzaTitolo2.cpp:11: error: `int inserimento' previously defined here
SenzaTitolo2.cpp:66: error: expected primary-expression before ']' token
SenzaTitolo2.cpp:67: error: expected `,' or `;' before '{' token
make.exe: *** [SenzaTitolo2.o] Error 1
Esecuzione terminata

Questo l'output che ottengo eseguendo:


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

int i, n, a, j;
int trovato = 0;
int num;
int vector2[100];
int vector1[100];
int *array;
int inserimento(n, array[]);

int main()
{

inserimento(n, array[]);


printf ("Numero da cercare: ");
scanf ("%d", &num);
i = 0;

do
{
if (array[i] == num)
{
trovato = 1;
}
else
{
i++;
}
} while (trovato == 0 && i < n);

if (trovato)
{
cout << endl << endl << "Trovato" << endl;
cout << "L'elemento avente numero: " << array[i] << " si trova nella posizione: " << i+1 << endl;
a=i;

cout << endl << endl << "Stampo la lista degli elementi del primo vettore" << endl;
for (i=0; i<a; i++)
{
j=i;
vector1[j]=array[i];
cout << vector1[j] << " ";
};

cout << endl << endl << "Stampo la lista degli elementi del secondo vettore" << endl;
for (i=a; i<n; i++)
{
j=a;
vector2[j]=array[i];
cout << vector2[j] << " ";
};
}
else
{
cout << "Numero non trovato" << endl;
}

cout << endl << endl << endl << endl;
system("pause");
}

int inserimento (n, array[])
{
int *array;
cout << "Quanti numeri: ";
cin >> n;
array = (int *) malloc (n*sizeof(int));
for (i = 0; i < n; i++)
{
cout << "Numero "<< i+1 <<" : ";
cin >> array[i];
}
return array;
}

oregon
08-07-2011, 11:49
Allora ... l'ultimo suggerimento che ti avevo dato era relativo al codice che mi avevi mostrato (con l'allocazione dell'array nel main).

Se vuoi allocare la memoria nella funzione, allora devi inserire all'inizio


int inserimento(int **arr);


nel main




n = inserimento(&array);


e la funzione



int inserimento (int **arr)
{
cout << "Quanti numeri: ";
cin >> n;

*arr = (int *) malloc (n*sizeof(int));

for (i = 0; i < n; i++)
{
cout << "Numero "<< i+1 <<" : ";
cin >> (*arr)[i];
}

return n;
}



EDIT: ho aggiornato il codice ... fai attenzione ...

Loading