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

Petite aide svp.

Naitch
Naitch
Niveau 10
12 octobre 2012 à 11:13:19

Salut les gars !

J'ai un exercice de programmation à faire mais je suis complètement bloqué, je vois pas du tout quoi faire... En fait c'est un projet qui est composé de deux exercices qui ont un lien entre eux, je suis arrivé à faire le premier mais le deuxième m'est totalement flou.
Le premier exercice consistait à réaliser un programme en C qui vérifie si deux chaines "matchent" entre elles, en sachant que dans l'une des chaines, des étoiles peutvent s'immiscer et prendre n'importe quelle chaine de caractère pour faire en sorte que les deux chaines matchent.

• Exemple :
◦ "main.c" et "*.c" matchent car il est possible de remplacer ’*’ par la chaîne
"main" pour faire en sorte que les deux chaînes soient identiques

La deuxième chaine peut contenir autant d'étoiles que possible. Je suis donc arrivé à faire ce programme : voici mon code.

int match(char *s1, char *s2)
{
int i;
int a;

i = 0;
a = 0;
match2(s1, s2, a, i);
}

int match2(char *s1, char *s2, int a, int i)
{
while (s1[i + a] == s2[i] || s2[i] == '*')
{
if (s1[i + a] == s2[i])
{
i = i + 1;
}
if (s2[i] == '*')
{
while (s2[i + 1] != s1[i + a] && s2[i + 1] != '*')
{
if (s1[i + a] == '\0')
{
return (0);
}
a = a + 1;
}
a = a - 1;
}
i = i + 1;
if (s1[i + a] == '\0' && s2[i] == s1[i + a - 1])
{
return (1);
}
}
return (0);
}

Le problème arrive pour le deuxième programme où l'énoncé est le suivant :

• Le but de la fonction est de compter le nombre de fois que le deux chaînes matchent.
• Lorsqu’on a deux étoiles ou plus, plusieurs combinaisons de chaînes de caractères
peuvent convenir.
• nmatch calculera le nombre total de ces combinaisons.
• Exemple :
◦ "abcbd" et "*b*" matchent 2 fois : ("a","cbd") et ("abc", "d")
◦ "abc" et "a**" matchent 3 fois : (rien,"bc") et ("b", "c") et ("bc", rien)

C'est là que je comprends vraiment rien, j'ai l'impression qu'il y a tellement de trucs à gérer que c'est impossible pour moi qui ait commencé la programmation il y a une semaine et demie. Si quekqu'un pouvait m'aider en me donnant les grandes lignes et en m'expliquant ce que je dois faire, sans me donner de code tout fait, pour que je puisse me lancer car je n'y arrive pas du tout.
Au fait, on a pas le droit aux fonctions for, printf, do while... (Epitech spotted)

Merci d'avance de m'aider ! :)

hyrulink2
hyrulink2
Niveau 7
12 octobre 2012 à 12:03:36

"Au fait, on a pas le droit aux fonctions for, printf, do while... (Epitech spotted) "
:d) Je compatis, vous avez des règles encore plus stupides qu'à EPITA apparemment.

Pour ton exercice, as-tu le droit à la récursivité? Ça simplifie beaucoup le problème.

Naitch
Naitch
Niveau 10
12 octobre 2012 à 13:20:35

Oui on a le droit :)

J'avoue que c'est assez contre-productif :-(

hyrulink2
hyrulink2
Niveau 7
12 octobre 2012 à 13:53:08

Ok, donc tu peux commencer à raisonner comme ça:
- Pour x != '*', nmatch(c..., x...) vaut nmatch(..., ...) si x == c, 0 sinon. Exemple: nmatch("abc", "a*") revient au même que nmatch("bc", "*") mais nmatch("abc", "c*") vaut toujours 0.
- Que vaut nmatch(chaine, "") ?
- Que vaut nmatch(c1c2...cn, *...)? avec c1, c2, ... cn les caractères de la chaîne à matcher?

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