Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-05-2007, 16: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, 16: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, 16: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, 16: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, 17: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, 17: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, 17: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, 11: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, 16:54   #9
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 17: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, 19: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, 22:02   #12
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 22: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, 22:29   #14
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 22: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, 16: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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Oracle NetSuite si potenzia con nuove fu...
Musica generata con l'IA: Sony lavora a ...
Cyberpunk 2077 in versione PC su smartph...
BYD si gioca un grosso jolly: pronta Rac...
Samsung annuncia l'arrivo in Italia dei ...
Offerta lancio Pixel 10a: come ottenere ...
Google presenta Pixel 10a: poche le novi...
Caos F1 2026: 14 monoposto senza omologa...
Tesla festeggia il primo Cybercab prodot...
Desktop piccolo e potente? NZXT H2 Flow ...
Polestar spinge sull'acceleratore: arriv...
Nuovo record mondiale nel fotovoltaico: ...
L'ultimo baluardo cade: fine supporto pe...
'Il mondo non ha mai visto nulla di simi...
La Commissione europea mette sotto indag...
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: 23:17.


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