Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
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


AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Le batterie LFP sono piccole e pesanti? ...
Motorola inarrestabile: nuova serie moto...
Decima generazione Pokémon: grafi...
Una nuova legge consente di rottamare un...
Google mostra per sbaglio Android per PC...
Tesla non convince più: crolla il...
OpenAI lancia Prism: l'AI ora lavora fia...
Nissan mette i pannelli solari su Ariya:...
Day 3 a Barcellona: la prima di Norris c...
Usa: il capo della cyber sicurezza ha ca...
Nuovo look per il DJI Store di Milano: f...
I giudici sentenziano: Trump non pu&ogra...
Il kernel Linux si prepara al 'dopo Torv...
Meta, Snap, TikTok e YouTube: la prossim...
Daredevil Born Again seconda stagione: o...
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: 16:41.


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