Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-10-2007, 18:03   #1
Alex88na
Member
 
Iscritto dal: Dec 2005
Messaggi: 135
[C++] Esercizio da risolvere

Assegnata una stringa s contenente anche delle cifre, sommare la somma delle sequenze di cifre presenti in s. Per esempio s="abc3 casa2 y34zq", il progrmma deve restiture 3+2+34=39.

Io personalmente basandomi su un altro esercizio del libro ho pensato di utilizzare per prima cosa un ciclo while che scorri la stringa finkè nn trovi il carattere nullo(ovviamente utilizzo cin.getline per l'input della stringa), a questo punto faccio un if che controlla se il numero è compreso tra 0 e 9 se si voglio andare a verificare se nei successi nposti della stringa ci sn altre cifre.

Come faccio a verificare se nelle successivi posizioni di s sn cifre e conservarmi il risultato? io avrei pensato tipo nel caso della stringa s="abc3 casa2 y34zq" dove c'è 34 di utilizzare il fatto che il sistema decimale è posizionale nel senso che salvo s[i]*(10^x) dove x aumenta ogni volta che nella posizione s[i++] è presente un'altra cifra..

Speriamo di essermi fatto capire :P, altrimenti se avete qlk altro modo da potermi consigliare è ben accetto!

thx in anticipo!
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 19:11   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quando trovi una cifra fai:

num = 10 * num + (s[i] - '0');

Quando trovi un cifra azzeri sommi num al totale e azzeri num
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 20:21   #3
Alex88na
Member
 
Iscritto dal: Dec 2005
Messaggi: 135
scusami non ho capito molto ... nell'if devo mettere:
num = 10 * num + (s[i] - '0');

?? e per quale motivo faccio -'0'?

Spoiler:

cout <<"Stringa:"; cin.getline(s,100);

while (s[i]!='\0') {
if((s[i]>='0') && (s[i]<='9'))


i++;
}
cout << "La somma è: " << somma << endl;
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 20:32   #4
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
Quote:
Originariamente inviato da Alex88na Guarda i messaggi
scusami non ho capito molto ... nell'if devo mettere:
num = 10 * num + (s[i] - '0');

?? e per quale motivo faccio -'0'?
con -'0' togli il valore dello zero nella tabella ascii quindi ti ritrovi con il num giusto...

Esempio... 7 salvato come carattere vale 55... per avere il suo valore "reale" devi toglierci il valore del carattere 0 cioè 48 così ti ritrovi ad avere 55-48=7

Se non sono stato chiaro (probabile) chiedi
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 20:35   #5
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
Quote:
Originariamente inviato da cionci Guarda i messaggi
Quando trovi una cifra fai:

num = 10 * num + (s[i] - '0');

Quando trovi un cifra azzeri sommi num al totale e azzeri num
Senza offesa ma questa frase è un gran torcol*

*garbuglio
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 20:48   #6
Alex88na
Member
 
Iscritto dal: Dec 2005
Messaggi: 135
Quote:
Originariamente inviato da marko.fatto Guarda i messaggi
con -'0' togli il valore dello zero nella tabella ascii quindi ti ritrovi con il num giusto...

Esempio... 7 salvato come carattere vale 55... per avere il suo valore "reale" devi toglierci il valore del carattere 0 cioè 48 così ti ritrovi ad avere 55-48=7

Se non sono stato chiaro (probabile) chiedi
Ho capito! thx (non tenevo presente che il numero non è salvato come intero ma è salvato come carattere)
però non ho capito xkè c'è 10*num..se voglio solo il numero mi basta fare appunto s[i]-'0' ...

Per il problema come devo fare?

Quote:

cout <<"Stringa:"; cin.getline(s,100);

while (s[i]!='\0') {
if((s[i]>='0') && (s[i]<='9'))


i++;
}
cout << "La somma è: " << somma << endl;
dopo l'if devo porre:
num = 10 * num + (s[i] - '0');
in somma solo se è un'unica cifra altrimenti devo continuare a scorrere la stringa finkè nn trovo il primo carattere nullo, ma nel frattempo dove mi salvo tutte le unità temporanee?

Ultima modifica di Alex88na : 29-10-2007 alle 21:00.
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 21:01   #7
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
Quote:
Originariamente inviato da Alex88na Guarda i messaggi
dopo l'if devo porre:
num = 10 * num + (s[i] - '0');
in somma solo se è un'unica cifra altrimenti devo continuare a scorrere la stringa finkè nn trovo il primo carattere nullo, ma nel frattempo dove mi salvo tutte le unità temporanee?
Codice:
somma=0;
while (s[i]!='\0')
{
    if((s[i]>='0') && (s[i]<='9'))
    {
        num = 10 * num + (s[i] - '0');
        i++;
    }
    if((s[i-1]<'0') && (s[i-1]>'9'))
    {
        somma+=num;
        num=0;
    }
}
Ma prendilo come linea guida xkè c'ha un po' di robe da mettere apposto
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 23:28   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da marko.fatto Guarda i messaggi
Senza offesa ma questa frase è un gran torcol*

*garbuglio
Sì, c'era un azzeri in più
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 23:32   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da marko.fatto Guarda i messaggi
Ma prendilo come linea guida xkè c'ha un po' di robe da mettere apposto
C'è solo un errorino sull'incremento di i a dire la verità...

Codice:
somma = num = i = 0;
while (s[i]!='\0')
{
    if((s[i]>='0') && (s[i]<='9'))
    {
        num = 10 * num + (s[i] - '0');
    }
    else
    {
        somma+=num;
        num=0;
    }
    i++;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 23:41   #10
Alex88na
Member
 
Iscritto dal: Dec 2005
Messaggi: 135
ho fatto il programma,dovrebbe funzionare,ma nn funziona il problema è che 10^0 equivale a 10! 10^1 equivale a 11!!

ecco il codice (scusate x le innumerevoli stampe ma è x verificare i valori delel variabili)

Spoiler:

// esercizio
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main ()
{
char s[100];
int v[100];
int i=0, j, z, x, k=0, prova, num, somma=0;

cout << "Programma che permette di ..."<< endl;
cout <<"Stringa=";
cin.get(s,100);

while (s[i]!='\0')
{
cout << endl << "entro nel ciclo"<<endl;

if((s[i]>='0') && (s[i]<='9'))
{
cout <<"il numero è una cifra"<<endl;
j=i;
j++;

while ((s[j]>='0')&&(s[j]<='9'))
{
cout <<"anke j++ è una cifra"<<endl;
j++;
}
j--;
cout <<"vedo se i=j"<<endl;
if(i==j)
{
cout<<"i=j!!!!!!!!!!!!!!! sommo, ecco il numero "<<s[i]<<endl;
somma=somma+ s[i]-'0';
}
else{
cout << "i è diverso da j"<<endl;

k=0;
z=j;
cout <<"ecco z"<<z<<endl;
cout<<"ecco i "<<i<<endl<<"ecco j "<<j<<endl;
while(i!=j)
{
v[k]=s[j]-'0';
cout << "ecco v[k] temporaneo"<<v[k]<<endl;
j--;
k++;
}
v[k]=s[j]-'0';
cout << "ecco v[k] ultimo" << v[k] << endl;

j=0;
while(j<=k)
{
cout << "ecco v[j] "<<v[j]<< " ed ecco j "<< j<<" e k "<<k <<endl;
prova=v[j]*(10^j);
cout << "ecco v[j] elevato "<<prova<<endl;
num=num+v[j]*(10^j);
cout<<"ecco num sommato al resto "<<num<<endl;
j++;
}

somma=somma+num;
cout<<"ecco soma delle cifre"<<somma<<endl;
cout <<"ecco z"<<z<<endl;
i=i+(z-i);
}
}
else
cout <<"il numero non è una cifra"<<endl;
i++;
}
cout << endl <<"somma=" << somma << endl;
cout << endl << "Programma realizzato da: Alessandro " << endl;
system("pause");
}



mah...10^0=10... provato usare la funzione pow(10,j) ma nn mi funziona....(la libreria cmath è inclusa,bah....) fors eè dovuta al fatto ke restiusce un valore double? nada provato...

Ultima modifica di Alex88na : 29-10-2007 alle 23:49.
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2007, 00:26   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
L'operatore ^ non fa la potenza, ma l'or esclusivo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2007, 21:03   #12
Alex88na
Member
 
Iscritto dal: Dec 2005
Messaggi: 135
Quote:
Originariamente inviato da cionci Guarda i messaggi
L'operatore ^ non fa la potenza, ma l'or esclusivo...
l'or esclusivo?

e come faccioa fare la potenza senza usare la funzione pow?
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2007, 21:07   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non certo in quel modo...
Puoi fare un for che moltiplica x per se stesso per n volte...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Cina, effetto sanzioni USA: Cambricon - ...
La gamma Mac riceverà tante novit...
DDR5 supera i 13.000 MT/s, stavolta uffi...
Il nuovo iPhone con display pieghevole p...
ASUS ProArt PA32KCX: ecco a voi il primo...
DAZN ci riprova: piano Full a meno di 20...
Nuovi prezzi, più bassi: scendono...
PC Desktop HP Victus con RTX 4060 e Ryze...
Giù di altri 10€: solo 939€ per M...
Offerte Amazon da non credere: sconti fo...
Windows 11 scivola sugli aggiornamenti d...
Razer Kiyo V2: la nuova webcam 4K con AI...
ASUS ROG NUC 9: i mini PC (ex) Intel, ad...
Streaming illegale, il ministro dello Sp...
Microsoft avrebbe affidato a Intel la pr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v