Vous êtes sur la page 1sur 5

TP programmation info n1

Organisation des fichiers sous Linux

Noms de fichiers sous Unix : majuscules diffrentes des minuscules (prfrer les minuscules), on peut utiliser galement des chiffres, - (sauf en premier caractre), _ (soulign), . (point) et quelques autres. En tous cas jamais d'espace, et viter les accents.

Commandes en mode texte sous Windows et Unix


DOS et Telnet vers Windows DIR CD rpertoire DEL fichier DEL *.* MD rpertoire RD rpertoire
UNIX

afficher la liste des fichiers (dtaille) changer de rpertoire de travail effacer un fichier effacer tous les fichiers crer un rpertoire supprimer un rpertoire (vide) monter un "device" local copier un fichier dplacer (ou renommer) un fichier ou rpertoire copier un rpertoire et ses sous-rpertoires grer les accs aux fichiers aide sur une commande

COPY source dest MOVE src dest XCOPY /S src dest ATTRIB commande /?

ls -l cd rpertoire rm fichier rm * mkdir rpertoire rmdir rpertoire mount device pt_de_montage cp source dest mv src dest cp -R src dest chmod , chown , chgrp man commande

Processus de compilation : ouvrez une fentre shell (terminal) (icne stylisant un cran et un coquillage). Appeler l'diteur (kwrite nomfichier.c &) et taper le texte. Ne pas oublier de sauver ! Dans le terminal, compiler (gcc nomfichier.c -o nomprogramme). S'il n'y a pas d'erreur, appeler le

56

programme par son nom, dans le terminal (ne pas lancer les programmes par un clic en mode graphique si votre programme ne commence pas par ouvrir une fentre). Accs une machine distante (attention, il faut que le systme distant accepte les accs extrieurs) : ssh -X iup2@ipst207xx puis toute commande "texte" ou graphique ("konqueror &" par exemple). Il existe la mme chose pour accder une machine Windows (telnet), ou depuis Windows (putty.exe) : voir IUP1 Accs aux fichiers d'une machine : dans le gestionnaire de fichiers de votre systme (explorateur de fichiers Windows, Konqueror,...) taper l'adresse ftp://iup2@ipst207xx ou (mieux) sftp si les deux systmes le permettent (transmission code, plus sr). On peut aussi monter (localement) un rpertoire distant (qui doit tre partag)

mount //machine/nom_partage pt_de_montage -t smbfs (local linux, distant Windows) net use X: \\machine\nom_partage (local Windows, distant Windows) mount //machine/nom_partage pt_de_montage -t nfs (local linux, distant Unix) utiliser PCNFS (local Windows, distant Unix)

Saisissez ce programme, compilez le et lancez le


/* premier programme, TP IUP2 2003 */ /*directives du prcompilateur *****************************************/ //inclusion d'entte pour utiliser les fonctions standard #include <stdio.h> //dfinition de deux constantes #define lng_txt 40 #define taux 6.55957 /* dclarations globales (types et prototypes) *************************/ typedef char texte[lng_txt]; //un texte est un tableau de 40 caractres maxi void dire(texte); //cette fonction affiche le texte qu'on lui donne float convertir(float); //convertit un rel en un autre /* fonction principale : doit s'appeler main ***************************/ int main(void) { float en_francs,en_euros; //dclaration locale main dire("bonjour"); //il faut toujours tre poli printf("entrez une somme en francs : "); scanf("%f",&en_francs); //lire la somme en_euros=convertir(en_francs); //appel d'une fonction printf("%0.2ff font %0.2f euros\n",en_francs,en_euros); dire("au revoir, bientt."); } /* fonction qui effectue la conversion *********************************/ //entte : on lui donne un rel et elle en rend un autre float convertir(float somme_en_francs) { float temporaire; //dclaration locale temporaire=somme_en_francs/taux; //calcul return temporaire; //c'est ainsi qu'une fonction rend son (unique) rsultat } /* fonction qui affiche un texte ***************************************/ //je n'en ai besoin que dans cette fonction, on peut l'inclure ici

57

#include <string.h> /* dfinit la fonction 'strlen' */ void dire(texte msg) { int i,nb; //variables locales nb=strlen(msg)+4; //calcul de la longueur du cadre for(i=0;i<nb;i++)printf("*"); //affichage de 'nb' toiles printf("\n* %s *\n",msg); //passage la ligne, *, espace, le texte, for(i=0;i<nb;i++)printf("*"); printf("\n"); //passage la ligne (pour le prochain prompt) }

Ecrivez votre premier programme


a) il demande le solde initial de votre compte, la somme que vous y ajoutez, puis il calcule le solde. b) en plus il demande le nombre de fois que vous ajoutez cette me somme. Vous devez obligatoirement utiliser une boucle et faire des additions successives. c) testez de grands nombres de boucles, pour voir quand il lui faut quelques secondes, et remarquez l'erreur (par exemple par ajouts de 0.01) Proposition de solution :
#include <stdio.h> int main(void) { float debut,somme,solde; int i,nb; printf("solde initial ?"); scanf("%f",&debut); printf("mouvement ?"); scanf("%f",&somme); printf("nombre de mouvements ?"); scanf("%d",&nb); solde=debut; for(i=0;i<nb;i++) solde=solde+somme; printf("solde finial : %f \n",solde); }

TP programmation info n2
Solution du dernier exercice du 1er TP :
#include <stdio.h> int main(void) { float debut,somme,solde; int i,nb; printf("solde initial ?"); scanf("%f",&debut); printf("mouvement ?"); scanf("%f",&somme); printf("nombre de mouvements ?"); scanf("%d",&nb); solde=debut; for(i=0;i<nb;i++) solde=solde+somme; printf("solde finial : %f \n",solde); }

58

Rsum sur les formes de base des structures de contrle :


A) boucles (rpter une instruction, ou un bloc de plusieurs instructions entre accolades) Si l'on connat le nombre de boucles (ici variable entire nb) :
for (i=0;i<nb;i++) instruction

Sinon, si quoi qu'il arrive il faut faire au moins une fois l'instruction (tant que la condition est vraie) :
do instruction while (condition);

sinon (toujours tant que la condition est vraie, si elle est fausse au dbut l'instruction n'est mme pas faite une seule fois) :
while (condition) do instruction

B) tests Si la condition est vraie, on fait l'instruction puis on passe la suite, sinon on passe directement la suite :
if (condition) instruction

Si la condition est vraie, on fait l'instruction1, sinon l'instruction2. Puis on passe la suite :
if (condition) instruction1 else instruction 2

Suivant la condition, une seule instruction est effectue :


if (condition_1) instruction_1 else if (condition_2) instruction_2 //ici condition_1 est ncessairement fausse ... etc ... //ici condition_1 et condition_2 sont fausses else instruction_n //si aucune condition prcdente n'est vrifie

C) les conditions utilisent les comparaisons (<, <=, >, >=, != (diffrent), == (gal)) et des oprateurs boolens (&& (et), | | (ou), ! (non)). Exemple : if ((x>=0)&&(x<10)) signifie : si x dans [0,10[ Premier exercice (tests) : Un problme physique se modlise par l'quation ax2+bx+c=0. Trouvez toutes les solutions (relles), quelles que soient les valeurs a,b,c proposes par l'utilisateur. Si, pour la compilation, il faut inclure la librairie mathmatique : gcc prog.c -lm -o prog Second exercice (boucles) : recherche d'une racine positive de ax3+bx2+cx+d=0. Attention, ce n'est pas la bonne mthode, ce problme est uniquement pos pour vous faire travailler les boucles. On cherche d'abord encadrer la premire racine positive (f(x) change de signe) par pas de 1 (si on arrive 10000 on abandonne). Puis dans un second temps on restreint l'encadrement de moiti jusqu' ce qu'on ait une prcision de 10-3 (dichotomie). Dernier exercice (boucles et tests) : Le but est d'approfondir les structures de contrle. Pour cela , l'ordinateur va nous faire jouer au plus ou moins : il va choisir un nombre, nous allons tenter de le dcouvrir. Pour faire choisir un nombre alatoire par l'ordinateur, il faut entrer ce programme :

59

Evidement, trouver la solution en un seul essai est assez peu probable. Il faudrait poser plusieurs fois la question (jusqu' ce qu'on propose la bonne valeur). Pour nous aider, le programme devra nous dire, chaque proposition, si notre nombre est trop grand ou trop petit. Prvenez moi quand a fonctionne ! S'il reste du temps, amliorez ce jeu. Nous comparerons et classerons vos programmes la fin de la sance ! Ajoutez, dans l'ordre : A) la fin du jeu, indiquez le nombre d'essais tents. B) En fonction de ce nombre d'essais, donnez une apprciation diffrente (au moins 3 : bravo / pas mal / pas trop tt). C) Vrifiez si les propositions sont cohrentes avec les indications donnes prcdemment (lui signaler qu'il est idiot de proposer 18 alors qu' la proposition du nombre 25 on lui avait dit qu'il tait trop petit). D) Au cours du jeu, donnez de temps en temps des encouragements (pas toujours dans le mme ordre, au hasard mais aussi en fonction de la prcision de la proposition). E) Toute autre amlioration qui vous semble possible, ou amusante.

Proposition de solution :
1) rsolution de ax2 + bx + c dans TOUS les cas
#include <stdio.h> #include <math.h> /* pour sqrt, la racine carre */ int main (void) { float a,b,c; float delta,r1,r2; printf("rsolution de ax2 + bx + c \n"); printf("entrez la valeur de a : "); scanf("%f",&a); printf("entrez la valeur de b : "); scanf("%f",&b); printf("entrez la valeur de c : "); scanf("%f",&c); if (a==0) /* sinon diviser par 2*a risque de poser problme */ { if (b!=0) printf("une racine simple x=%f\n",-c/b); else if (c==0) printf("il y a une infinit de solutions Ox=0\n"); else printf("aucune solution l'quation %f=0\n",c); } else

60