Professional Documents
Culture Documents
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.
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)
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) }
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
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
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