PDA

Visualizza la versione completa : [C++] Esercizi ( le stringhe )


acquaesale
06-06-2015, 15:49
Ciao, mi sto preparando per l'esame di programmazione I, e ho piccoli problemi che non riesco a risolvere...
Qualcuno potrebbe aiutarmi?

ESERCIZIO 1
Senza utilizzare funzioni o oggetti di libreria per l'input formattato da stringhe, scrivere una funzione che prenda in ingresso una stringa da interpretare come la rappresentazione in base 10 di un numero naturale, e, se tutti i caratteri della stringa sono cifre in base 10, ritorni tale numero.Se, ad esempio, viene passata la stringa “34”, la funzione ritorna il numero 34.La funzione ritorna invece un indicazione di errore nel caso in cui almeno uno dei caratteri della stringa non sia una cifra in base 10. Trascurare problemi di overflow.Si ottiene il punteggio massimo se:
1) non si utilizza il numero di caratteri della stringa nel codice,e
2)si scorre la stringa una sola volta, e per valori crescenti degli indici

Mio codice:


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

const int dim=4;

int funzione(const char s[])
{
int num=0, app=0, conta=0;

for(int i=0; i<dim; i++)
{
if (s[i] >= '0' && s[i] <='9')
conta++;

else
break;} // al primo carratere diverso da un numero decimale, esci dal ciclo


if(conta!=dim-1){
cout<<"Errore"<<endl;
return 1;
}// se il numero che ho contato di cifre decimali è diverso dalla dim della stringa meno il terminatore

int div=pow(10,conta-1); //esponente
for(int j=0; j<conta; j++)
{
app=static_cast<int>(s[j]);
num=num+(app*div);
div=div/10;} // metto nell'intero le cifre che sono nella stringa

return num;

}

int main(){

char stringa[]="5433";

int a=funzione(stringa);
cout<<a<<endl;
return 0;
}



Però ho visto che programma mi stampa il errore,anche se la stringa non contiene le lettere...


ESERCIZIO 2
Senza utilizzare funzioni o oggetti di libreria per l'output formattato all'interno di stringhe,scrivere una funzione che prenda in ingresso un numero intero e crei e ritorni una nuova stringa contenente la rappresentazione in base 10 del numero, preceduta dal segno del numero. Se, ad esempio, viene passato il numero 34, al funzione ritorna la stringa “+34”, mentre se viene passato ilnumero -278, la funzione ritorna la stringa “-278”. Assumere che il numero passato non abbia più di10 cifre. Si ottiene il punteggio massimo se l'array di caratteri ritornato ha le dimensioni minime necessarie per contenere la stringa.



#include <iostream>
#include<stdlib.h>
using namespace std;

void funzione (int num, char *stringa, int max)
{
int dim=max;
int div1=1000000000, div2=0;
if(((num/div1)%10)!=0)
{
cout<<"Il numero con più di 10 cifre"<<endl;
}

char vett[max-2];

for(int i=0; i<max-2; i++)
{
vett[i]=num/div1;
div1=div1/10;
if (vett[i] == 0)
{ dim--; div2=div1;}
}

if (num>0)
stringa[0] = '+';
else
stringa[0] = '-';

int j;
for (j=1; j<dim-1; j++)
{
stringa[j]=static_cast<char>(num/div2);
div2=div2/10;
}

stringa[j]='\0';



}




int main(){
const int maxlun=12;

char s[maxlun]= "";

cin>>s;

int numero;
numero=atoi(s); // lo so che non posso usare stdlib.h, l'ho messo giusto per vedere veloce se programma funziona

funzione(numero,s,maxlun);

return 0;

}



Anche qui, il programma stampa le cose strane... :messner:

Loading