Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Nano: la piccola fotocamera alla prova sul campo
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
La nuova fotocamera compatta DJI spicca per l'abbinamento ideale tra le dimensioni ridotte e la qualità d'immagine. Può essere installata in punti di ripresa difficilmente utilizzabili con le tipiche action camera, grazie ad una struttura modulare con modulo ripresa e base con schermo che possono essere scollegati tra di loro. Un prodotto ideale per chi fa riprese sportive, da avere sempre tra le mani
FUJIFILM X-T30 III, la nuova mirrorless compatta
FUJIFILM X-T30 III, la nuova mirrorless compatta
FUJIFILM X-T30 III è la nuvoa fotocamera mirrorless pensata per chi si avvicina alla fotografia e ricerca una soluzione leggera e compatta, da avere sempre a disposizione ma che non porti a rinunce quanto a controllo dell'immagine.
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati
Da Las Vegas, la visione di Larry Ellison e la concretezza di Clay Magouyrk definiscono la nuova traiettoria di Oracle: portare l’intelligenza artificiale ai dati, non i dati all’intelligenza, costruendo un’infrastruttura cloud e applicativa in cui gli agenti IA diventano parte integrante dei processi aziendali, fino al cuore delle imprese europee
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-10-2007, 19: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, 20: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, 21: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, 21: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, 21: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, 21: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 22:00.
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 22: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 30-10-2007, 00: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 30-10-2007, 00: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 30-10-2007, 00: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 : 30-10-2007 alle 00:49.
Alex88na è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2007, 01: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, 22: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, 22: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


DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati Oracle AI World 2025: l'IA cambia tutto, a parti...
Micron e millisecondi: la piattaforma ServiceNow guida l'infrastruttura IT di Aston Martin F1 Micron e millisecondi: la piattaforma ServiceNow...
ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme ASUS GeForce RTX 5080 Noctua OC Edition: una cus...
Un post di Sean Duffy (amministratore ad...
SpaceX ha già lanciato oltre 135 ...
GeForce RTX 5060 Ti 8GB: non piace neanc...
Isar Aerospace Spectrum: il fallimento d...
'State lontani dalla GeForce RTX 5090 Fo...
GJ 251 c è la ''super-Terra'' sco...
Halo è ufficialmente multipiattaf...
Windows 11 25H2 e 24H2: come attivare su...
Brembo Solutions e Microsoft danno vita ...
Migliaia di pacchi Amazon rubati ai legi...
Ex CEO di Stellantis: Musk lascerà...
Record storico per i giochi Windows su L...
GPU introvabili: Microsoft accusa i mine...
RedTiger prende di mira i gamer: furto d...
Microsoft sotto accusa: avrebbe nascosto...
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: 01:17.


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