Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1300 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] tableau [Debutant]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] tableau [Debutant]

n°959411
hotcat
Posté le 22-01-2005 à 19:18:59  profilanswer
 

pour un exo il faut que j'arrive, entre autre, a saisir un tableau (2D) d'entier,sachant que chaque entier ne doit apparaitre qu'une seule fois dans le tableau.
 
J'ai fait le prog pour un tableau à 1D mais je me demande si ca fait pas un peut "usine à gaz" :sarcastic:  
surtout que maintenant je doit le transformer pour un tableau 2D, c'est pas gagné...

Code :
  1. #include <conio.c>
  2. #include <stdio.h>
  3. main()
  4. {
  5.     int x,y,v=0,t,tab[5],temp;
  6.     for (x=0;x<6;x++)
  7.     {
  8.         do
  9.         {
  10.             gotoxy(5+2*x,5);
  11.             scanf("%d",&temp);
  12.             if(x==0)
  13.             {
  14.                 tab[0]=temp;
  15.                 v=0;
  16.             }
  17.             else
  18.             {
  19.                 y=-1;
  20.                 do
  21.                 {
  22.                     y=y+1;
  23.                     if (temp==tab[y])
  24.                     {
  25.                         v=1;
  26.                         t=1;
  27.                     }
  28.                     else
  29.                     {
  30.                         v=0;
  31.                         t=0;
  32.                     }
  33.                  if(y==x-1)
  34.                  {
  35.                      t=1;
  36.                  }
  37.           }       
  38.              while(t!=1);
  39.           } 
  40.         }
  41.         while(v==1);
  42.         tab[x]=temp;
  43.     }
  44.     for (x=0;x<6;x++)
  45.     {
  46.         gotoxy(5+2*x,8);
  47.         printf("%d",tab[x]);
  48.     }
  49.     getch();
  50. }


voila.. je me demandais si il existe une solution un peut moins lourde qui faciliterai la convertion pour les tableaux 2D

mood
Publicité
Posté le 22-01-2005 à 19:18:59  profilanswer
 

n°959433
pains-aux-​raisins
Fatal error
Posté le 22-01-2005 à 20:16:48  profilanswer
 

:heink:
il doit manquer un passage dans tes explications...
l'utilité du biniou exactement ?
dans quel contexte ?

n°959557
Hansolo
Posté le 22-01-2005 à 22:59:20  profilanswer
 

Salut,
 
Je suis intéressé aussi. Mais je ne comprends pas non plus tes explications. Et pourquoi utilises-tu un fichier conio.c ?

n°959607
hotcat
Posté le 23-01-2005 à 00:30:59  profilanswer
 

ok je vous met une partie du sujet ca devrai etre plus claire  :)  
 
Ecrire un programe capable d'effectuer diverses opérations sur un tableau 2D
* la saisie du nbr de ligne (<8) et de colonnes (<8) de ce tableau
* La saisie d'un tableau d'entiers. Pas de saisie multiple d'un même entier (tout entier ne doit apparaître qu'une seul fois dans le tableau ...)
* [...]
 
comme je m'embrouillai pas mal a tenter de faire le 2eme point avec un tableau 2D (tab[8][8] par exemple) j'ai fait le prog si dessus avec un tableau 1D (tab[8] par ex), mais modifier ce programme pour le faire coller avec le sujet est un peut plus compliqué que prévu  :pt1cable:  
. C'est pour ca que j'aimerai savoir si il est possible de trouver une solution plus simple...
 

Citation :


Je suis intéressé aussi. Mais je ne comprends pas non plus tes explications. Et pourquoi utilises-tu un fichier conio.c ?


 
ben c'est une habitude d'apeler conio et stdio  [:sinclaire]  meme si y en a pas forcement besoin, mais dans ce cas on a besoin de conio.c ...

n°959619
fafounet
Posté le 23-01-2005 à 00:43:06  profilanswer
 

Il faut inclure des .h  
De plus conio n'est pas portable

n°959640
hotcat
Posté le 23-01-2005 à 01:05:25  profilanswer
 

fafounet a écrit :

Il faut inclure des .h  
De plus conio n'est pas portable


 
je me sert de Dev-C++ 4.9.9.0 qui utilise conio.c et non conio.h...
et pour se qui est de la portabilité, j'ai pas encore le niveau pour en tenir compte  [:figti]

n°959741
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 10:46:57  profilanswer
 

hotcat a écrit :

pour un exo il faut que j'arrive, entre autre, a saisir un tableau (2D) d'entier,sachant que chaque entier ne doit apparaitre qu'une seule fois dans le tableau.
 
J'ai fait le prog pour un tableau à 1D mais je me demande si ca fait pas un peut "usine à gaz" :sarcastic:  
surtout que maintenant je doit le transformer pour un tableau 2D, c'est pas gagné...
 
voila.. je me demandais si il existe une solution un peut moins lourde qui faciliterai la conversion pour les tableaux 2D


Des commentaires sur ton code:


/* -ed-
 * Erreur de conception. On ne doit pas inclure de .c.
 * Il faut inclure le .h et ajouter le .c au projet.
 
 #include <conio.c>
 */
#define USE_CONIO 0 /* 0 | 1 */
 
#if USE_CONIO
 #include <conio.h>
#endif
/* -ed-
 * Il n'est pas prudent de melanger les fonctions de gestion directe
 * de l'ecran (conio) et les fonctions flux (stdio), surtout si ca concerne
 * les entrees. As-tu vraiment besoin de conio ?
 */
#include <stdio.h>
 
/* -ed- forme naive...
   main()
 */
int main (void)
{
/* -ed-
 * comme je ne comprend rien a ton code, (noms de variables esoteriques)
 * je tente un 'refactoring' en utilisant le principe de la reduction de
 * la portee des variables au strict minimum.
 *
 * D'autre part, j'evite la pollution par 'conio' dans un premier temps.
 */
   int tab[5];
   {
      int x;
      for (x = 0; x < 6; x++)
      {
         int v = 0;
         int temp;
         
         do
         {
            int y;
            int t;
#if USE_CONIO
            gotoxy (5 + 2 * x, 5);
#endif
            scanf ("%d", &temp);
            (void) getchar ();
 
 
/* apparament, ceci est une recherche de doublon...
 * Effectivement, ca parait bien complique.
 *
 * Du dois travailler une demarche algoritmique.
 
 * Redaction textuelle du probleme :
 
 - initialiser le tableau (par exemple tout a 0)
 - Saisir un entier
 - Verifier que cet entier n'est pas deja dans le tableau
 - Si il y est deja, resaisir.
 - Ranger la valeur dans le tableau
 
 * Traduction en langage algorithmique
 
 * MAIN
 *  DEFINE ARRAY 'tab' OF 5 INTEGER
 *
 *  FOR i = 0 TO 4
 *    tab[i] := 0
 *  NEXT i
 *
 *  DO
 *     GET n
 *  WHILE is_in (tab, n)
 *
 *    tab[i] := 0
 * END
 *
 * FUNCTION is_in (tab, n)
 *
 *  found := FALSE
 *  FOR i = 0 TO 4
 *    IF n = tab[i]
 *       found := TRUE
 *    ENDIF
 *  NEXT i
 *
 *  RETURN found
 * END FUNCTION
 
 On voit donc qu'il est plus clair de faire une fonction.
 
*/
            if (x == 0)
            {
               tab[0] = temp;
               v = 0;
            }
            else
            {
               y = -1;
               do
               {
                  y = y + 1;
 
                  if (temp == tab[y])
                  {
                     v = 1;
                     t = 1;
                  }
                  else
                  {
                     v = 0;
                     t = 0;
                  }
                  if (y == x - 1)
                  {
                     t = 1;
                  }
               }
               while (t != 1);
            }
         }
         while (v == 1);
 
         tab[x] = temp;
      }
   }
   
   {
      int x;
      for (x = 0; x < 6; x++)
      {
#if USE_CONIO
         gotoxy (5 + 2 * x, 8);
#endif
         printf ("%d", tab[x]);
      }
      printf ("\n" );
   }
#if USE_CONIO
   getch ();
#else
   (void) getchar ();
#endif
 
/* -ed- puisque main() retourne int... */
   return 0;
}


Message édité par Emmanuel Delahaye le 23-01-2005 à 10:47:49

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959753
KangOl
Profil : pointeur
Posté le 23-01-2005 à 11:19:56  profilanswer
 

ed > su tu fait du C, tu peux pas declarer des variables au milieu d'une fonction ;)


---------------
Nos estans firs di nosse pitite patreye...
n°959754
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-01-2005 à 11:23:31  profilanswer
 

KangOl a écrit :

ed > su tu fait du C, tu peux pas declarer des variables au milieu d'une fonction ;)

en C99, si


---------------
J'ai un string dans l'array (Paris Hilton)
n°959796
KangOl
Profil : pointeur
Posté le 23-01-2005 à 12:05:52  profilanswer
 

a bon !


---------------
Nos estans firs di nosse pitite patreye...
mood
Publicité
Posté le 23-01-2005 à 12:05:52  profilanswer
 

n°959799
blurk
Posté le 23-01-2005 à 12:06:27  profilanswer
 

Même si on n'est pas en C99, on peut déclarer des variables en début de bloc.

n°959803
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-01-2005 à 12:08:13  profilanswer
 

http://www.montefiore.ulg.ac.be/~p [...] ndards.php
 

Citation :


La déclaration de variables n'est plus limitée au début d'un bloc, vous permettant de déclarer une variable juste avant son utilisation.


---------------
J'ai un string dans l'array (Paris Hilton)
n°959807
blackgodde​ss
vive le troll !
Posté le 23-01-2005 à 12:10:54  profilanswer
 

* FUNCTION is_in (tab, n)  
 *  
 *  found := FALSE  
 *  FOR i = 0 TO 4  
 *    IF n = tab[i]  
 *       found := TRUE  
 *    ENDIF  
 *  NEXT i  
 *  
 *  RETURN found  
 * END FUNCTION
 
=> ca sert a rien de continuer a parcourir si on l'a trouvé


---------------
-( BlackGoddess )-
n°959808
KangOl
Profil : pointeur
Posté le 23-01-2005 à 12:10:55  profilanswer
 

ha bin on en apprend tous les jour ici !


---------------
Nos estans firs di nosse pitite patreye...
n°959890
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 13:53:06  profilanswer
 

KangOl a écrit :

ed > su tu fait du C, tu peux pas declarer des variables au milieu d'une fonction ;)


1- Je n'ai pas fait ça, j'ai défini des variables en debut de bloc, ce qui a toujours été possible en C.
2 - Ce que tu dis est permi en C99, mais je ne le fais pas pour des questions de clarté et de portablilité.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959892
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 13:53:43  profilanswer
 

KangOl a écrit :

ha bin on en apprend tous les jour ici !


C'est fait pour!


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959894
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 13:54:48  profilanswer
 

blackgoddess a écrit :

* FUNCTION is_in (tab, n)  
 *  
 *  found := FALSE  
 *  FOR i = 0 TO 4  
 *    IF n = tab[i]  
 *       found := TRUE  
 *    ENDIF  
 *  NEXT i  
 *  
 *  RETURN found  
 * END FUNCTION
 
=> ca sert a rien de continuer a parcourir si on l'a trouvé


Oui. Mais on peut laisser le questionneur améliorer l'algo et le code...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959898
hotcat
Posté le 23-01-2005 à 14:05:41  profilanswer
 

bon, j'ai essayé de transcrire l'algo...

Code :
  1. #include<conio.c>
  2. #include<stdio.h>
  3. int tab[5],i,n,found,x;
  4. int main(void)
  5. {
  6.     for(i=0;i<6;i++)
  7.     {
  8.         tab[i]=0;
  9.     }
  10.    
  11.     for(x=0;x<6;x++)
  12.     {
  13.        
  14.         do
  15.         {
  16.             scanf("%d",n);
  17.             found=is_in (tab,n);
  18.      }
  19.      while(found==1);
  20.    
  21.      tab[x]=n;
  22. }
  23. }
  24. int is_in (int tab,int n)
  25. {
  26.     found=0;
  27.     for(i=0;i<6;i++)
  28.     {
  29.         if (tab[i]==n)
  30.         {
  31.             found=1;
  32.         }
  33.     }
  34.     return(found);
  35. }


 
...mais j'arrive pas a voir l'erreure dans la fonction (subscripted value is neither array nor pointer)
 
en tt cas merci pour l'aide !

n°959909
KangOl
Profil : pointeur
Posté le 23-01-2005 à 14:22:38  profilanswer
 

1/ variable globale :/
2/ mauvais parametres a la fonction is_in :o


---------------
Nos estans firs di nosse pitite patreye...
n°959922
++fab
victime du syndrome IH
Posté le 23-01-2005 à 14:37:51  profilanswer
 

3/ conio.h
4/ return found = 1;

n°959924
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 14:47:03  profilanswer
 

hotcat a écrit :

bon, j'ai essayé de transcrire l'algo...
<...>
...mais j'arrive pas a voir l'erreure dans la fonction (subscripted value is neither array nor pointer)


Beaucoup de fautes... Version corrigée et améliorée (mais améliorable). Pose des questions si tu ne comprends pas.


#include <stdio.h>
 
int is_in (int tab[], int nb_elem, int n)
{
   int found = 0;
   int i;
 
   for (i = 0; !found && i < nb_elem; i++)
   {
      if (tab[i] == n)
      {
         found = 1;
      }
   }
 
   return found;
}
 
 
int main (void)
{
#define N 5
   int tab[N], i, n;
 
   for (i = 0; i < N; i++)
   {
      tab[i] = 0;
   }
 
   for (i = 0; i < N; i++)
   {
      int found;
      do
      {
         scanf ("%d", &n);
         (void) getchar ();
         found = is_in (tab, N, n);
 
         if (found)
         {
            printf ("Doublon\n" );
         }
      }
      while (found);
 
      tab[i] = n;
   }
   return 0;
}


Message édité par Emmanuel Delahaye le 23-01-2005 à 15:20:31

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959926
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-01-2005 à 14:49:28  profilanswer
 

hotcat a écrit :

bon, j'ai essayé de transcrire l'algo...


<conio.h> on t'a dit :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°959927
hotcat
Posté le 23-01-2005 à 14:51:43  profilanswer
 

Citation :

1/ variable globale :/  


c'est tres pratique les variables globales...  :o  
 

Citation :

2/ mauvais parametres a la fonction is_in :o


je vois pas...  
 

Citation :

3/ conio.h  


Dev-C++ ne connais par conio.h, uniquement conio.c  [:sinclaire]  
 

Citation :

4/ return found = 1;


pareil, je vois pas où est le probleme :??:

n°959934
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-01-2005 à 14:57:21  profilanswer
 

hotcat a écrit :

Citation :

1/ variable globale :/  


c'est tres pratique les variables globales...  :o  


c'est très crade aussi, à éviter ! de toutes façons, on arrive toujours à s'en passer
 

hotcat a écrit :


Citation :

3/ conio.h  


Dev-C++ ne connais par conio.h, uniquement conio.c  [:sinclaire]


bien sur que si...
qu'est ce qui te fait dire ça ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°959950
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 15:03:08  profilanswer
 

hotcat a écrit :


Citation :

1/ variable globale :/

 
c'est tres pratique les variables globales...  :o  


Non, et c'est dangereux pour de multiples raisons.
 

Citation :


Citation :

2/ mauvais parametres a la fonction is_in :o


je vois pas...  


 
http://mapage.noos.fr/emdel/notes.htm#param_tab
 

Citation :


Citation :

3/ conio.h


Dev-C++ ne connais par conio.h, uniquement conio.c


 
Il se trouve dans dev-cpp/include. Si il n'y est pas, il faut réinstaller le package 'conio'.


Message édité par Emmanuel Delahaye le 23-01-2005 à 15:18:38

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959963
++fab
victime du syndrome IH
Posté le 23-01-2005 à 15:12:15  profilanswer
 

Citation :


Citation :

4/ return found = 1;
 
pareil, je vois pas où est le probleme :??:


 
Moi non plus!


 

Code :
  1. int is_in (int tab[], int nb_elem, int n)
  2. {
  3.    int found = 0;
  4.    int i;
  5.    for (i = 0; i < nb_elem; i++)
  6.    {
  7.       if (tab[i] == n)
  8.       {
  9.          return found = 1; /* return 1; l'interet de found la dedans ...*/
  10.       }
  11.    }
  12.    return found; /* return 0; */
  13. }

n°959968
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 15:17:21  profilanswer
 

[citation=959963,0,26]

Code :
  1. int is_in (int tab[], int nb_elem, int n)
  2. {
  3.    int found = 0;
  4.    int i;
  5.    for (i = 0; i < nb_elem; i++)
  6.    {
  7.       if (tab[i] == n)
  8.       {
  9.          return found = 1; /* return 1; l'interet de found la dedans ...*/
  10.       }
  11.    }
  12.    return found; /* return 0; */
  13. }

[/citation]
Exact. J'en était resté à mon algo...
Je corrige ma correction!


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959981
hotcat
Posté le 23-01-2005 à 15:36:20  profilanswer
 

ok je voi ou etait le probleme :/
 
y a juste  

Code :
  1. do
  2.       {
  3.          scanf ("%d", &n);
  4.          (void) getchar ();
  5.          found = is_in (tab, N, n);
  6.          if (found) //je vois pas trop comment ca marche...
  7.          {
  8.             printf ("Doublon\n" );
  9.          }
  10.       }
  11.       while (found); //mm probleme que le if


 

n°959996
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2005 à 16:01:24  profilanswer
 

hotcat a écrit :

ok je voi ou etait le probleme :/
 
y a juste  

Code :
  1. do
  2.       {
  3.          scanf ("%d", &n);
  4.          (void) getchar ();
  5.          found = is_in (tab, N, n);
  6.          if (found) //je vois pas trop comment ca marche...
  7.          {
  8.             printf ("Doublon\n" );
  9.          }
  10.       }
  11.       while (found); //mm probleme que le if



 
La fonction is_in() retourne une valeur 0 ou 1. Cette valeur est stockée dans found (0 = not found, 1 = found)
 
if/while (found) est équivalent à if/while (found != 0)
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°959999
hotcat
Posté le 23-01-2005 à 16:07:03  profilanswer
 

Emmanuel Delahaye a écrit :


if/while (found) est équivalent à if/while (found != 0)


 
ok je savais pas
 
merci a tous pour votre aide :jap:  
 
y me reste plus qu'a faire la meme chose pour un tableau a 2D  ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] tableau [Debutant]

 

Sujets relatifs
[Débutant] Problème de classeConstruire une liste ou un tableau en réccurive
[RESOLU] Tri Tableau Multidimensionnel alimenté par LDAP [RESOLU]PHPMYPAGER + design = debutant
Aide Delphi - DébutantManipulation de tableau
Pb mise en forme tableau - CSS !! help medébutant svp
procédure avec renvoi de tableau d'objetmarquee et ie?! + width dans les tableau +ie
Plus de sujets relatifs à : [C] tableau [Debutant]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR