3 peutite question en C

3 peutite question en C - C - Programmation

Marsh Posté le 11-02-2006 à 14:58:21    

salut . je suis un débutant en c et j'émeré poser 3 petite Question :
 
1)
ésqu'il existe une fonction ou instruction pour redientionné un tableau (1D) selon le choix de l'utilisateur ?
car quand je déclar un tab avec plusieur valeurs  et je nutilise qu'une petite partie , je gache de la place mémoire inutilement .
2)
comment faire la négation d'une expretion en c ; (le NON) .
3)
coment utiliser une variable booléene en c .
 
voila!        oui   je    sais      je    suis     vrément    débutant  .
 
mérci pour l'aide .

Reply

Marsh Posté le 11-02-2006 à 14:58:21   

Reply

Marsh Posté le 11-02-2006 à 15:22:12    

1. il faut faire des allocations dynamiques
2. avec l'opérateur unaire !
3. en C, il n'y a pas de vrai booléen. Le 0 vaut false et toutes les autres valeurs sont true

Reply

Marsh Posté le 11-02-2006 à 15:34:55    

Faudrait aussi voir à apprendre le français :o


---------------
Töp of the plöp
Reply

Marsh Posté le 11-02-2006 à 15:41:45    

_darkalt3_ a écrit :

Faudrait aussi voir à apprendre le français :o


c'est vrai que ca pourrait s'avérer utile :D

Reply

Marsh Posté le 11-02-2006 à 15:48:00    

[quotemsg=1303479,2,274546]1. il faut faire des allocations dynamiques
 
 
coment ça des allocations dynamiques    :pt1cable:  
 
 
( le FR !    j'écri rapidemen  pour accélerer   :lol: )
 
mérci pour l'aide coméme  :hello:    
 :jap:  :jap:  :jap:  

Reply

Marsh Posté le 11-02-2006 à 15:49:37    

olivier318 a écrit :

[quotemsg=1303479,2,274546]
( le FR !    j'écri rapidemen  pour accélerer   :lol: )


oui mais non, ici c'est pas un portable. si tu ne veux pas que je ferme ce topic comme j'ai fermé ton précédent, je te demanderais d'écrire correctement


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-02-2006 à 15:56:15    

OK Ok     désolé

Reply

Marsh Posté le 11-02-2006 à 15:58:48    

olivier318 a écrit :


coment ça des allocations dynamiques    :pt1cable:  


cherche dans ton bouquin ou des tutos, je vais pas tout t'expliquer ici

Reply

Marsh Posté le 11-02-2006 à 17:56:42    

ritzle a écrit :

3. en C, il n'y a pas de vrai booléen. Le 0 vaut false et toutes les autres valeurs sont true


bool appartient à quel langage ??


Message édité par Profil supprimé le 11-02-2006 à 17:57:17
Reply

Marsh Posté le 11-02-2006 à 18:11:28    

Il y a _Bool en C99, qui avec l'inclusion de la stdbool.h devient bool.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 11-02-2006 à 18:11:28   

Reply

Marsh Posté le 11-02-2006 à 19:56:11    

allocation dyn:
 
int tab[];
 
et apres la taille de ton tab varie automatiquement selon que tu y ajute des elements.

Reply

Marsh Posté le 11-02-2006 à 20:32:33    

mbarekh a écrit :

allocation dyn:
 
int tab[];
 
et apres la taille de ton tab varie automatiquement selon que tu y ajute des elements.


 
NON NON ET NON
 

Code :
  1. int* monTab;
  2. size_t taille = 8;
  3. // allocation
  4. monTab = malloc( taille* szieof(int) );
  5. // desallocation
  6. free(montab);

Reply

Marsh Posté le 11-02-2006 à 20:34:26    

mbarekh a écrit :

allocation dyn:
 
int tab[];
 
et apres la taille de ton tab varie automatiquement selon que tu y ajute des elements.


je quote pour la postérité


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-02-2006 à 16:36:08    


+10000
 
 
 
[:aure013]
 

mbarekh a écrit :

allocation dyn:
 
int tab[];
 
et apres la taille de ton tab varie automatiquement selon que tu y ajute des elements.


 
 
 
Il n'y a ni de vecteur ni d'array list en c !!!!
Essaye de déclarer un tableau de cette façon, je pense que le compilateur va t'insulter...
 
 
Pour info un tableau s'utilise de la façon suivante :
 
Définition : (pour un tableau de int comme dans ton exemple)
 

Code :
  1. ...
  2. int tab[TAILLE];
  3. ...


 
TAILLE étant le nombre de cases que tu peux avoir dans ton tableau (le nombre de cases ne peux pas varier !!!), il peut sagir d'une marco constante.
 
Utilisation :  
 

Code :
  1. ...
  2. int val;
  3. val = tab[INDEX];
  4. ...


 
0 =< INDEX < TAILLE
 
 
Pour ce qui est de l'allocation :
google ->  
              stdlib.h
              malloc()
              calloc()
              realloc()
...

Reply

Marsh Posté le 12-02-2006 à 17:59:15    

Joel F a écrit :

NON NON ET NON
 

Code :
  1. int* monTab;
  2. size_t taille = 8;
  3. // allocation
  4. monTab = malloc( taille* szieof(int) );
  5. // desallocation
  6. free(montab);



 
 
et mieux encore, pour plus de modularité
 

Code :
  1. monTab = malloc( taille * sizeof *monTab )


 
parce que la taille d'un objet pointé par monTab (si ce n'est pas un void *) c'est avant tout 'sizeof *monTab'

Reply

Marsh Posté le 12-02-2006 à 18:11:26    

skelter a écrit :

et mieux encore, pour plus de modularité
 

Code :
  1. monTab = malloc( taille * sizeof *monTab )


 
parce que la taille d'un objet pointé par monTab (si ce n'est pas un void *) c'est avant tout 'sizeof *monTab'


 
 
Pas mal, c'est de mieux en mieux. [:acherpy]
Qui a parlé d'objet, c'est du C y a pas de POO là dedans !!!!
Puis le "monTab = malloc( taille * sizeof *monTab )" sa c'est de l'art !!!
 
 
Non mais des fois faudrait penser à ouvrir un bouquin de C !!!
 
Mais bien jouè skelter, tu m'a eut, je pensais pas que c'était possible de poster des trucs pareils.
Impressionant !
 
 
-> Edit :
 
Je viens de trouver sa quelques topics plus bas  
 
http://mapage.noos.fr/emdel/images/c_warn.png
 
mdr  :lol:

Message cité 2 fois
Message édité par pj_crepes le 12-02-2006 à 18:15:24
Reply

Marsh Posté le 12-02-2006 à 18:35:02    

Citation :

Qui a parlé d'objet, c'est du C y a pas de POO là dedans !!!!


la question c'est qui a parlé de POO -> toi
 

Citation :

Non mais des fois faudrait penser à ouvrir un bouquin de C !!!


prete moi le tien
 

Citation :

Mais bien jouè skelter, tu m'a eut, je pensais pas que c'était possible de poster des trucs pareils.
Impressionant !


 
moi non plus je pensais pas, d'ailleur je quote
 

pj_crepes a écrit :

Pas mal, c'est de mieux en mieux. [:acherpy]
Qui a parlé d'objet, c'est du C y a pas de POO là dedans !!!!
Puis le "monTab = malloc( taille * sizeof *monTab )" sa c'est de l'art !!!
 
 
Non mais des fois faudrait penser à ouvrir un bouquin de C !!!
 
Mais bien jouè skelter, tu m'a eut, je pensais pas que c'était possible de poster des trucs pareils.
Impressionant !
 
 
-> Edit :
 
Je viens de trouver sa quelques topics plus bas  
 
http://mapage.noos.fr/emdel/images/c_warn.png
 
mdr  :lol:


 
 
edit: c'est trop fort, je quote un extrait du site d'ou vien ton image  
 
http://mapage.noos.fr/emdel/notes.htm#malloc
 

Citation :

Lorsqu'il s'agit d'un pointeur typé, il existe une technique alternative qui consiste à utiliser la taille d'un élément pointé par ce pointeur :
 

Code :
  1. {
  2.    int *p = malloc (sizeof *p);
  3. }



Message édité par skelter le 12-02-2006 à 18:38:28
Reply

Marsh Posté le 12-02-2006 à 18:43:37    

Citation :

la question c'est qui a parlé de POO -> toi


 
Ok, POO = "Programmation Orientée Objet" -> à partir du moment ou tu parles d'ojet c'est de la POO.
Voici ce que tu as mis dans ton premier post :
 

Citation :

parce que la taille d'un objet pointé par monTab (si ce n'est pas un void *) c'est avant tout 'sizeof *monTab'


 
C'est moi qui ait parlé d'objet ?
 
 

Citation :

prete moi le tien


 
Ha parce que tu n'en as pas, le problème doit être là. :D
 
 

Citation :

moi non plus je pensais pas, d'ailleur je quote


 
Dans ce cas fait toi plaisir, mais j'ai toujours pas vu l'intérêt du quote...

Reply

Marsh Posté le 12-02-2006 à 18:53:16    

Citation :

edit: c'est trop fort, je quote un extrait du site d'ou vien ton image  
 
http://mapage.noos.fr/emdel/notes.htm#malloc


 
C'est vrai, alors pour répondre à sa.
Déjà la différence entre ton code et sa c'est que dans l'exemple du site c'est casté (ce qui fait que sa fonctionne).
Essaye de faire un printf() de sizeof(*p) et autre avec sizeof((int)*p).
Cependant je trouve cela absolument sans intérêt et pas propre du tout.
Et en plus c'est source d'erreurs, ton post en est la preuve...

Message cité 1 fois
Message édité par pj_crepes le 12-02-2006 à 18:54:10
Reply

Marsh Posté le 12-02-2006 à 18:55:08    

Citation :

à partir du moment ou tu parles d'ojet c'est de la POO


 
on n'a pas fini
http://www.google.fr/search?hl=fr& [...] cher&meta=
 

Citation :


Dans ce cas fait toi plaisir, mais j'ai toujours pas vu l'intérêt du quote...


 
explique en quoi ce code

Code :
  1. monTab = malloc( taille * sizeof *monTab )


est une absurdité

Reply

Marsh Posté le 12-02-2006 à 18:58:00    

pj_crepes a écrit :

Citation :

edit: c'est trop fort, je quote un extrait du site d'ou vien ton image  
 
http://mapage.noos.fr/emdel/notes.htm#malloc


 
C'est vrai, alors pour répondre à sa.
Déjà la différence entre ton code et sa c'est que dans l'exemple du site c'est casté (ce qui fait que sa fonctionne).
Essaye de faire un printf() de sizeof(*p) et autre avec sizeof((int)*p).
Cependant je trouve cela absolument sans intérêt et pas propre du tout.
Et en plus c'est source d'erreurs, ton post en est la preuve...


 
je confirmes, achete toi un bouquin sur le langage C, et j'ai bien précisé si le pointeur n'est pas un pointeur void (comme c'est précisé sur le site d'Emmanuel, si le pointeur est typé)

Reply

Marsh Posté le 12-02-2006 à 19:00:00    

Citation :

on n'a pas fini


 
Certes, mais on est dans la section programmation. :D
 
 

Citation :

explique en quoi ce code est une absurdité


 
Bin c'est simple, tu demandes la taille d'une zone mémoire dont l'allocation mémoire n'a pas encore été faite puisque le coeur du sujet est le malloc.

Message cité 1 fois
Message édité par pj_crepes le 12-02-2006 à 19:02:06
Reply

Marsh Posté le 12-02-2006 à 19:02:23    

parce que en plus t'u n'as pas compris ce que retourne sizeof, t'es au courant qu'une expression 'sizeof truc' est résolu statiquement ?
 

Citation :

Certes, mais on est dans la section programmation. :D


 
et alors, c'est pas parce-que je dis objet que je parle forcement de POO, c'est une notion assez abstraite

Message cité 1 fois
Message édité par skelter le 12-02-2006 à 19:04:42
Reply

Marsh Posté le 12-02-2006 à 19:04:07    

skelter a écrit :

parce que en plus t'u n'as pas compris ce que retourne sizeof, t'es au courant qu'une expression 'sizeof truc' est résolu statiquement ?


 
cad ?
par rapport à quoi ?

Reply

Marsh Posté le 12-02-2006 à 19:05:32    

si
 
int *p;
 
alors
 
sizeof *p == sizeof(int)

Reply

Marsh Posté le 12-02-2006 à 19:13:54    

Bin ton compilateur a intérêt à être gentil parce que sous gcc 4.0 (avec les options -W -Wall) -> Warning.
C'est de a bonne technique de bourrin, qui n'a aucun intérêt à part compliquer le code.

Reply

Marsh Posté le 12-02-2006 à 19:32:17    

pj_crepes a écrit :

Bin ton compilateur a intérêt à être gentil parce que sous gcc 4.0 (avec les options -W -Wall) -> Warning.
C'est de a bonne technique de bourrin, qui n'a aucun intérêt à part compliquer le code.


 
l'interet c'est la modularité, et faut vraiment etre maso pour se privé de ce genre d'astuce avec le C
 

Code :
  1. int *p;
  2. ...
  3. p = malloc(taille * sizeof(int));


 
en admettant que sizeof(short) < sizeof(int), si je fais cette modification

Code :
  1. short *p;


en oubliant de modifier le (ou les) appel de malloc correspondant ca fais boum
 
pour le warning, ca te le fait meme en '-ansi', tu peux l'afficher ?


Message édité par skelter le 12-02-2006 à 19:32:57
Reply

Marsh Posté le 12-02-2006 à 21:56:44    

Je me pose bien la question de savoir pourquoi tous les deux "Skelter" et "PJ_crepes" essayent de faire une sorte de chalenge qui a mon avis ne repond pas à question initialement poseée?

Reply

Marsh Posté le 12-02-2006 à 23:51:08    

les e-penis tout ça :sarcastic:
PJ_crepes doit avoir un script perl qui scrite les forum pr voir qui poste le mot "objet" pr repondre d'un psot avec HA LA POO FFS

Reply

Marsh Posté le 13-02-2006 à 11:20:24    

fiou j'ai jamais vu autant d'anneries d'un coup :)

Reply

Marsh Posté le 13-02-2006 à 14:00:48    

je ne vois pas l'intêret de ce Bla Bla ....
mais merci comem......................................... :hello:  
 :jap:  :jap:  :jap:

Reply

Marsh Posté le 14-02-2006 à 12:58:02    

mbarekh a écrit :

allocation dyn:

int tab[];


et apres la taille de ton tab varie automatiquement selon que tu y ajute des elements.


T'es sûr que tu parles de C ? Parce qu'en C, c'est absolument faux.


---------------
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/
Reply

Marsh Posté le 14-02-2006 à 13:03:56    

pj_crepes a écrit :

Pas mal, c'est de mieux en mieux. [:acherpy]
Qui a parlé d'objet, c'est du C y a pas de POO là dedans !!!!


Un objet est une variable. Le C est un langage orienté fonction, mais il manipule quand même des objets. D'autres langages sont orientés objets, mais ils manipulent aussi des fonctions. Il faut se renseigner avant de dire n'importe quoi.

Puis le "monTab = malloc( taille * sizeof *monTab )" sa c'est de l'art !!!


C'est vrai. Il y a quelque chose qui te choque ?


---------------
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/
Reply

Marsh Posté le 14-02-2006 à 13:05:51    

pj_crepes a écrit :


Ok, POO = "Programmation Orientée Objet" -> à partir du moment ou tu parles d'ojet c'est de la POO.


Tu t'enfonces. Resnseigne toi sur ce qu'est un objet. Et cesse de confondre objet et classe.


---------------
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/
Reply

Marsh Posté le 14-02-2006 à 13:09:20    

pj_crepes a écrit :

Bin c'est simple, tu demandes la taille d'une zone mémoire dont l'allocation mémoire n'a pas encore été faite puisque le coeur du sujet est le malloc.


Et alors ? Le compilateur connait le type du pointeur. Il en déduit la taille de l'objet pointé avec 'sizeof *p' qui est une expression constante équivallente à 'sizeof p[0]'. Il n'y a pas de déréférencement.


---------------
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/
Reply

Marsh Posté le 14-02-2006 à 13:19:14    

pj_crepes a écrit :

Bin ton compilateur a intérêt à être gentil parce que sous gcc 4.0 (avec les options -W -Wall) -> Warning.


Prouve le. Montre

  • Le code
  • La ligne de commande
  • Le message d'erreur



#include <stdio.h>
 
int main (void)
{
   int *p;
 
#define PRT(x)\
   printf (#x " = %u\n", (unsigned) x)
 
   PRT (sizeof *p);
   PRT (sizeof(int));
 
#undef PRT
 
   return 0;
}


qui donne (Code::Blocks)


sizeof *p = 4
sizeof(int) = 4
 
Press ENTER to continue.


 
gcc 3.4.2


-O2 -DCODEBLOCKS -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int
-Werror-implicit-function-declaration -Wmain -Wparentheses -Wsequence-point
-Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized
-Wunknown-pragmas  -Wfloat-equal -Wundef -Wshadow -Wpointer-arith
-Wbad-function-cast -Wwrite-strings -Wconversion -Wsign-compare
-Waggregate-return -Wstrict-prototypes -Wmissing-prototypes
-Wmissing-declarations -Wmissing-noreturn -Wformat -Wmissing-format-attribute
-Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs
-Winline -Wlong-long -Wunreachable-code



Compiling: main.c
Linking console executable: D:\dev\ed02\cb\ed02.exe
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings


Message édité par Emmanuel Delahaye le 14-02-2006 à 13:20:34

---------------
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/
Reply

Marsh Posté le 14-02-2006 à 13:24:02    

et voici maestro qui arrive et qui met tout le monde d'accord :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-02-2006 à 13:34:02    

Bof ça reste ambigue cette histoire d'objet. En POO, un objet est une instance d'une classe et en programmation procédurale c'est donc une instance de structure ?
 
Ce n'est au fond qu'un problème de vocabulaire mais bon ça serait bien d'aller au bout du sujet.

Reply

Marsh Posté le 14-02-2006 à 13:49:39    

Harkonnen a écrit :

et voici maestro qui arrive et qui met tout le monde d'accord :D


T'ain, je pars 3 jours en vacances, et c'est le bazar...


---------------
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/
Reply

Marsh Posté le 14-02-2006 à 13:58:32    

slash33 a écrit :

Bof ça reste ambigue cette histoire d'objet. En POO, un objet est une instance d'une classe et en programmation procédurale c'est donc une instance de structure ?
 
Ce n'est au fond qu'un problème de vocabulaire mais bon ça serait bien d'aller au bout du sujet.


C'est simple; Il faut commencer par définir ce qu'est un objet et ce qu'est une fonction (procédure).
 

  • Un objet est une entité qui contient une information. Celle-ci peut être lue ou écrite.
  • Une prodécure est une séquence d'instructions.


Un langage procédural comme le C est 'orienté procédure' (on dit fonction en C). Ca signifie que l'organisation du code se fait autour des fonctions qui agissent éventuellement sur des données (objets).
 
Un langage orienté objet considère que l'organisation du code se fait autour des objets que l'on va implémenter sous la forme d'une classe regroupant la déclaration des données (objet instanciable) et une instance unique des fonctions servant à manipuler cet objet (les méthodes).


Message édité par Emmanuel Delahaye le 14-02-2006 à 14:00:33

---------------
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/
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed