questions qu'on me pose souvent

je reçois pas mal de courrier (merci à tous, surtout pour les compliments bien entendu) et j'essaye d'y répondre rapidement. J'ai regroupé ici les réponses aux questions les plus fréquentes ou d'intérêt général.


index rapide

Cet index est trié de manière logique, alors que dans le document les textes Sont présentés de manière chronologique.



SIMBOZEL Eric Athesa (ulysse.cea.fr) wrote:

> > tout d'abord bonjour, et bravo pour ce petit livre sur le C > > ma question est la suivante : > Pourquoi le langage C est plus rapide que les autres langages style > cobol etc.. > > merci bonjour et merci Le C est le seul langage qui permet tous les niveaux de programmation : - langage structuré : il possède toutes les structures de programmation des langages structurés : au niveau du code (boucles, tests, sous-programmes, récursivité) mais en plus il a prévu des instructions de type "Goto" en sélectionnant celles qui permettent d'optimiser un programme sans embrouiller le code (break, continue, switch...) ainsi qu'au niveau des données (structures, pointeurs, tableaux statiques et dynamiques...) avec une utilisation optimale des pointeurs (équivalence d'écriture pointeurs - tableaux), ainsi qu'une possibilité de clarté par la définition de nouveaux types (typedef). - langage de bas niveau : il possède presque toutes les instructions directement existantes en assembleur sur tous les matériels, tout en restant portable : si une instruction de base n'existe pas directement sur un matériel donné, elle sera néanmoins traduite (compilée) sur tout matériel. - langages orientés objets : il en possède les principales possibilités (C++), tout en permettant un mélange avec des instructions des deux niveaux précédents Mais attention : il n'est plus rapide que si l'on sait ce que l'on fait : par exemple la possibilité d'utiliser des instructions de bas niveau n'est optimale que si l'on connaît l'assembleur (sinon on ne sait pas quelle est la solution à choisir). Exemple : quand on écrit i=i+1 (existant dans tous les langages, le compilateur cherche la valeur de i, appelle le sous-programme d'addition entre deux entiers (en général 3 tops d'horloge sur un micro-processeur) puis stocke le résultat dans i. Alors que i+=1 permet au compilateur de ne chercher qu'une seule fois l'adresse de i au lieu de 2. Mais i++ est encore plus efficace : en effet tous les assembleurs ont une instruction permettant d'ajouter 1 à un entier, bien plus rapide (1 top d'horloge) qui a été optimisée car le processeur en a souvent besoin (par exemple pour passer à la ligne suivante du programme). Sur un matériel actuel, on a gagné environ 10 puissance -8 seconde entre i=i+1 et i++, ce qui peut paraître ridicule, mais on a aussi divisé le temps par trois, ce qui est moins ridicule. néanmoins on ne sera plus rapide que si l'on connait le fonctionnement des matériels. par exemple pour multiplier un entier par 8 (2 puissance 3) il vaut mieux utiliser i<<3 qui signifie rajouter trois 0 en binaire derrière le nombre, comme nous le faisons en décimal pour multiplier par 10 puissance 3. En conclusion, on peut faire en C tout ce qu'on peut faire dans les autres langages, on peut en plus optimiser le programme, mais uniquement si on est expérimenté. Le principal avantage est que l'on peut mélanger les deux (n'optimiser que ce qui le mérite, c'est à dire l'intérieur des boucles imbriquées). Par contre, du fait de toutes ses possiblités, le C est un langage plus compliqué,il a tellemnt de possibilités que tous les signes habituels signifient plusieurs choses suivant l'endroit où on les utilise (par exemple * signifie multiplier, mais aussi déclare un pointeur ou signifie "objet pointé"), sans compter la possiblité de surcharge en C++ (on peut redéfinir * pour les tableaux par exemple).

Guy Loiselle (ican.net) wrote:

> > Bonjour Patrick > > Je m'intéresse depuis peu à l'informatique mais j'aimerais accéder par > moi-même au domaine de la programmation. J'ai vu et lu avec intérêt votre > site sur internet traitant de c++, Pascal, algorithmes, etc. Ma question > puisque vous permettez la copie dans votre préambule) concerne la > possibilité de télécharger votre cours au complet sur mon disque afin de > libérer internet, car je devrai passer de nombreuses heures à occuper le > réseau et la ligne téléphonique. Comment faire, car je suis novice en > informatique mais rempli d'espoir. > > Merci à l'avance > > Guy Loiselle, Bellefeuille, Québec Si vous disposez de Word (2 ou plus) sur PC, vous pouvez télécharger le document sur C, Algorithmique et infographie par http://www-ipst.u-strasbg.fr/pat/ftp/tout_c.zip il fait environ 200 Ko Il y a d'autres documents disponibles sur http://www-ipst.u-strasbg.fr/pat/ftp/ (en format word et pdf). regardez d'abord le fichier readme. Remarque pour les lecteurs de la FAQ : ce qui suit n'a plus lieu d'être, car l'accès aux documents ne se fait plus par ftp. Pour récupérer : multiples possiblilités, celle que je préfère est WSFTP sur PC, sélectionnez le serveur (www-ipst.u-strasbg.fr), le nom d'user est "anonymous", le mot de passe est votre email. Puis allez dans le répertoire /pub/pat, cliquez sur le bouton "mode binaire" et transférez le fichier tout_c.zip. Puis décompactez le par WinZip par exemple. Sous FTP : open www-ipst.u-strasbg.fr anonymous votre e-mail cd /pub/pat attention / lcd \temp répertoire destination, attention \ sur PC bin get tout_c.zip bye vous pouvez également récupérer le fichier par votre navigateur en tapant l'URL ftp://www-ipst.u-strasbg.fr/pub/pat/tout_c.zip mais là tout dépend comment vous avez configuré votre navigateur.

Exxhauster (aol.com) wrote:

> > bonjour,je vous reecris car j' ai un petit probleme lorsque je compile le > fichier ci joint j''ai des warning "call to fonction 'hanoi' with no > prototype" > je ne trouve pas la raison de ces warning mais je peut faire tourner le > programme en les ignorants. > merci d'avance > stephane (Versailles St Quentin en Yvelines) > > --------------------------------------------------------------- > /* vollet stephane gtr1c les tours de hanoi */ > > #include <stdio.h> > > void hanoi(n,A,C,B) /*fonction hanoi */ > int n,A,C,B; /*nombre a deplacer,pilier: source,destination,intermediaire*/ > { > if (n==1) {printf("deplacer depuis %d vers %d.\n",A,C);} > else {hanoi(n-1,A,B,C);hanoi(1,A,C,B);hanoi(n-1,B,C,A);} > } > > main() > { > int nombre ; > printf("entrez le nombre de disques :\n"); > scanf("%d",&nombre); > hanoi(nombre,1,3,2); > return (0); > } Ce warning est donné généralement quand vous utilisez une fonction avant de la déclarer. ce n'est pas le cas ici puisque votre fonction hanoi est déclarée avant son utilisation dans main. Pour déclarer proprement une fonction, il faut donner au compilateur son nom, le type de ses arguments et le type retourné. Ceci se fait grâce à ce que l'on appelle un prototype, qui serait dans votre cas : void hanoi(int,int,int,int); ou alors (plus couramment utilisé) void hanoi(int n,int A,int C,int B); attention, ce qui distingue le prototype de l'entête de la fonction est le ; (toute déclaration en C se termine par un ;) Les prototypes sont en général placés dans le fichier source après les include, typedef, define et variables globales, et avant les fonctions. Dans votre cas, puisque la fonction est placée avant celle qui l'utilise, il suffit de changer l'entête de votre fonction : void hanoi(int n,int A,int C,int B) (sans ;), et de supprimer la ligne suivante qui déclarait n,A,B,C puisqu'ils sont déjà déclarés. Ceci est l'écriture imposée par la norme ANSI (à suivre si vous désirez des programmes portables) alors que celle que vous avez utilisée date de K&R, et est incompatible avec C++ . Il n'empêche que de prototyper toutes ses fonctions est une bonne habitude.

Thierry Guegan, Maîtrise d'informatique UBO (kelenn-gw.univ-brest.fr) wrote:

> > Bonjour, > > Je vois que vous travaillez dans le domaine du grafcet, aussi ayant > quelques travaux a effectuer mais ne sachant par ou commencer mes > recherches, je me permets de vous poser quelques questions. > > Je recherche de la documentation et des references sur les methodes pour > passer d'un schema de type grafcet a un schema de type langage cable. > Ceci afin d'effectuer une traduction ulterieure dans un langage compris > par des api, langage du TSX 07 de telemecanique. > > Merci. Bonjour, Pour cabler un Grafcet, il faut utiliser des bascules (RS par exemple). On utilise une bascule par étape. Elle est activée (entrée Set) si l'étape précédente est active et la transition est vraie. Pour la désactivation (entrée Reset), il suffit en général de la relier à la sortie de l'étape suivante (l'étape est donc réinitialisée tant que l'étape suivante est active). Ceci ne fonctionnne pas si deux étapes successives peuvent être actives en même temps (ça existe, voir par exemple http://www-ipst.u-strasbg.fr/pat/autom/grafce06.htm#Heading8). Dans ce cas il faut soit insérer une bascule entre les deux étapes, soit utiliser des bascules Maître-Esclave (voir http://www-ipst.u-strasbg.fr/pat/autom/autom08.htm#Heading32). Le problème vient du fait qu'il faut toujours vérifier que l'étape suivante a bien recu l'information d'activation avant de désactiver l'étape en cours. J'ai prévu de préparer un document sur le câblage du Grafcet, mais pas tout de suite (devoirs de vacances pour l'été 97). Pour le passage sur automate programmable, il me semble inutile de prévoir un tel câblage. Plutôt que d'utiliser des bascules, on va utiliser le fait que l'automate exécute les lignes de programme de manière séquentielle. Un programme sera donc une suite ORDONNEE d'instructions combinatoires. Je présente dans http://www-ipst.u-strasbg.fr/pat/autom/automat.htm deux méthodes pour créer de tels programmes sur n'importe quel API (méthodes générales). Mais d'habitude on peut obtenir un programme plus compact en utilisant les spécificités du problème que l'on désire mettre en oeuvre.

chafik lama (hotmail.com) wrote:

> > bonjour, > En surfant sur internet, j'ai trouve des choses qui m'interessent, votre cours > sur le langage C entre autres (qui est très bien fait). Je desire telecharger ce > fichier (sur disquette,une adresse e-mail...). Comment je dois proceder? > Merci beaucoup. > soit vous téléchargez la version word (voir comment dans http://www-ipst.u-strasbg.fr/pat/faq.htm, 2è question), soit vous "aspirez" tous les fichiers HTML sur votre ordinateur (programme disponible sur http://ww.total.net/~duplesja/index.html suivant votre matériel (par exemple le programme NetAttaché Light) et vous pouvez les regarder tranquillement hors ligne, et les imprimer en local (chapitre par chapitre). Dans ce cas chargez la version sans frames (par exemple pour le C : http://www-ipst.u-strasbg.fr/pat/program/tpc01.htm) Rappel : autorisation d'utilisation limitée à un usage personnel non commercial.

Clavv (aol.com) wrote:

> > Aslut ! > > j'etais le 69e visiteur de ta page sur comment programmer en asm... mais > je cherche des explications un peu moins techniques, pour un debutant comme > moi... pourrais-tu m'aider ? > > bye > clavv > ;) réponse : je n'ai pas pour l'instant prévu de créer des documents plus pédagogiques en asm, j'ai d'autres documents à créer actuellement (en particulier C et automatisme) Mais je suis disponible pour des questions précises, dans la mesure de mes compétences (je ne programme plus en asm depuis quelque temps, je ne suis donc pas au courant des dernières évolutions, en particulier les spécificités des nouveaux processeurs ou windows). Il y a peut-être des informations sur le Web, si vous en trouvez j'aimerai que vous me les transmettiez.

Noutsey (aol.com) wrote:

> > Bonjours. > Voila, j'ai 26 ans, j'ai un BTS en maintenance industrielle et une envie > folle de progresser dans beaucoup de domaines techniques. Pour cela, je > recherche une edition sur les automates programmables et l'automatisme en > generale pour un niveau initie - . En connaissez vous une? je vous remercie > d'avance et a bientot. > noutsey Bonjour Je suis désolé de ne pas pouvoir vous aider. Dans le domaine des automatismes, il y a une très grande quantité de livres "scolaires" très bien faits, en général prévus pour les IUT. Mais avec un BTS MAI vous avez surement déjà vu ces ouvrages, je ne pense pas qu'il y en ait des plus poussés mais qui restent généraux. Pour les automates, je n'en connais pas qui soit général, personellement j'utilise plutôt les docs des constructeurs des matériels dont je dispose. Sur le Web, il est possible que je sois le seul en France à diffuser un cours sur ce sujet, et si son niveau ne vous suffit pas je pense que la seule manière de vous améliorer consiste en de la pratique, et ce sur n'importe quel automate, une fois que l'on a acquis les principes de fonctionnement d'un matériel le passage à un autre constructeur ne devrait pas poser trop de problèmes.

Renaud HENRY <bocal.cs.univ-paris8.fr> wrote:

> > salut j'ai un probleme avec le compteur > 1. la compilation ce passe bien > 2. j'ai cree compteur.dat vide > 3. j'ai integrer la ligne <IMG SRC="cgi-bin/compteur.cgi" ALIGN=CENTER> > dans ma page > mais le compteur ne s'incremente pas > > je ne comprend pas pourquoi ?nom=.... > > merci de me repondre rapidement > > Renaud BTS Informatique industrielle bonjour Renaud Le programme compteur récupère le nom marqué derrière ?nom= et cherche dans son fichier la ligne contenant ce nom, y trouve le nb d'accès précédents, ajoute 1, réécrit la valeur dans le fichier et l'envoie sur le réseau. S'il ne trouve pas ce nom, il le crée puis renvoie la valeur 0 (la prochaine fois il le trouvera et mettra 1...). Ceci vous permet de ne prévoir qu'un programme compteur, et de mettre des noms différents dans chacun de vos fichiers, vous aurez alors un comptage par fichier (moi je mets comme nom le nom du fichier). Mais vous pouvez également mettre le même nom dans plusieurs fichiers. Remarque : le fichier compteur.dat doit être accessible en écriture par l'utilisateur (User ID) qui fait tourner le programme CGI-BIN. Ce nom est configurable en général sur votre serveur, pour apache s'est dans le fichier httpd.conf, par défaut il propose le nom "nobody" (du moins pour ma version)

Bihouee Jerome (univ-ubs.fr) wrote:

> > Bonjour Monsieur Trau, > > Je recherche une methode de tri de tableau d'environ 10000 nombres en > langage FORTRAN la plus rapide et la plus efficace possible. > Pour cela j'ai pense au tri shell. Est-ce le meilleur? > Pouvez-vous me fournir un algorithme ou un programme permettant > d'effectuer ce tri. > > Je vous remercie a l'avance. > > Jerome. (I.U.P - Universite De Bretagne Sud LORRIENT) > l'efficacité d'un tri dépend de plusieurs paramètres : - état initial du fichier (un fichier de 10000 valeurs n'a jamais été saisi de manière vraiment aléatoire mais dans un certain ordre), à moins que ce fichier n'ait été créé par un générateur de nombres aléatoires (et dans ce cas on ne représente pas la réalité, ce n'est qu'un test qui permettra de faire plaisir à un informaticien qui ne se préocupe pas de la réalité de son application) - les données à déplacer mais qui n'influent pas le tri (par exemple fichier de noms et d'adresses, trié uniquement par le nom) : tout calcul supplémentaire qui permet d'éviter un déplacement sera intéressant à condition que ce calcul prend moins de temps que le-dit déplacement. Je ne connais pas de cas (sauf l'informaticien rêveur cité plus haut) où il n'y ai pas de telles données à déplacer (mais souvent ces données peuvent être limitées à un pointeur ou un entier du genre "numéro d'enregistrement"). - de l'ordinateur et du compilateur que vous utilisez. Toutes les instructions prennent un temps variable suivant votre configuration (mais fixe pour une configuration donnée). Sur tout compilateur il est plus lent d'utiliser : SI (T[I] différent de 0) ALORS X=X+T[I] à la place de X=X+T[I] si T[I] et X sont des entiers. Par contre sur des réels ca dépend de la configuration (à condition d'avoir beaucoup de T[I] nuls bien évidement). En conclusion : il n'y a pas de réponse unique à votre problème (et s'il y en avait une on la connaîtrait, vu le nombre de personnes qui se sont penchées sur ce problème). Le tri shell est effectivement un bonne méthode pour un tableau initialement aléatoire, avec aucune donnée supplémentaire à déplacer, mais je ne suis pas sur que le tri par selection, bien programmé en fonction de votre configuration, ne soit pas plus rapide. (ecrivez moi si vous les avez comparés) Pour des exemples, je n'en ai de disponibles qu'en C, mais à priori vous devriez pouvoir les comprendre. Regardez : http://www-ipst.u-strasbg.fr/pat/program/algo03.htm#Heading11

Marie Mezino (CIPCINSA.insa-lyon.fr) wrote:

> Votre site est très intéressant et m'a beaucoup servi. Je m'interesse > plus particulièrement aux graphes. Pourriez vous me donner la > description d'un algorithme de recherche du plus court chemin dans un > graphe. J'ai entendu le nom de l'algorithme de Dijkstra. Le > connaissez-vous? E.W. Dijkstra a bien publié un article de "plus court chemin" dans le premier numéro de Numerische Mathematik (1959 !!!). Je travaille pas spécifiquement sur les graphes actuellement, les seules informations que je peux vous donner nécessiteraient que je me replonge en détail dans des livres d'algorithmique, autant que ce soit vous qui le fassiez. Par exemple, "Algorithms in C", par Robert Sedgewick, de chez Addison Wesley Publishing Company, y consacre un chapitre (je crois qu'il y a eu une traduction de JM Moreau, Mines de St Etienne) amicalement

André Ferrare wrote: (club-internet.fr)

> > Bonjour je débute en pascal et je n'arrive pas à faire ce problème > > Enoncé du problème: > Le programme que vous réaliserez devra classer par ordre croissant et > décroissant une séquence de 5 chiffres compris entre 0 et 100. > Vous devrez sécuriser votre programme afin qu'aucun utilisateur ne > puisse effectuer des manoeuvres indésirables. > > Pouvez me donner la solution? Certainement pas. Ce problème est vraiment le minimum à savoir faire si l'on veut programmer. Vous donner la solution serait certainement une bien mauvaise idée. Par contre je peux vous donner quelques pistes. 1) les 5 valeurs doivent être stockées dans un tableau d'entiers 2) pour trier vous pouvez utiliser un second tableau (5 valeurs ne prennent pas beaucoup de place en mémoire). Vous recherchez le plus petit (mini<-1; pour i<-1 à 5 si tab[i]plus petit que tab[mini] alors mini<-i) Le mettre dans le second tableau et le remplacer par 101 dans le premier, recommencer 5 fois. 3) pour sécuriser il suffit de vérifier la saisie des 5 valeurs. Remplacez le readln par une boucle (répéter readln jusqu'à >=0 et <=100) bon travail

DVVKurt (aol.com) wrote:

> > Salut ! > > Je programme en assembleur et je voudrais adresser les images (etc...) > directement dans la RAM de la carte vidéo (avec des OUTs...) mais je ne > connais pas les adresses ni comment ça marche!!!! > > merci pour l'infos. Je ne sais pas ! En effet, tout dépend de ta carte graphique. C'est puisque la même action est générée par une commande différente pour chaque type de carte qu'on est obligé d'installer des drivers. Si vraiment tu y tiens, je peux te donner quelques indications pour des modes standards, qui marchent donc sur toute carte (ou presque). Ceci suppose bien entendu que tout l'écran est réservé à ton programme (donc hors windows) passer en mode Graphique : interruption 10h, avec AX=10h pour EGA 640*350 16 couleurs, AX=12h pour VGA 640x400 16 couleurs AX=5Eh pour SVGA 640x400 256 couleurs AX=58h pour SVGA 800x600 16 couleurs Quitter le mode graphique : il suffit de retourner en mode texte, 80 colonnes et 25 lignes (int 10h, avex AX=03). Allumer un pixel : int 10h, avec ah=0Ch; al=code couleur; cx=x; dx=y; je crois qu'il faut aussi BX=0 Voir l'état d'un pixel : int 10h avec ah=0Dh; al=0; bx=0; dx=y; cx=x; on récupère dans AL la couleur du point Changer la palette (en mode 16 couleurs, les autres je ne sais pas) AX=1010h dl=0 dh=rouge ch=vert cl=bleu bh=0 BL = N° couleur à modifier, entre 0 et 15, ou pour d'autres cartes mettre dans BL : 0,1,2,3,4,5,20,7,56,57,58,59,60,61,62 ou 63 (décimal) rouge, vert, bleu sont des valeurs entre 0 et 63 (décimal), pour faire du noir on les met tous les 3 à 0, pour du blanc tous à 63, pour les autres tu n'as qu'à essayer. Attention, en quittant un programme assembleur, il faut restaurer la palette à sa valeur initiale Attention, ces informations datent (ca fait au moins 4 ans que je ne les ai plus testées), donc je ne garantis pas le résultat. Pourras tu me dire si ca marche ? (ou si ça ne marche pas) Cordialement

Yvan Jaubert (cyceron.fr) wrote:

> > Bonjour, > > j'ai beau chercher et rechercher, je n'arrive pas a trouver la facon > d'allouer la place memoire pour un tableau triple pointeurs (voire plus) > du type unsigned char ***tab car je ne trouve de renseignements que pour > des tableaux a 1 ou 2 dimensions (quand on utilise des pointeurs). > Pourriez-vous m'aider? Je vous en serais tres reconnaissant. > > JAUBERT Yvan Si le problème est celui que vous me posez, je n'ai aucune réponse à donner, je ne sais pas. Si vous aves un problème pratique, et que vous essayez de trouver le meilleur modèle possible (modèle = manière de représenter les choses) alors peut-être que vous tomberez sur un "truc *** tab" mais moi je n'écris jamais celà ! exemple : typedef unsigned char caract; typedef caract texte[80]; typedef caract * mot; typedef mot * paragraphe; typeded paragraphe * document; mot cree_mot(void) { texte tampon; mot m; puts ("entre ton mot"); gets(tampon); m=(mot)malloc((strlen(texte)+1)*sizeof(caract)); strcpy(m,tampon); return(m); } paragraphe cree_paragraphe(void) { int n,i; paragraphe p; puts("combien de mots ?") scanf ("%d",&n); p=(paragraphe)malloc(n*sizeof(mot)); for(i=0;i<n;i++)p[i]=cree_mot(); return(p); } etc .... (en particulier cree_document) Donc je n'ecris jamais char *** document, bien que ce soit la même chose. En conclusion : tu as un problème. Tu décides quelles informations importantes tu dois stocker. Puis tu regardes si tu peux en faire une représentation arborescente (un point c'est 3 coordonnées, une ligne c'est deux points, un rectangle c'est 4 lignes ou 2 points si tu préfères économiser de la place mais recalculer les lignes à chaque fois). Tu regroupes tout ce qui a une raison logique d'être regroupé (en structure ou tableau) mais pour l'instant tu ne cherches pas la meilleure solution du point de vue informatique mais logique. Ensuite tu décides de ton modèle. C'est la partie la plus importante dans un projet en C car une fois décidé tu ne pourras plus revenir en arrière (rajouter une fonctionalité à un programme revient en général à rajouter un sous-programme, mais modifier le modèle (passer de tableau à structure par exemple) nécessite de TOUT réécrire, sauf en programmation objets). Puis tu déclares les types (typedef, en global), et tu déclares tes variables (à priori en local). Dans cette partie tu prends en compte le point de vue informatique (par exemple choisir une liste chaînée si tu vas faire beaucoup d'insertions). A partir de là tu vas créer ton code. Si tu veux un code clair, utilise une notation qui corresponde à l'opération que tu veux faire : **x si x est contient l'adresse d'un pointeur, x[i][j] si x est une matrice (bien que les deux écritures soient équivalentes). Ai-je répondu à ta question ? Pour y revenir plus précisément, DANS MON EXEMPLE, on peut allouer la mémoire à un triple pointeur par : caract *** doc; /* je préfère largement "document doc;" */ doc=cree_document(); On peut aussi ne pas utiliser de sous-programmes, et écrire une suite de malloc directement, mais ça ce n'est pas de la programmation structurée, c'est de la programmation de bidouilleur qui mesure ses capacités à la difficulté qu'ont les autres pour comprendre ce qu'il fait (moi, je la mesure à la facilité qu'ils ont à me comprendre. M'as- tu compris ?). Amicalement

Marc Gaudette (Canada) wrote:

> > Bonjour, > J'ai 13 ans et je voudrait apprendre le C++,dorénavant,j'ai découvert > qu'il falais apprendre le C d'abort..alors je croix que je vais m'y > lancer..... > Vous avez parler d'un programme appeller Turbot C .. si vous > l'avez..pourriez-vous me l'envoyer svp... > > Merci du font du coeur,... Bonjour Je suis désolé, mais Turbo C est un logiciel commercial, te l'envoyer serait donc du vol. Mais il existe des compilateurs en shareware : http://www.cs.virginia.edu/~lcc-win32 pour Windows 95 et même en freeware : http://www.gnu.ai.mit.edu/ pour GCC (sous Unix ou Linux) Il y en surement d'autres, mais je ne les connais pas. à propos de la différence entre C et C++ : C++ n'est qu'un C avec des fonctionnalités supplémentaires. Donc si tu apprends le C d'abord, le passage au C++ se fera rapidement. Mais certaines de ces nouvelles fonctions du C++ sont plus pratiques que les anciennes, donc commencer directement en C++ évite d'apprendre certains points compliqués pour rien. L'idéal est bien entendu de trouver un bon document introduisant directement le C++ au débutant, en France il y en a en version livre de poche vraiment pas chers. Il y en a également sur le Web, mais je n'en ai pas recensé les adresses. Simplement, il vaut mieux ne pas choisir de document ouvertement lié à un compilateur donné (le langage dure plus longtemps que le compilateur), mais on peut accepter que les exemples soient traités pour un compilateur, si l'auteur précise qu'il n'utilise principalement que des fonctions standardisées.

franck.crowet (wanadoo.fr) wrote:

> > bonjour, > > je me suis à l ecriture de prog cgi en c via les sources cgic.h. > Je dispose du compilateur turboc/c++ sous dos. > j ai donc copier les fichiers cgic.h cgic.c dans mon repertoire d > include mais lorsque je veux construire un .exe je recupere des erreurs > de lien (link error ) du type undefined module c0.main.ed smbol_main ou > undefined symbol_cgiOut in cgitest.c( c est ce prog que j ai compilé) > > si vous pouvez me dire ce qui ne fonctionne pas , je vous en serai tres > reconnaissant. > > merci Je ne sais pas comment faire sous DOS. Le programme doit évidement être compilé sur le serveur (le mien tourne sous Unix). La bibliothèque cgic est faite pour des compilateurs 100% compatibles Unix (et donc ni Borland ni Virtual). De toute facon je ne pense pas qu'il soit malin de créer un serveur sous DOS (il plantera dès que deux demandes d'un même fichier arriveront en même temps, voir même il refusera deux accès simultanés). Moi je vous conseillerai plutot Linux (et dans ce cas la librairie marche bien, je l'ai testée sous gcc (en plus il est freeware). Si vous avez un serveur sous Windows, il faut voir ce que propose votre logiciel serveur (visual basic sous Back Office, donc seuls ceux qui ont WIN95 peuvent vous lire, mais si vous utilisez la suite de Netscape (sous NT) on vous livre un kit de développement en C équivalent à cette bibliothèque.

Daniel Périgord (netrover.com) wrote:

> > Salut.. > > Je désire savoir quelle sont toute les fichiers que j'ai besoin pour me > faire un conteur sur ma page et ou je peut les prendres.. > Tout dépend. * Si vous disposez d'un serveur sur lequel vous pouvez accéder aux CGI (en général si c'est votre ordinateur, les providers n'aiment pas trop qu'on mette des programmes sur leur ordinateur) vous pouvez prendre le mien. Il est écrit en C, il vous faudra le compiler (moi j'utilise gcc du domaine public). Il suffit de faire du copier-coller, le source est à l'adresse : http://www-ipst.u-strasbg.fr/pat/compteur.htm Vous y trouverez également le makefile que j'ai utilisé. * Si vous disposez d'un serveur propiétaire fermé, demandez au propriétaire (je pense en particulier à Microsoft) * Si vous n'avez pas accès à la machine, demandez à votre provider (qui peut vous faire payer le service) * Si vous envisagez un usage non commercial, vous pouvez trouver des compteurs gratuits (voyez au bas de ma home-page : E-stats par exemple).

marc henri (skynet.be) wrote:

> Bonjour, > > Je suis très intéressé de savoir comment vous pouvez savoir d'où je suis > connecté (sur quel serveur). > Si cela n'est pas un secret défense, merci, si vous le voulez bien, > m'apprendre. > Mes motivations sont que j'ai créé un site depuis 3 mois et j'aimerais > connaître les personnes et leurs endroits afin d'établir des statistiques. quatre solutions 1) les statistiques de votre serveur. A chaque lecture d'une de vos pages, un certain nombre d'informations sont écrites dans un fichier de "log" sur votre serveur (souvent : access.log). Si vous avez votre serveur, il n'y a qu'à y regarder. Si vous êtes logés par un provider, vous n'avez pas accès à ce fichier (de toute façon il contient tous les accès au serveur, tes pages et celles des autres, tu risques d'y avoir du mal à y retrouver tes petits) 2)faire un cgi : petit programme appelé à chaque fois que l'on charge ta page. Ton programme (en général en perl, mais tout autre langage est possible, par exemple en C) récupère dans diverses variables d'environnement un certain nombre d'informations dont la machine du demandeur. exemple : http://www-ipst.u-strasbg.fr/pat/tst-form.htm Attention, si tu es chez un provider je ne sais pas s'il acceptera que tu écrives des programmes (cgi) sur SON serveur 3) passer par un serveur qui surveille les accès à ta page (il suffit d'insérer une petite icône dans ta page). Pour un usage limité c'est gratuit, regardes au bas de ma page et testes www.showstat.com ou www.estat.com. En fait c'est la même solution que la précédente, à part le fait que le programme cgi soit sur une autre machine (et donc son temps d'accès dépendra des capacités de cet ordinateur distant, sûrement moins bon en option gratuite que payante) 4)trouver d'autres méthodes auxquelles je n'ai pas pensé. As-tu essayé l'UNGI (http://www.imaginet.fr/ime/nethtm2.htm)

Julien Frutig (urbanet.ch) wrote:

> Bonjour, > > Tout d'abord merci pour votre site. > > J'aimerais savoir comment il faut faire pour s'octroyer un compteur > permettant à la personne qui se connecte de savoir combien il y a de > personnes en même temps qu'elle sur le site. > Par exemple : "Il y a 8 connectés". > > J'ai déjà vu ce genre de compteur (en javascript ? ..) mais je ne > sais pas où le télécharger pour me le procurer. Et ce compteur très > spécifique me serait d'une grande utilité pour mon site. > > Un grand merci pour votre réponse ! > > Julien. Ce compteur ne peut être fait en Javascript, mais doit être un CGI qui tourne sur votre serveur. Si vous savez comment regarder (manuellement) sur votre serveur le nombre d'accès actuels (par exemple pas "ps xau | grep" sous linux ou "ps -ef" sous solaris) alors il ne vous reste qu'à faire un petit script (shell ou perl par exemple). Evidement, ceci n'est possible que si vous êtes le gestionnaire de votre serveur ou que le gestionnaire vous ait laissé les droits nécessaires. Mais je pense que pour un serveur web ce compteur serait très démoralisant car de valeur très faible : une connection Web est très courte : on lit le fichier et les images et la connection est immédiatement coupée. Pendant que l'utilisateur lit la page (avec son pauvre cerveau humain très lent) il n'est plus connecté, s'il redemande une nouvelle page il se reconnectera uniquement le temps du transfert. Ces compteurs étaient utilisés en FTP (et sont encore utilisés mais ne donnent plus de valeur significative) car on devait au départ se connecter, et la liaison restait établie jusqu'à ce qu'on tape "bye". En fait les logiciels clients FTP récents n'envoient plus "bye" mais attendent le "time out", ce qui fait que le compte n'est plus très juste.

Arthur (AOL) wrote:

> > Bonjour ! > > J'aimerais accéder à un tableau multidimensionnel par l'intermédiaire d'un > pointeur, > mais mon compilateur me signale une erreur ... > Voilà comment je m'y prend : > > int tab[2][3] = { {1,6,1}, {2,2,4} }; > int *ptr = tab[0]; > printf("%d", ptr[1][2] ); > > Mon compilateur me dit que "ptr[1][2]" n'est ni un tableau ni un pointeur ... > Comment faire ? > > Merci d'avance ! > > Arthur #include <stdio.h> typedef int ligne[3];//compatible int* typedef ligne matrice[2]; //compatible ligne* void main(void) { matrice tab = { {1,6,1}, {2,2,4} }; ligne *ptr; ptr = tab; printf("%d", ptr[1][2] ); } par contre int **ptr ne marche pas : ptr (ou tab) est l'adresse du premier élément de la matrice, pour trouver une valeur en position (l,c) il faut y ajouter (l*taille_d_une_ligne+c) , la taille d'une ligne doit donc être statique (c'est à dire connue du compilateur) Pour faire une matrice dynamique, il faut stocker dans un tableau de pointeurs (ou pointeur de pointeur) les adresses des débuts de chaque ligne. Dans ce cas on pourrait déclarer int **ptr Pour plus de détails va voir mon cours : http://www-ipst.u-strasbg.fr/pat/program/algo04.htm#Heading33 cordialement

Dove jonathan a écrit :

> > bonjour, je suis étudiant en 1ère année en fac de sciences et je > cherche a me procurer > le language de programmation pascal. est il possible de se le procurer > gratuitement en > le telechargeant par ex sur internet ? si oui pouvez vous m'indiquer > où ? > merci Dans mes cours, il y a généralement une page de liens (dans l'intro ou la conclusion), dans laquelle je propose aussi des adresses de compilateurs. Sous Dos-Windows je vous recommande particulièrement les compilateurs (gratuits) de chez Borland http://www.borland.fr/download/compilateurs Si vous êtes sous Unix vous savez surement que les meilleurs compilateurs sont chez GNU : http://www.gnu.org/home.fr.html


P. TRAU, ULP-IPST, E-Mail :