IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

aide pour la résolution d' une exercice en C


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut aide pour la résolution d' une exercice en C
    Salut

    je veux s'il vous plait une aide pour la résolution cette exercice en C

    On considère une phrase comme étant une liste de mots (chaînes de caractères) séparés par un ou plusieurs espaces.
    On appellera cette phrase « phrase première » si chaque mot de cette phrase commence par la même lettre, et dans le cas contraire, on l’appellera « phrase non première ».
    Ecrire un programme, dans un langage de programmation structurée, qui contient une fonction permettant de lire une phrase saisie par l’utilisateur, et une autre fonction permettant de vérifier si cette phrase est première ou non et d’afficher dans chaque cas le message qu’il faut.
    Exemples :
    - La phrase : « Le lieutenant lit la liste » est première.
    - La phrase : « Mes mains molles » est première.
    - La phrase : « Cette phrase est non première » est non première

    et le deuxième

    Ecrire un programme qui remplace chaque espace d’une chaine de caractère par un retour à la ligne et ajoute au début et à la fin de chaque ligne deux étoiles, on suppose qu’il y a un seul espace séparant les mots de la chaine
    Exemple : « Examen Passage TDI 1A »
    **Examen**
    **Passage**
    **TDI**
    **1A**

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 286
    Par défaut
    Bonjour,

    De quelle aide as-tu besoin ?

    Nous ne ferons pas tes exercices à ta place.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    est ce que cette solution est bonne pour le deuxieme ex


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include<stdio.h>
     
    #include<string.h>
     
    main()
    {
        char phrase[50];
        int pos1=0,pos2,i,j;
        printf("entrez une phrase\n");
        gets(phrase);
        for(i=0;i<=strlen(phrase);i++)
        {
            if(phrase[i]==' ' || phrase[i]=='\0' || phrase[i]=='    ')
            {
                pos2=i;
                printf("**");
                for(j=pos1;j<pos2;j++)
                {
                    printf("%c",phrase[j]);
                }
                printf("**");
                pos1=pos2+1;
                printf("\n");
            }
        }
     
    }

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 286
    Par défaut
    Il faut mettre ton code en balise code (le # de l'éditeur).

    Ton code n'est pas indenté, il est difficilement lisible.

    1er problème, si je rentre une chaine de plus de 50 caractère, ton programme plantera : dépassement de tampon,, regardes du coté de fgets au lieu de gets pour éviter cela.

    Il te faut ensuite procéder en deux étapes :
    remplacer les espaces
    ajouter les étoiles en début et fin de chaine

    Pour remplacer les espaces, tu peux faire une boucle et tester tous les caractères, ou tu peux utiliser une fonction comme strchr
    Pour les étoiles, il va te falloir créer une chaine contenant "**", y concaténer la chaine lue (ou tu as remplacé les espaces), puis y ajouter "**" à la fin. Regardes la fonction strcat et les fonctions de sa famille (strcpy, etc).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    merci beaucoup pour votre remarques

    s'il vous plait je veux aussi des remarques pour mon code de la première exercice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #define n 40
     
    void saisi(char p[n])
    {
     printf("donner une phrase \n");
     gets(p);
    }
     
    int verifier(char p[n])
    {
     int a=1,m=1,i,r=0;
     int l=strlen(p);
     for(int i=0;i<l;i++)
     {
    	if(p[i]==' ')
    	{
    	if(p[i+1]==p[0]) a=a+1;
            m++;//nombre de mots
    	}
     }
     printf("a=%d et m=%d\n",a,m);
     if (m==a) r=1;
     return r;
    }
     
    main()
    {
     char p[n];
     int A;
     saisi(p);
     A=verifier(p);
     if(A==1)
    	printf("la phrase <%s> est premiere",p);
     else
    	printf("la phrase <%s> est non premiere",p);
    getch();
    }

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 286
    Par défaut
    Le fait de séparer les différents traitements comme tu l'as fait dans main est une bonne pratique.

    Dans la fonction saisi, si tu rentres plus de 40 caractères, tu auras un buffer overflow. Utilises plutôt la fonction fgets, qui permet d'indiquer un nombre maximal de caractères (ne pas oublier de laisser un caractère pour le \0).

    Pour vérifier, j'utiliserais plutôt la fonction strchr pour trouver les espaces.
    Sinon une boucle for sur chaque caractère de la chaine (strlen permettant de connaitre le nombre cooccurrences de la boucle), et un bloc if pour tester si le caractère actuel est un espace ou non ( avec remplacement du caractère).

    Ensuite, la fonction getch est une fonction de la bibliothèque ncurses, non seulement tu ne l'a pas déclaré dans les .h, mais tu ne peux pas l'utiliser comme ça, ncurses a ses propres fonctions de lecture et écriture de chaines.

    Tu peux utiliser getchar à la place.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut programme en c : problème
    bonjour voila je viens poster ici avec l'espoir que quelqu'un m'aide a régler un certain problème dans mon programme .
    pour votre compréhension la matrice sous forme de vecteur est une image du ciel étoilé les valeurs sont les pixels , je boucle dessus pour compter toute les étoiles .

    alors il n'y a pas d'erreur de compilation , il s'exectute mais pas correctement il y a un problème au niveau du for contenue dans le if qui me sert a initialiser les cases de mon vecteur V a 0

    je m'explique a ce niveau la j'ai une matrice écrit sous forme de vecteur V qui contient un certain nombre de valeur , je veux que les coordonne i et j de mes valeur maximum soit stocké dans un vecteur x et y donc je fais un if pour avoir les coordonnees de mon max dans x et y
    mais pour trouver le prochain max je dois initialiser la précédente valeurs sinon je trouverais toujours le même point .
    je l'initialise donc .

    mais le résultat obtenue n'est pas celui que j'aurais du avoir car avant de mettre la boucle while j'avais fait affiché juste le premier x(0) et avec la boucle while le premier x(0) n'est plus du tout le même .
    je pense donc a un problème avec la remise a 0 .


    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<time.h>
    FILE *pf1 ,*pf2 ;
    #define D 1447680 
    #define n 1040
    #define m 1392
    #define star 3000
     
    int i , j , k , d ,c ,b ,num_star , num_starmaxi ;
     
    double x[star],y[star];
    float somme ,somme2 ,somme3 , moy ,carre_moy , ecart_type , seuil ,seuil2 ,max ;
     
    float V[n*m];
     
    int main(){
     
    num_starmaxi=2000 ;
    somme3=7671;
    somme=0;
    somme2=0;
    seuil2=7670;
    pf1=fopen("allsky_20150716_232659.txt","r");
    // pf2=fopen("image_ciel.dat","w");
     
    for (i=0;i<n;i++){
    for(j=0;j<m;j++){
    fscanf(pf1,"%f \n",&V[i*m+j]);
    //fprintf(pf2,"%f \n",V[i*m+j]);
     
    // somme=somme+V[i*m+j];
    //moy=somme/D ;
     
    // printf("%f \n" , moy);
     
     
     
    //printf("%f \n",V[i*m+j]);
     
     
    }
    }
    fclose(pf1);
    // fclose(pf2);
     
    //pf1=fopen("image_ciel.dat","r");
    //pf2=fopen("seuil_ciel.rtf","w");
    //somme=0;
     
    for(i=0;i<D ;i++){
    //fscanf(pf1,"%f \n ",&V[i]);
     
    somme=somme+V[i];
    somme2=somme2+V[i]*V[i];
    //printf("%f \n" , V[i]);
    }
    moy= somme/D ;
    carre_moy= somme2/D;
    ecart_type= sqrt(carre_moy-(moy*moy));
    seuil= moy + 4*ecart_type ;
     
    printf("%f %f %f %f \n" , moy , carre_moy , ecart_type , seuil);
    printf("%f\n" , somme);
     
    for(i=0;i<D;i++){
    if(V[i]< seuil){
     
    V[i]=0.0 ;
     
    //fprintf(pf2,"%f ∖n ",V[i]);
    //printf("%f",V[i] );
    }
    }
    //fclose(pf1);
    //fclose(pf2);
    num_star=0;
    while( num_star<num_starmaxi){
     
     
    for(i=0;i<n;i++){
    for(j=0;j<m;j++){
    k=i*m+j;
     
    somme3=somme3+V[k];
     
     
    if(max<V[k]){
    max=V[k];
    x[num_star]=j;
    y[num_star]=i;
     
    num_star=num_star+1;
     
     
    for(b=i-2;i<=i+2;i++){ // je suspecte le problème ici .
    for(c=j-2;c<=j+2;j++){
     
    d=b*m+c;
    V[d]=0;
    }}
     
    }
     
     
     
     
    }
     
     
     
    }
    printf("%f \n ",somme3);
    }
     
     
     
    for(i=0;i<num_starmaxi;i++){
     
    printf("%lf %lf \n",x[i],y[i]);
    }
    return 0;
    }

    couverture_nuageuse4.c

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    merci beaucoup beaucoup à vous prof chrtophe

Discussions similaires

  1. Aide pour la résolution d'un exercice
    Par sheridan08 dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 28/11/2009, 16h53
  2. Besoin d'aide pour la résolution d'un exercice
    Par alvarogill dans le forum Fortran
    Réponses: 0
    Dernier message: 06/03/2009, 22h02
  3. Réponses: 2
    Dernier message: 17/10/2008, 12h18
  4. [SYBASE] Aide pour l'écriture d'une requête
    Par karine77 dans le forum Sybase
    Réponses: 2
    Dernier message: 26/04/2005, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo