Difference between revisions of "Palindroma"

From Sistemi Operativi
Jump to navigation Jump to search
Line 44: Line 44:
 
#include <string.h>
 
#include <string.h>
  
 +
#ifdef REC
 +
int palin(char s[], int i, int f){
 +
if (s[i]!=s[f])
 +
return 0;
 +
if (i>=f)
 +
return 1;
 +
return palin(s, i+1, f-1);
 +
}
 +
 +
int palindroma(char s[]){
 +
if (strlen(s)<2)
 +
return 1;
 +
return palin(s, 0, strlen(s)-1);
 +
}
 +
#else
 
int palindroma(char *s) {
 
int palindroma(char *s) {
 
         char *t;
 
         char *t;
Line 50: Line 65:
 
         return 1;
 
         return 1;
 
}
 
}
 +
#endif
 +
  
 
#ifdef DEBUGMAIN
 
#ifdef DEBUGMAIN

Revision as of 03:52, 30 October 2013

Visto che qui non succede nulla, inizio io:

Ecco una implementazione in python3... chi mi propone altre soluzioni alternative?

#!/usr/bin/env python3

def palindrome(x):
  if len(x) < 2: return True
  else:
    if x[0] == x[-1]:
      return palindrome(x[1:-1])
    else:
      return False

if __name__ == "__main__":
  s=input("type in a string: ")
  print("is {} palindrome? {}".format(s,"true" if palindrome(s) else "false"))

Domenique ha proposto questa funzione in C:

int palindroma(char *pnt){

	int dim=strlen(pnt)-1;
	int l=dim/2;
	int k;

	for(k=0;k<=l;k++)
	{ 
		if(pnt[k]!=pnt[dim])
			return 0;
		else
			dim--;	  						
	}
        return 1;
}

altre proposte? Cosa ne dite di questa soluzione?

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

#ifdef REC
int palin(char s[], int i, int f){
	if (s[i]!=s[f])
		return 0;
	if (i>=f)
		return 1;
	return palin(s, i+1, f-1);
}

int palindroma(char s[]){
	if (strlen(s)<2)
		return 1;
	return palin(s, 0, strlen(s)-1);	
}
#else
int palindroma(char *s) {
        char *t;
        for (t=s+(strlen(s)-1); s < t; s++, t--)
                if (*t != *s) return 0;
        return 1;
}
#endif


#ifdef DEBUGMAIN
int main(int argc, char *argv[])
{
        if (argc < 2) return -1;
        printf("%s: %se\' una stringa palindroma\n",argv[1],palindroma(argv[1])?"":"non ");
}
#endif

per compilare il main di prova chiamate il compilatore con il comando seguente

   gcc -DDEBUGMAIN -o pali pali.c

(ovviamente mutatis mutandis, se il vostro sorgente non si chiama pali come il mio)

Chi ha voglia di fare una soluzione iterativa in Python e ricorsiva in C?