Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-05-2007, 15:34   #1
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Help C parole palindrome

Ragazzi sono nuovo del c e lo devo imparare. oggi mi sono imbattuto in questo esempio che ho rimodellato ad intuito perchè non funzionava... solo che non mi è molto chiaro... l'esercizio è questo:
#include <stdio.h>
#include <string.h>

void main()
{
char s[100];
int i, flag;

i = 0;
scanf ("%s", s);
flag = 1;

while ((i < (strlen(s)/2)) && (flag == 1)) {
if (s[i] != s[strlen(s)-i-1]) {
flag = 0;
}
i++;
}
if (flag == 1) {
printf ("La parola è palindroma.\n");
return main();
} else {
printf ("La parola non è palindroma.\n");
return main();
}

}



non mi è molto chiara questa parte:


scanf ("%s", s);
flag = 1;
while ((i < (strlen(s)/2)) && (flag == 1)) {
if (s[i] != s[strlen(s)-i-1]) {
flag = 0;
}
i++;
}



e soprattutto queste 2 righe di codice:

while ((i < (strlen(s)/2)) && (flag == 1)) {
if (s[i] != s[strlen(s)-i-1]) {



inizia il while e io capisco questo:
mentre i(inizializzato a zero) è minore di parola/2 e flag è = a 1
se la lettera i-esima=lunghezza parola -i-1
flag =0




grazie in anticipèo a tutti
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 15:44   #2
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
flag è un valore che vale 1 se la stringa può essere palindroma, 0 se non lo è.

Il ciclo vuol dire: finchè non arrivi a metà stringa (per controllare che una parola sia palindroma basta controllarne la metà, dal momento che la stringa è simmetrica), confronta i caratteri simmetrici rispetto alla metà (ovvero il primo e l'ultimo, il secondo ed il penultimo...). Se sono diversi allora setta flag=0 (stringa non palindroma) altrimenti la stringa finora è palindroma (flag resta = 1) e prosegui con il controllo del prossimo carattere
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 15:50   #3
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
quindi "-i-1"
è ilo simmetrico di "i+1" rispetto la metà della parola?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 15:56   #4
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Esatto. Immagina la parola sia: HWUPGRADE (strlen = 9)

Posizione : lettera
i = 0 : lettera H -> strlen-i-1=8 lettera E
-----------------------------------------
i = 1 (W) -> strlen-i-1=7 (D)
-----------------------------------------
i = 2 (U) -> strlen-i-1=6 (A)

e così via
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 16:06   #5
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Grazie mille... ora ti rompo per l'ultima volta( credo )

quel: flag=1; prima del ciclo sarebbe una sorta di if(questo)-> print(questo)
else print(quest'altro)?
se si come mai è scritto così? nn mi pare molto elegante diciamo
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 16:16   #6
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Figurati, non rompi tranquillo
Il flag ti serve per uscire dal ciclo appena ti accorgi che la parola non è palindroma: se al primo giro nel while ti accorgi che la prima lettera e l'ultima non sono uguali, sai già che la parola non è palindroma ed è quindi inutile andare a fare il controllo per il resto dei caratteri. Infatti, se vedi, appena due caratteri simmetrici risultano diversi, il flag viene impostato a 0, la condizione del while fallisce ed esci dal while con flag=0 che è la condizione di stringa non palindroma. Più che come un if, puoi vederlo come una variabile di stato. flag viene impostato a 1 prima che entri nel ciclo perchè ragioni secondo la filosofia "parto con la condizione iniziale che la stringa è palindroma, appena mi accorgo che non lo sia setto flag=0". Se invece tutte le lettere simmetriche sono uguali, flag resta sempre ad 1 prima, durante e dopo l'uscita dal while e quindi la stringa risulta palindroma. Ovvio che il tutto poteva essere scritto in maniera diversa e forse più compatta, ma dal mio punto di vista sono sempre favorevole all'uso di variabili di stato, anche se conviene chiamarle con un nome un attimino più significativo (flag da sè non dice granchè)
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 16:42   #7
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Quote:
Originariamente inviato da yorkeiser Guarda i messaggi
Figurati, non rompi tranquillo
Il flag ti serve per uscire dal ciclo appena ti accorgi che la parola non è palindroma: se al primo giro nel while ti accorgi che la prima lettera e l'ultima non sono uguali, sai già che la parola non è palindroma ed è quindi inutile andare a fare il controllo per il resto dei caratteri. Infatti, se vedi, appena due caratteri simmetrici risultano diversi, il flag viene impostato a 0, la condizione del while fallisce ed esci dal while con flag=0 che è la condizione di stringa non palindroma. Più che come un if, puoi vederlo come una variabile di stato. flag viene impostato a 1 prima che entri nel ciclo perchè ragioni secondo la filosofia "parto con la condizione iniziale che la stringa è palindroma, appena mi accorgo che non lo sia setto flag=0". Se invece tutte le lettere simmetriche sono uguali, flag resta sempre ad 1 prima, durante e dopo l'uscita dal while e quindi la stringa risulta palindroma. Ovvio che il tutto poteva essere scritto in maniera diversa e forse più compatta, ma dal mio punto di vista sono sempre favorevole all'uso di variabili di stato, anche se conviene chiamarle con un nome un attimino più significativo (flag da sè non dice granchè)


Grazie mille

beh allora dico:

O MORDO TUA NUORA O ARO UN AUTODROMO
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 10:55   #8
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Raga riscrivo qui per un esercizio diverso ma faccio solo per nn aprire un nuovo thread....
non iresco a capire come mai mi dia errorre... mi deve dire solo se il numero che metto io è uguale o diverso da quello random del computer:



#include <stdio.h>
#include <stdlib.h>

void main()
{
int a, t, r;

r = rand();
printf("Il numero random è:%d\n",r);
a = -1;
while (a != r) {
printf ("Inserisci un numero: ");
scanf("%d",&a); }

if (a < r)
{
printf ("Inserisci un numero maggiore.\n");
}
else if(a > r)
{
printf ("Inserisci un numero minore.\n");
}



else
{

printf("Il numero che hai digitato corrisponde al numero random");
}





grazie mille
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 15:54   #9
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Quote:
Originariamente inviato da Solido Guarda i messaggi
non iresco a capire come mai mi dia errorre... mi deve dire solo se il numero che metto io è uguale o diverso da quello random del computer:



#include <stdio.h>
#include <stdlib.h>

void main()
main deve restituire un int.

E usa il tag CODE, per cortesia.
Quote:
Codice:
{ 
 int a, t, r; 
 
 r = rand(); 
 printf("Il numero random è:%d\n",r);
Il numero random è per caso 1?
Da' un'occhiata a http://www.hwupgrade.it/forum/showthread.php?t=1196677
(sì, lo so, dovrei aggiornarla...)
Quote:
Codice:
 a = -1; 
 while (a != r) { 
  printf ("Inserisci un numero: "); 
  scanf("%d",&a); }
Quando scanf ha finito di leggere il numero, se ne accorge perché legge un carattere newline, che non fa parte della scrittura di un numero.
Questo carattere viene rimesso a posto sullo standard input.
Quindi, la successiva scanf legge solo quel newline, con le conseguenze del caso.

Per ripulire lo standard input dopo la tua scanf,
Codice:
while (getchar() != '\n')
    ;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 16:12   #10
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Hai semplicemente cannato una graffa:

Codice:
while (a != r) { 
  printf ("Inserisci un numero: "); 
  scanf("%d",&a); 
}  // <--- NON DEVI CHIUDERE IL WHILE QUI
Questa ti va in loop e continui a leggere il numero in input indefinitamente.
Devi semplicemente mettere quella graffa dopo l'else: ti posto la soluzione corretta

Codice:
#include <stdio.h>
#include <stdlib.h>

void main()
{
int a, t, r;

r = rand();
printf("Il numero random è:%d\n",r);
a = -1;
while (a != r) {
printf ("Inserisci un numero: ");
scanf("%d",&a);

if (a < r)
{
printf ("Inserisci un numero maggiore.\n");
}
else if(a > r)
{
printf ("Inserisci un numero minore.\n");
}



else
{

printf("Il numero che hai digitato corrisponde al numero random");
}

}
}
P.S. Se sei alle prime armi, ti consiglio di cominciare a prendere la buona abitudine di indentare il codice, così errori di questo tipo li riconosci al volo. Ciao
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 18:13   #11
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Grazie ad esntrambi ho risolto...
ehm si sono alle prime armi mi potresti dire che vuol dire identare?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 21:02   #12
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Quote:
Originariamente inviato da Solido Guarda i messaggi
che vuol dire identare?
Scrivere il codice di un programma, in modo che le righe corrispondenti a uno stesso blocco di istruzioni, comincino dalla stessa colonna di testo.

Per inciso, l'indentazione è esattamente il metodo con cui si suddividono i blocchi di codice in Python.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 21:08   #13
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Ma phyton non è un linguaggio di programmazione?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 21:29   #14
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Quote:
Originariamente inviato da Solido Guarda i messaggi
Ma phyton non è un linguaggio di programmazione?
Phyton, non lo so; Python, sì, e anche molto valido.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2007, 21:34   #15
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Si vabbeh...cm si scrive si sacrive, cmq che c'entra col C?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2007, 15:34   #16
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Ragazzi ho trovato qualche esercizio in pdf e melo son fatto... avete ualche link da consigliarmi?
in cui ci siano tanti esercizi con difficoltà appropriata e crescente?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Scandalo AI nei remaster di Tomb Raider:...
Honda presenta N-One e, la sua prima kei...
La Cina deve smettere di usare le GPU NV...
AMD lancia il guanto di sfida: MI450 sar...
YouTube punta sull'audio multilingua: sa...
iPhone 17 annunciati, e gli iPhone 16 va...
Il futuro di Far Cry è multiplaye...
Hisense a IFA 2025: i nuovi TV RGB Mini ...
Vendite mondiali di auto elettriche, l'E...
Xiaomi 16 sarà un top di gamma co...
MacBook Pro: rivoluzione in arrivo nel 2...
4 minuti: bastano per scoprire i tagli f...
Steam è ora in grado di dirti se ...
Intel resuscita Comet Lake: arriva il 'n...
Xiaomi 15 Ultra con lenti Leica e HyperA...
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: 10:30.


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