Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Dreamforce 2026: Salesforce punta sulla ...
SpaceX ha confermato che Flight 14 sar&a...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
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: 05:19.


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