PDA

View Full Version : programma in c++ aiuto!! :(


ilaria93S
24-08-2010, 09:37
salve a tutti! mi servirebbe entro stasera questo programma... dmn ho l'esame di riparazione, ma questo programma non sono proprio riuscita a farlo perchè con le funzioni non ci ho capito niente :( spero che mi possiate aiutare.. grazie 1000 in anticipo a chi rispondera
( entro stasera mi serve )..

Scrivere un porgramma che acquista una stringa, attraverso una funzione stabilisca il numero di cifre contenute.

WarDuck
24-08-2010, 10:06
Beh il programma non te lo possiamo scrivere noi, comunque...

Una funzione (in maniera poco formale) è un blocco di codice che puoi richiamare da programma, che dato un ingresso ti da un'uscita.

Per dichiarare una funzione si usa questa sintassi:


tipo nome-funzione(parametri)
{
..
codice
..
return valore;
}


Esempio:


int doppio(int x)
{
return x*2;
}
...

int main(void)
{
int a = doppio(5); // a vale 10
return 0;
}


Anche il main() è una funzione, in particolare la prima funzione ad essere eseguita quando avvii il programma.

Comunque ciò che ti si chiede non è difficile, in pratica farai una funzione del tipo string -> intero (ovvero che data una stringa ti ritorna un intero).


int conta_numeri(string str)
{
..
codice
..
return conta;
}


Quello che dovrai fare è leggere un carattere alla volta e stabilire se è un numero oppure no, se è un numero allora incrementi di uno il contatore, altrimenti passi al carattere successivo.

Alla fine ritornerai la conta.

ilaria93S
24-08-2010, 10:25
ok grazie mille! :) ora provo a rifarlo...

ilaria93S
24-08-2010, 10:42
ho provato a rifarlo... ci sono ancora deiversi errori, ma non riesco a capire cosa sbaglio :( :help:


#include<stdio.h>

int conta_numeri(int stringa)
{
char v[]="0123456789";
int i,j,cont;
cont=0;
for(i=0;stringa[i]!='\0';i++)
{
for(j=0;j=9;j++)
{
if(stringa[i]==v[j])
{
cont++;
j=10;
}
}
}

return cont;
}

int main()
{
char stringa[20],v[10];
int cont, i,k,j, num, n;
printf("\ninserire una stringa:\n\n");
i=0;
scanf ("%c", & stringa[0]);
while (stringa[i]!='\n')
{
i++;
scanf ("%c", & stringa[i]);
}
cont=conta_numeri(stringa);
printf("\nIl numero di cifre della stringa e' %d\n",cont);
getch();
}

oNaSsIs
24-08-2010, 11:40
Per favore usa gli appositi TAG per postare del codice...
Comunque dando un'occhiata al volo nel tuo for hai sbagliato a scrivere la condizione j<9 e non j=9...

ilaria93S
24-08-2010, 12:13
scusa non lo sapevo..
comunque grazie, ma mi dice che ci sono anche altri errori.. tipo sul for prima :(

DanieleC88
24-08-2010, 12:23
Se "stringa" viene dichiarato come numero intero, non puoi accedere a dei suoi elementi interni, come faresti nel caso di un'array.

ilaria93S
24-08-2010, 12:32
devo scrivere char stringa?

ma mi dice ke c'è ancora un errore sul for..

Teo@Unix
24-08-2010, 13:02
nella tua funzione hai dichiarato:

int conta_numeri(int stringa)

quando tu chiami la funzione e passi "stringa", tu passi il puntatore dell'array, questo credo che lo sai.

Un puntatore ad una stringa si scrive con * e deve essere naturalmente di tipo char.
Comincia a coreggere quindi la tua funzione così:
int conta_numeri(char*stringa)

poi ci sono ancora dei problemi sul modo che usi per leggere la stringa credo

EDIT:
guarda il funzionamento di scanf():
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

ilaria93S
24-08-2010, 13:10
#include<stdio.h>

int conta_numeri(char *stringa)
{
char v[]="0123456789";
int i,j,cont;
cont=0;
for(i=0;stringa[i]!='\0';i++)
{
for(j=0;j<9;j++)
{
if(stringa[i]==v[j])
{
cont++;
j=10;
}
}
}

return cont;
}

int main()
{
char stringa[20],v[10];
int cont, i,k,j, num, n;
printf("\ninserire una stringa:\n\n");
i=0;
scanf ("%c", & stringa[0]);
while (stringa[i]!='\n')
{
i++;
scanf ("%c", & stringa[i]);
}
cont=conta_numeri(stringa);
printf("\nIl numero di cifre della stringa e' %d\n",cont);
}

evvai adesso funziona! grazie a tutti.. :)
è rimasto solo un piccolo problema... quando lo mando in esecuzione dopo aver scritto "il numero di cifre della strnga è.." si chiude subito.
sapete come risolverlo?

Teo@Unix
24-08-2010, 13:13
for(j=0;j=9;j++)

per l'uso del for guarda qui:
http://edu.os3.it/html/manual/impararec/node46.html#815

non ha senso assegnare j = 9 lì ci va un test, magari j == 9

ilaria93S
24-08-2010, 13:24
for(j=0;j=9;j++)

per l'uso del for guarda qui:
http://edu.os3.it/html/manual/impararec/node46.html#815

non ha senso assegnare j = 9 lì ci va un test, magari j == 9
adesso ho messo j<=9 e funziona.. a parte quel problema che ho scritto prima...

Teo@Unix
24-08-2010, 13:27
posta il codice perchè sarà oramai stato modificato parecchio...

per capire quello che succede inserisci alla fine della funzione principale "main()" l'istruzione:

system("PAUSE");

così il programma si ferma e capiamo cosa viene stampato.

ilaria93S
24-08-2010, 13:44
mi da errore.. "system undeclared"
cmq ecco il codice...

#include<stdio.h>

int conta_numeri(char *stringa)
{
char v[]="0123456789";
int i,j,cont;
cont=0;
for(i=0;stringa[i]!='\0';i++)
{
for(j=0;j<=9;j++)
{
if(stringa[i]==v[j])
{
cont++;
j=10;
}
}
}

return cont;
}

int main()
{
char stringa[20],v[10];
int cont, i,k,j, num, n;
printf("\ninserire una stringa:\n\n");
i=0;
scanf ("%c", & stringa[0]);
while (stringa[i]!='\n')
{
i++;
scanf ("%c", & stringa[i]);
}
cont=conta_numeri(stringa);
printf("\nIl numero di cifre della stringa e' %d\n",cont);
system("PAUSE");
}

Teo@Unix
24-08-2010, 14:08
la stringa di formato per scanf() deve essere %s non %c. %s legge una stringa di caratteri %c ne legge uno.

Per system(), tu sei su windows o su linux?

ilaria93S
24-08-2010, 14:10
la stringa di formato per scanf() deve essere %s non %c. %s legge una stringa di caratteri %c ne legge uno.

Per system(), tu sei su windows o su linux?
windows

ilaria93S
24-08-2010, 14:12
quindi così va bene?

#include<stdio.h>

int conta_cifre(char *stringa)
{
char v[]="0123456789";
int i,j,cont;
cont=0;
for(i=0;stringa[i]!='\0';i++)
{
for(j=0;j<=9;j++)
{
if(stringa[i]==v[j])
{
cont++;
j=10;
}
}
}

return cont;
}

int main()
{
char stringa[20],v[10];
int cont, i,k,j, num, n;
printf("\ninserire una stringa:\n\n");
i=0;
scanf ("%s", & stringa[i]);
cont=conta_cifre(stringa);
printf("\nIl numero di cifre della stringa e' %d\n",cont);
}

Teo@Unix
24-08-2010, 14:14
windows

includi stdlib così:

#include <stdlib.h>

Teo@Unix
24-08-2010, 14:18
quindi così va bene?

credo di si.

ilaria93S
24-08-2010, 14:25
ok perfetto!! grazie mille!! :)