Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-01-2008, 18: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 18:50.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 19: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, 19: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, 21: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, 18: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, 18: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, 03: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 03:54.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 11: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, 13: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, 14: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, 16: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, 18: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, 11: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, 11: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, 11: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 11:30.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12: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, 16: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 16:59.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 18: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, 21: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 21:48.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2008, 08: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


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Nuovo storico lancio per il razzo spazia...
Elgato Embrace: una sedia ergonomica pro...
Brad Pitt torna in pista: F1 – Il Film a...
Hitachi Vantara annuncia la sua AI Facto...
Brembo passa all'alluminio riciclato al ...
HONOR pronta a sfidare gli iPad Pro con ...
OpenAI esce allo scoperto: confermati i ...
In arrivo altri due prodotti da Apple en...
Il tool per aggiornare da Windows 10 a W...
Rishi Sunak entra in Microsoft e Anthrop...
Porsche in poche ore chiude la formazion...
iPhone 17 disponibili su Amazon al prezz...
La Ferrari Elettrica non è la cau...
Ricarica da record: Zeekr supera i 1.300...
Un 'capezzolo' con feedback aptico al po...
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:35.


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