CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Palindromes :)

Okami83
Okami83
Niveau 6
03 janvier 2008 à 17:51:13

Bonsoir tout le monde, je dois ecrire le programme qui détermine si une chaîne de caractère est un palindrome.
On rappelle qu’une chaîne de caractère se termine par le caractère ‘\0’.

Je fais donc appel à votre aide sans utiliser la fonction ispalindrome mais simplement avec des tableaux et des for!

voici mon programme qui ne marche pas représentant le fruit de mon vain travail

  1. include <stdio.h>
  2. include <stdlib.h>

int main(void){
char T[51];
int i=0,j=0,test=0;

fgets(T,50,stdin);

for(j=0; T[j]!=0; j++)
{j=j-1;
}

for(i=0;i<j;i++,j--)
{
if(T[i]==T[j])
{
test=1;
}

}

if(test==1){
printf("c´est un palindrome");
}
else{
printf("ce n´est pa un palindrome");
}

system("pause");
return (0);
}

:merci: à tous ceux qui voudront m´aider.

godrik
godrik
Niveau 30
03 janvier 2008 à 18:19:34

ca ne marceh pas n´est pas une explication suffisante. Qu´est ce qui ne marche pas ?
Tu rentres un palindrome et il te dit que ce n´est pas un palindrome ? l´inverse ? Ton programme ne compile pas ? provoque une erreur de mémoire ?

Okami83
Okami83
Niveau 6
03 janvier 2008 à 18:39:21

ben en fait je rentre le mot et rien ne se passe aprés le programme n´avance plus.

dnob700
dnob700
Niveau 10
03 janvier 2008 à 18:53:50

C´est pas tout à fait etonnant : tu fait une boucle sur j de 0 à j tel que T[j]==0 et à chaque pas tu incremente j. Mais dans le corps de la boucle, tu diminue j de 1. donc tu fait une boucle infinie.

Chaos_Clad
Chaos_Clad
Niveau 10
03 janvier 2008 à 21:17:19

En parlant de palindrôme, je me rappelle d´un morceau de code qui écrivait en sortie sur l´imprimante et le code tout entier faisait un palindrôme, c´était du C je crois, et assez impressionnant ^^

naruto_forever
naruto_forever
Niveau 10
03 janvier 2008 à 22:40:07

Heu que veux-tu dire par " le code tout entier faisait un palindrome" ? o_O

Fvirtman
Fvirtman
Niveau 10
04 janvier 2008 à 01:15:02

"le code tout entier faisait un palindrôme" :ouch:

Je demande a voir !
Soit le fichier n´incluais aucun .h, soit il se finissait par un #

Comment un code C peut il se finir par # ?

Chaos_Clad
Chaos_Clad
Niveau 10
04 janvier 2008 à 06:28:27

Ben le code tout entier faisait un palyndrôme quoi, si on lisait le code un endroit ben on avait un code, et si on le lisait à l´envers et ben on avait le même code, un palyndrôme quoi ^^
Vous connaissez pas les petits concours du code le plus illisible ? Ben y´a aussi le code le plus poétique etc.

Mais bon je l´ai vu y´a longtemps et je serai incapable de vous retrouver l´adresser :-/

Sankukai
Sankukai
Niveau 10
04 janvier 2008 à 14:21:20

Ce code là :
http://www.ioccc.org/1987/westley.c

?

Chaos_Clad
Chaos_Clad
Niveau 10
04 janvier 2008 à 15:31:32

Oui c´était celui-là :)

godrik
godrik
Niveau 30
04 janvier 2008 à 17:32:39

la c´est chaque ligne qui est un palindrome.
tu peux toujours tricher en mettant des commentaires fvirtman

  1. include "toto.h"//

//"h.otot" edulcni#

m-2
m-2
Niveau 10
05 janvier 2008 à 18:31:20

il faut que tu vois le palindrome comme étant symétrique.. tu vérifie que le premier caractère de ta chaîne soit égale au dernier, que les 2e est égale à l´Avant-dernier, etc...

ca donne à peu près ceci:

bool estUnPalindrome = true;

for (int i = 0; i != T.lenght()/2; ++i)
{
if (T[i] != T[T.lenght()-i])
estUnPalindrome = false;
}

[Erosquare[
[Erosquare[
Niveau 10
10 janvier 2008 à 03:04:27
  1. include <stdio.h>
  2. include <stdlib.h>
  3. define bool int
  4. define true 1
  5. define false 0

bool palindrome(char unMot[], int uneTaille);

int main(int argc, char* argv[])
{
char leMot[50];
char laLettre;
int i = 0;

printf("Entrez un mot (termine par un .) : ");
laLettre = getchar();

while (laLettre != ´.´)
{
leMot[i] = laLettre;
i++;
laLettre = getchar();
}

i--;

if (palindrome(leMot, i) == true)
printf("\nC´est un palindrome\n\n");
else
printf("\nCe n´est pas un palindrome\n\n");

return 0;
}

bool palindrome(char unMot[], int uneTaille)
{
int j = 0;

while ((unMot[uneTaille] != unMot[j]) && (uneTaille < j))
{

j++;
uneTaille--;
}

if (unMot[uneTaille] == unMot[j])
return true;
else
return false;
}

saleGauss
saleGauss
Niveau 9
10 janvier 2008 à 23:58:58

Bonjour.
Perso, bien que ca soit à faire en C, je le verrais purement dans un style fonctionnel.
Qu´est-ce qu´un palindrome ?
Une chaine de caractère qui peut se lire dans les deux sens.
Nottons qu´une la chaine vide et la chaine formée d´un seul caractère est un palindrome.

Bien, comment vérifier alors qu´une chaine (ou tableau) est un palindrome ?
Et bien il suffit que sa tete et sa queue soient identiques, et que ce qui est entre soit aussi un palindrome.

DOnc cela s´écrie très naturellement de manière recursive

Voila du code C++

bool Palindrome(int monTableau[], int min, int max)
{

if(max-1 >= min+1)
{
if ((monTableau[min] == monTableau[max]) && (Palindrome(monTableau, min+1, max-1)))
{
return(true);
}
else
{
return(false);
}
}
else
{
return(true);
}

}

J´espere avoir pu t´aider un peu

m-2
m-2
Niveau 10
11 janvier 2008 à 00:00:43

ton code est étrange et pas optimisé..

godrik
godrik
Niveau 30
11 janvier 2008 à 00:15:46

personnelement, le fait que ca ne soit pas optimisé, je ne parierai pas dessus. Les compilateurs sont tres fort parfois.

Par contre, l´interet de l´ecrire en fonctionnel me parait douteux. Ce n´est pas vraiment plus simple.

saleGauss
saleGauss
Niveau 9
11 janvier 2008 à 01:11:02

je trouvais juste que cela était vraimment naturel.
Puisque il faut successivement vérifier que la tete et la queue soient identiques puis vérifier que le reste qoit aussi un palindrome.
Enfin c´est comme ca que je le vois.
Mais c´est peut etre ces quelques mois passés que haskell et caml qui m´amènent à penser (enfin) comme ca.
J´en arrive presque à etre dégouté quand je code en C++.
J´en ai parfois reellement mare du abs niveau.
Je veux des fonctions de premier ordre, du filtrage, une recursivité naturelle induite par ems données.... haaaa...

Tiens, je testerais demain une différence de perfs entre une implémentation fonctionnelle et une impérative.

Bien sur, si c´était une liste avec ocaml ca serait bien plus joli...
c´ets dur de faire du fonctionnel joli en C++ :-(
Bon en meme temps c´est pas fait pour mais bon...

Bonne soirée all

dnob700
dnob700
Niveau 10
11 janvier 2008 à 17:42:05

en remplaçant toute tes lignes du milieu par :
return ((monTableau[min] == monTableau[max]) && (Palindrome(monTableau, min+1, max-1)))

tu ne gagne pas en perf, mais ça devient bien plus claire.

Écrire :
"if b then true else false" est une abération, surtout en programmation fonctionnel.

"J´en arrive presque à etre dégouté quand je code en C++. "

C´est marrant, ça m´est arrivé l´autre jour : je devais écrire un petit programme (disons de moins de 100 lignes) avec une bibliothèque en C++. Je commence, et très vite je m´arrache les cheveux sur le C++ qui est trop moche (en plus la bibliothèque est un truc de physiciens donc particulièrement mal écrit) et qui ne permet pas d´écrire ce à quoi je pense de manière simple. Qu´à cela ne tienne me dis-je, je vais faire un binding Caml de cette bibliothèque et ensuiteje coderais en Caml.

Bon, donc pour écrire ce programme (ce qui est le boulot d´une demi heure), ça fait trois jours que je code ce binding, j´en suis à plus d´un millier de lignes de code d´un mélange assez infâme de Caml et de C, et je n´ai toujours pas écrit mon programme.
Par contre, je ré-écrit les exemples qui viennent avec la bibliothèque et là, je m´aperçois que même si j´ai beaucoup plus de facilité à écrire du Caml que du C++, le code produit n´est, objectivement, pas vraiment plus joli, ni même particulièrement plus court.

godrik
godrik
Niveau 30
11 janvier 2008 à 19:46:30

en fait, ce que je voulais dire c´est que l´algorithme iteratif de palindrome est parfaitement clair. C´est meme comme que tu vérifie les longs palindromes a la main.

Tu met un doigt de chaque coté de la ligne et tu raproches tes doigts d´une position apres avoir vérifier qu´ils pointent bine sur la meme valeur.

And now something completly different:
Au niveau des bindings caml/C, parfois ca se passe vraiment tres mal. Tu as des problemes d´allocations mémoire qui peuvent venir assez rapidement. Une fonction prends un void* en parametre, et va faire des choses obscure dessus. Ton garbage collector est dans les choux, il ne peut pas savoir quand désallouer la mémoire. En l´occurence, le port caml a été abandonner parceque personne ne voyait comment l´écrire sans refactoré la moitié du moteur en C.

dnob700
dnob700
Niveau 10
11 janvier 2008 à 22:55:31

Heureusement avec cette lib je n´ai pas eu ce genre de problème (c´est pas non plus mon premier binding) vu que même si le code est très sale, les "objets" utilisés par le code C++ sont globalement des struct avec plein de variables membres et toutes les fonctions sont constantes, donc rien ne bouge pendant l´exécution du programme.

Et c´est là l´avantage du C++ sur le C, comme qu´il n´y a pas trop d´arithmétique de pointeur tu peut sans problème mettre un pointeur vers un objet dans une value avec une fonction de finalisation et pour peu que le destructeur n´ait pas besoin d´être appelé à un moment précis, tout ce passe bien.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment