Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-01-2008, 19:45   #1
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
[C] _ parola palindroma

Salve a tutti, sto cercando di creare un programma con le funzioni in grado di riconoscere le parole palindroma ma sembra non funzionare (dà errore nel compilare...)


#include <stdio.h>
#include <string.h>
int pali(int a,char stringa);

typedef char stringa[10];

int main () {

stringa parola;
int var1;
printf ("Inserisci parola");
scanf ("%s", parola);
int j=0;
j = pali(int var1, char parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, char parola)
{ int j;
int k;
int i=0;
k = sizeof parola;
while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;}


Idee in merito??
Grazie!!!!

Ultima modifica di pietrone86 : 10-01-2008 alle 19:50.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 20:22   #2
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Allora, direi che ci sono parecchi errori:
  • Per chiamare la funzione pali non devi mettere il tipo: j = pali(var1, parola);
  • La variabile var1 non è inizializzata
  • la funzione pali accetta un int e una char ma gli passi un int e una stringa

Penso sia più o meno tutto...
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 20:25   #3
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Oltretutto, sono quasi certo che l'algoritmo sia sbagliato. Credo che se tu sei alle prime armi sia meglio che tu segua un approccio ricorsivo.
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 22:23   #4
mostec
Member
 
Iscritto dal: Jan 2001
Città: Rimini
Messaggi: 197
in effetti per questo genere di lavori la soluzione ricorsiva è perfetta e mille volte più pulita ed elegante della soluzione iterativa
__________________
Linux + xBox360 + iPod.
Ognuno al suo posto.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2008, 19:15   #5
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
ok grazie per la'iuto . adesso complia eppure dice che tutte le parole sono palindrome

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola);
while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

eppure non mi sembre sbagliato come algoritmo...
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2008, 19:34   #6
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
ok grazie per la'iuto . adesso complia eppure dice che tutte le parole sono palindrome

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola);
while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

eppure non mi sembre sbagliato come algoritmo...


col ricorsivo invece ho provato cosi:


#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali (int a, int m ,stringa parola);



int main () {

stringa parola;
int var1=0;
int var2;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1,var2, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, int m ,stringa parola)
{ int j;
int k = sizeof (parola);
m = k;
while (m!=a)
{if (parola[a] == parola[m]) j=1;
else j=0;}
return j;
int pali(int a++, int m-- , stringa parola);
}
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 04:52   #7
mostec
Member
 
Iscritto dal: Jan 2001
Città: Rimini
Messaggi: 197
è molto confusionaria la tua soluzione inoltre dubito vada...
te ne posto una ricorsiva che ho fatto al volo che a parte scherzi strani dovrebbe essere perfetta.

Codice:
int pali(int begin, int end, char* word){

	int res = 1;	
	if ((begin != end) && (begin+1 != end)){
		res = pali(begin+1,end-1, word); //RICORSIONE FINCHé NON ARRIVA AL CENTRO DELLA PAROLA
	}
	if (res == 0) //CONTROLLA CHE LA RICORSIONE PRECENDENTE NON ABBIA DATO ESITO NEGATIVO
		return 0;	
	if (word[begin] == word[end]) //CONFRONTA LE LETTERE
		return 1;
	else 
		return 0;
}
__________________
Linux + xBox360 + iPod.
Ognuno al suo posto.

Ultima modifica di mostec : 12-01-2008 alle 04:54.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 12:40   #8
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
a me la tua funzione non funziona... dopo che digito la parola non mi dice se è palindroma o meno (grazie per l'aiuto)
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 14:57   #9
mostec
Member
 
Iscritto dal: Jan 2001
Città: Rimini
Messaggi: 197
Codice:
#include <stdio.h>
int pali(int begin, int end, char* word){
	int res = 1;	
	if ((begin != end) && (begin+1 != end)){
		res = pali(begin+1,end-1, word);
	}
	if (res == 0)
		return 0;	
	if (word[begin] == word[end])
		return 1;
	else 
		return 0;
}
int main(int argc, char* argv[]){

	printf("%d",pali(0,3,"anna"));  //STAMPA 1
	printf("%d",pali(0,4,"anena")); //STAMPA 1
	printf("%d",pali(0,3,"ania"));  //STAMPA 0
	printf("%d",pali(0,4,"aneni")); //STAMPA 0
	return 0;

}
perchè non ti funzionerebbe?
__________________
Linux + xBox360 + iPod.
Ognuno al suo posto.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 15:27   #10
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
ok grazie per la'iuto . adesso complia eppure dice che tutte le parole sono palindrome

while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

eppure non mi sembre sbagliato come algoritmo...
Da una veloce lettura l'errore è qui. Esci da quel ciclo solo quando i=k, quindi parola[i] sarà uguale a parola[k] e ti verrà ridato j=1 e quindi tutte le parole saranno palindrome. Puoi risolvere cambiando la condizione del while, ad esempio while (k!=i && j==1)
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 17:03   #11
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
AArgh anche cosi continua a non funzionare!!!

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola);
while (k!=i && j==1)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 19:27   #12
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
AArgh anche cosi continua a non funzionare!!!

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è.."); //MANCA UNA PRINTF

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola); //SIZEOF???USA STRLEN
while (k!=i && j==1) //metti k>i
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}
Ovvio che non funziona. Controlla i miei commenti, inoltre dopo la strlen k va decrementato di 1 altrimenti punta al carattere di fine stringa /0. Poi la variabile j nella funzione non è inizializzata. Infine la funzione prende un parametro che non fa nulla.
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12:11   #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
Io lo farei così:
Codice:
int palindroma_ricorsiva(char *inizio, char *fine)
{
    if(inizio >= fine)
      return 1;

   if(*inizio == *fine)
      return palindroma_ricorsiva(inizio + 1, fine - 1);

   return 0;
}


int palindroma(char *parola)
{
    return palindroma_ricorsiva(parola, parola + strlen(parola) -1);
}
In versione iterativa:
Codice:
int palindroma(char *inizio)
{
   char *fine = inizio + strlen(inizio) - 1;
  
   while(inizio < fine)
   {
      if(*inizio != *fine)
        return 0;
      inizio++;
      fine--;
   }
   return 1;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12:18   #14
maze
Junior Member
 
Iscritto dal: Sep 2006
Messaggi: 19
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
AArgh anche cosi continua a non funzionare!!!

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j==1)
Son l'unico che pensa manchi pure un uguale? Oo
maze è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12:20   #15
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
io la farei così

Codice:
void palind (char *parola) {

int lstr = strlen(parola);
int cont=0;

int i, j;

for (i=0; i<(lstr/2); i++) {
   j=lstr-i-1;
   if (parola[i]==parola[j]) {
      cont++;
   }
}

if (cont==(lstr/2)) {
   printf("Palindroma");
} else {
   printf("Non Palindroma");
}

}

Ultima modifica di nico88desmo : 13-01-2008 alle 12:30.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 13:34   #16
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Quote:
Originariamente inviato da maze Guarda i messaggi
Son l'unico che pensa manchi pure un uguale? Oo
Si, ho saltato di dire che mancava anche ==
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 17:57   #17
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
Adesso mi dice che tutte le parole non sono palindrome...

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(parola);

if (j==1) printf ("è palindroma");
else printf ("non lo è..");

}

int pali (stringa parola)
{ int j=0;
int k;
int i=0;
k = strlen (parola);
k--;
while (k>i && j==1)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

Ultima modifica di pietrone86 : 13-01-2008 alle 17:59.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 19:22   #18
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Ma il codice lo rileggi?Nel ciclo while non entrerai mai...hai sbagliato l'inizializzazione della j
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 22:17   #19
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
Codice:
bool paliter(char* inizio, char* fine)
{
 while(*inizio++==*fine--);
 return --inizio>fine;
}

bool palrec(char* inizio, char* fine)
{
 return inizio>=fine?1:(*inizio==*fine)?pali(inizio+1,fine+1):0;
}

Ultima modifica di Furla : 13-01-2008 alle 22:48.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2008, 09:32   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
Adesso mi dice che tutte le parole non sono palindrome...
Consiglio spassionato... pigliati il codice di cionci, provalo e poi studiatelo un attimo per capirlo: ci sono entrambe le versioni e il codice è pulito, semplice ed elegante.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
La nave elettrica più grande mai ...
Spusu lancia il Wi-Fi Calling: come funz...
Questo robot impara a muovere le labbra ...
iPhone 17 annienta la concorrenza in Cin...
La nuova Xiaomi SU7 batte un record: 4.2...
È possibile copiare i qubit: dei ...
BYD alza ulteriormente l'asticella: batt...
Il nuovo razzo spaziale riutilizzabile c...
L'ex leader di Assassin's Creed porta Ub...
Il razzo spaziale NASA SLS e la capsula ...
Samsung Galaxy S26 Ultra: quattro colora...
AWS investe 1,2 miliardi in Italia. Coin...
La navicella cinese Shenzhou-20 con il f...
I piani Business ed Education di Google ...
Ceres-2 e Lunga Marcia 3B: la Cina falli...
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: 05:18.


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