|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
[C] Testo
Quando in un esercizio mi viene chiesto "inserisci un testo da tastiera", significa che devo inserire una stringa oppure una serie di stringhe, cioè andando anche a capo? Se è così come si fa ad inserirlo e poi a scorrerlo tutto?
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Un'altra cosa, quando mi viene dato il prototipo int somma_interi_nel_testo()
signfica che posso metterci quanti argomenti mi pare oppure si sono dimenticati di metterli? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ho scritto questo programma per stampare i numeri interi presenti in una stringa, gia l'avevo postato sul forum ma non trovo piu il thread
mi da come risultato 99. non capisco dove sbaglio Codice HTML:
#include <stdio.h>
int somma_interi_nel_testo(char *vett, int size);
int main(){
int size=10;
char vett[10];
printf("Inserisci una stringa di 9 caratteri/numeri:\n");
scanf("%s", vett);
printf("%d\n", somma_interi_nel_testo(vett, size));
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();}
int somma_interi_nel_testo(char *vett, int size){
int somma=0;
for(;*vett!='\0';vett++){
if(*vett>='0'&&*vett<='9'){
somma += *vett;
}}
return somma;}
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2006
Città: V.E. (na)
Messaggi: 115
|
il fatto è che nela codifica ascii le cifre non valgono 0,1,2,3 ...
ma 48,49 ,50 .. (mi pare) quindi dovresti scrivere nella formula per la somma somma += (*vett-'0') in questo modo sottrai l'offset |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2002
Città: Capua (CE)
Messaggi: 317
|
Quote:
__________________
Se pensi di sapere, sappi che non sai di non saperlo! Le mie statistiche - "real man uses Duron!" Ho fatto affari con: schumyFast, navale, The_Nameless_One, Sonic80, diamante.picci, Downset88, ilviandante, tecno789 |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
e come si fa?
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ho abbozzato anche la versione ricorsiva, fate prima a dirmi cosa c'è di giusto
Codice HTML:
int somma_interi_nel_testo(char *vett){
if(*vett!='\0'){
if(*vett<='9'&&*vett>=0){
return *vett + somma_interi_nel_testo(vett+1);}
else return somma_interi_nel_testo(vett+1);}
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
//questa è la riga da immettere al tuo progetto: somma += (*vett-'0'); |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
sisi non avevo letto
e per quanto riguarda quella ricorsiva? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Manca un pezzo, probabilmente hai sbagliato ad incollare.
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Non ho sbagliato a incollare, probabilmente ho sbagliato a scriverla
Se mi dite dove sbaglio |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2006
Città: V.E. (na)
Messaggi: 115
|
l'errore è sempre lo stesso aggiungi il codice ascii invece della cifra e poi quando trova il terminatore null alla fine della stringa non retituisce niente mentre deve ritornare 0
Codice:
int somma_interi_nel_testo(char *vett)
{
if(*vett != '\0')
if(*vett<='9'&& *vett>='0')
return (*vett-'0')+somma_interi_nel_testo(vett+1);
else
return somma_interi_nel_testo(vett+1);
else
return 0;
}
Codice:
int somma_interi_nel_testo(char *vett)
{
if(*vett != '\0')
return (*vett<='9'&& *vett>='0') ? (*vett-'0')+somma_interi_nel_testo(vett+1):somma_interi_nel_testo(vett+1);
else
return 0;
}
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Ho capito. Vabbè c'ero quasi...
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Quando scrivi una funzione ricorsiva devi sempre stare attento che questa abbia un termine, è una regola fondamentale.
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Ho provato a rifare da solo la ricorsione di questo esercizio ma mi da come risultato circa 400000, come mai?
l'esercizio sembra corretto Codice HTML:
#include <stdio.h>
int Rsomma_interi_nel_testo(char *stringa);
int main(){
char testo[10]="apemaia12";
printf("Il risultato e' %d\n", Rsomma_interi_nel_testo(testo));
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();
}
int Rsomma_interi_nel_testo(char *stringa){
if(*stringa!='\0'){
if((*stringa>='0')&&(*stringa<='9')){
return (*stringa-'0') + Rsomma_interi_nel_testo(stringa+1);}
else Rsomma_interi_nel_testo(stringa+1);}
else return 0;}
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per favore xubbax...l'indentazione...non riesco a leggere i tuoi sorgenti.
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
come l'identazione?
ma non ti esce la barra per scorrere a destra? |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
si ma che fa che esce?
a funzionare funziona lo stesso, e per leggerlo basta scorrere a destra la barra... |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
xubbax: te l'ho già spiegato rende difficile la lettura del tuo codice. Inoltre semplicemente non si indenta così, non è buon uso e quindi da evitare soprattutto quando proponi il tuo codice ad altri che lo devono leggere.
Giusto per spiegarti un problema: quando si legge cosa fai all'interno del blocco ci si perde già l'if precedente. Cionfronta quanto sia facile leggere il codice di mastoo rispetto al tuo. inoltre non si capisce assolutamente niente di quello che fai con le parentesi e quindi non ci si rende conto a che livello siamo nella struttura del codice. Ultima modifica di cionci : 25-08-2007 alle 15:22. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:33.




















