Ecrire des algorithmes avec turbo pascal 7.0

bjour a tous je suis un jeune etudiant en informatique .je ne netrise pas encore la programmation voici j'aimerai ecrire un programme qui me permettra de lire ou encore de passer des chiffres numeriques aux chifres romains jusqu'a l'infini
j'aimerai que vous n'aider pour le choix des doc a acheter pour me permettre de travailler
je vous remerci d'avance et j'espere vous lire tres vite .je vous souhaite une bonne année 2004 a toute votre famille a plus

11 réponses

  1. hello !

    tout dépend de ce que tu souhaites faire avec pascal !
    si tu penses en faire lgtps je te conseille le bouquin de Delannoy "programmer en turbo pascal" aux édition Eyrolles, l'auteur est tres pédagogue et otut est clair dans ce livre. Mais il est gros et cher, mais si tu es étudiant il se trouvera surement dans la bibliothèque !

    A+
    1. Salut a tous, je dois écrire un algorithme de conversion des chiffres arabes en chiffres romains (en C).
      A vrai dire je galère pas mal. J'ai vu en cour les notions de tableau et pointeur (que je crois qu'il faut utiliser pour cet algo).
      J'ai déja écirt quelques lignes de ce programme mais ca ne marche pas vraiment. Donc voila si quelq'un peut m'aider un petit peu, merci d'avance.

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>

      main ()

      {
      int reponse,oui,milliers,centaines,dizaines,unites,i,entree=0;

      printf("Voulez-vous (re)commencer?\n (oui/non)");
      scanf("%d\n\n", reponse);

      if(reponse=oui)
      {
      printf("Veuillez saisir un nombre");
      scanf("%d\n",&entree);
      }

      if(entree<1||entree>3999)
      {
      printf("Erreur! Nombre incorrect\n Voulez-vous recommencer?(oui/non");
      scanf("%d\n",reponse);
      }
      else
      {

      milliers=entree/1000;

      centaines=(entree-milliers*1000)/100;

      dizaines=((entree-milliers*1000)-centaines*100)/10;

      unites=entree%10;

      for (i=0;i<milliers;i++)

      printf("M");

      if (centaines / 5) {printf("D");centaines=centaines-5;}

      for (i=0;i<centaines;i++)

      printf("C");

      if (dizaines / 5) {printf("L");dizaines=dizaines-5;}

      for (i=0;i<dizaines;i++)

      printf("X");

      if (unites / 5) {printf("V");unites=unites-5;}

      for (i=0;i<unites;i++)

      printf("I");

      }

      }
      1. Modérateur
        Quelques points à revoir au niveau de la syntaxe :

        # Il est préférable d'écrire int main () car l'ordinateur attend une valeur de retour pour savoir si ton programme s'est bien terminé
        # Ne déclare pas toutes tes variables au début, c'est plus clair de le faire au fur et à mesure, au moment où tu t'en sers pour la première fois
        # N'utilises pas \n dans un scanf, mais dans un printf
        # La comparaison en C se fait par l'opérateur ==, si tu mets reponse=oui, ça ne te fera pas ce que tu veux d'autant que oui n'est affecté que par défaut
        # Si tu demandes de recommencer ça veut dire que tu voudrais faire une boucle, mais tu l'as oublié... Dans ce cas il vaut mieux demander si on veut recommencer à la fin du programme
        # Pour recommencer la boucle dès le début on utilise "continue"
        # Même si ça marche sans il est plus clair de marquer if(...==0) lorsque tu compares deux entiers (par contre ça n'aurait aucun sens de le faire sur des booléens)
        # Tu n'utilises pas de string, ce n'est donc pas la peine d'inclure string.h

        Ton programme a désormais un fonctionnement correct, même si le résultat obtenu n'est pas toujours correct
        #include <stdio.h>
        #include <stdlib.h>
        
        int main()
        {
            int reponse=1;
            
            while (reponse) // reponse==0 : sortir, reponse==1 : continuer
            {
                int entree;
                
                printf("\nVeuillez saisir un nombre : ");
                scanf("%d",&entree);
                printf("\n");
               
                if(entree<1 || entree>3999)
                {
                printf("Erreur! Nombre incorrect\n");
                continue; // on retourne au début de la boucle while
                }
                     
                int milliers=entree/1000;
                int centaines=(entree-milliers*1000)/100;
                int dizaines=((entree-milliers*1000)-centaines*100)/10;
                int unites=entree%10;
        
                int i;
                for (i=0; i<milliers; i++)
                    printf("M");
                   
                if (centaines/5==0)
                {
                    printf("D");
                    centaines=centaines-5;
                }    
                
                for (i=0; i<centaines; i++)
                    printf("C");
                
                if (dizaines/5==0)
                {
                    printf("L");
                    dizaines=dizaines-5;
                }
                
                for (i=0; i<dizaines; i++)
                    printf("X");
                 
                if (unites/5==0)
                {
                    printf("V");
                    unites=unites-5;
                }
                
                for (i=0; i<unites; i++)
                     printf("I");
                
                printf("\n\nVoulez-vous recommencer ? (oui : 1, non : 0)\nChoix = ");
                scanf("%d", &reponse);
            } // fin de la boucle while
        
        return EXIT_SUCCESS;
        }
      2. Modérateur
        PS. La prochaine fois créé un nouveau sujet de discussion plutôt que de poser une question sur du C dans un sujet qui parle de Pascal
      3. @KXMerci beaucoup, KX pour tes corrections, je vais bucher la dessus et voir ce que tout ça donne.
        Oui pour le sujet de Pascal j'était un peu pris par le temps et je n'aie pas vraiment fais attention. J'y penserai la prochaine fois.
        Encore merci sur ce je retourne a mes algos^^
      4. bonjour a tous j'aimerais bien que vous m'aider a programme un programme de calculatrice et merci d'avants
    2. salut je suis un etudient de l'informatique mais j'ai un probleme dans la programation et je vous demande de me donner un programme qui permettera d'entrer des nombres et de medonner tout les combinaisons possibles de ces nombres .
      merci et bonne chance
      1. Modérateur
        Pour bien comprendre ton problème, tu veux :
        entrer (par exemple) 5, 14, et 3
        puis obtenir : 3-5-14, 3-14-5, 5-3-14, 5-14-3, 14-3-5, 14-5-3 qui sont toutes les combinaisons possibles...
        C'est bien ça ?
      2. Modérateur
        Quelques explications avant de commencer...

        RS et RP signifient RéférenceSomme et RéférenceProduit qui sont les somme et produit des valeurs de départ. En effet pour m'assurer qu'il n'y avait pas de "doubles", je calcule la somme (S) et le produit (P) de chaque combinaison possible et n'affiche le résultat que si RS=S et RP=P... Ce n'est pas une méthode infaillible (si tu rentres plusieurs fois la même valeur) mais dans la plupart des cas ça devrait convenir.
        program Ziko;
        
        const Nmax=5; // les résultats ne sont pas affichables pour Nmax>5
        
        type Table=array[1..Nmax] of integer;
        
        procedure Demander(var T:Table;var RS,RP:real;var N:integer);
        var i,j:integer;
        begin
        write('Combien de nombres a entrer : ');
        readln(N);
        if N>Nmax then Demander(T,RS,RP,N)
                  else begin
                       RS:=0; RP:=1;
                       for i:=1 to N do
                           begin
                           write('Nombre ',i,' : ');
                           readln(j);
                           RS:=RS+real(j);
                           RP:=RP*real(j);
                           T[i]:=j;
                           end;
                       writeln;
                       end;
        end;
        
        procedure Afficher(var T,U:Table;RS,RP,S,P:real;M,N:integer);
        var i,j:integer;
        begin
        if M=0 then begin
                    if (RS=S) and (RP=P)
                       then begin
                            for i:=1 to N do
                                write(U[i]:4,' ');
                            writeln;
                            end
                    end
               else begin
                    for i:=1 to N do
                        begin
                        j:=T[i];
                        U[N-M+1]:=j; // Pour afficher "dans l'ordre"
                        Afficher(T,U,RS,RP,S+real(j),P*real(j),M-1,N);
                        end;
                    end;
        end;
        
        var T,U:Table;
            RS,RP:real;
            N:integer;
        begin
        Demander(T,RS,RP,N);
        Afficher(T,U,RS,RP,0,1,N,N);
        writeln; write('Fin du programme. Appuyer sur Entree'); readln;
        end.
        Remarque : Le nombre de lignes à l'affichage est N!
      3. @KXslt,je suis un étudient en MI peux tu m'aider à resoudre un exo?
      4. Modérateur
        @raulCréé un nouveau sujet de discussion dans le forum programmation, en précisant dans le sujet le langage de programmation que tu utilises, et mets ce que tu as déjà fait on t'aidera (pas forcément moi d'ailleurs) à le débuger
    3. Programmation pascal cour et ex :

      Facile :
      http://www.afloinformatique.com/programmation/turbo%20pascale/debuttp/tp_facile.htm

      Pro:
      http://www.afloinformatique.com/programmation/turbo%20pascale/protp/tabmat.html
      1. salut, je cherche une solution à cet exercice. merci
        On souhaite construire une matrice carrée NxN (N vaut au maximum 10, la valeur de N étant saisie par l’utilisateur) dans laquelle le carré le plus externe ne contient que des 1, le carré interne voisin du carré externe ne contient que des 2, et ainsi de suite...

        Exemple :

        Si N=6, la matrice qu’on veut construire est :

        1 1 1 1 1 1

        1 2 2 2 2 1

        1 2 3 3 2 1

        1 2 3 3 2 1

        1 2 2 2 2 1

        1 1 1 1 1 1
        1. salut dadou voilà j'ai brouillé tt seul juska j'ai trouver une salution pour ton exercice j esper sa t'aide , moi j'aime bien resoudre ce type d'exercice ,rep moi si ma solution te fere plai lol :

          program zekri_saif;
          uses wincrt;
          type
          matrice=array[1..10,1..10]of integer;
          var a,i,j,n:integer; t:matrice;
          begin
          repeat
          writeln('donner la taille de la matrice:');
          readln(n);
          clrscr;
          if ((n>10) or (n<1) ) then
          writeln('voullez saisir la taille entre 1 et 10 !');
          until n in [1..10];

          for j:=1 to n do
          begin
          t[1,j]:=1;
          t[n,j]:=1;
          end;

          for i:=1 to n do
          begin
          t[i,1]:=1;
          t[i,n]:=1;
          end;
          a:=1;
          repeat
          a:=a+1;

          for i:=a to n-(a-1) do
          begin
          t[i,a]:=a;
          t[i,n-(a-1)]:=a;
          end;

          for j:=a to n-(a-1) do
          begin
          t[a,j]:=a;
          t[n-(a-1),j]:=a;
          end;

          until a=n;

          for i:=1 to n do
          begin
          writeln;
          for j:=1 to n do
          begin
          write(t[i,j],' ');
          end;
          end;

          end.
        2. SVP ;vous pouvez m'aider à ecrire un programme pascal qui permet de créer et mettre à jour un arbre binaire de recherche qui est sousforme un fichier
      2. bonjour a tous si il ya quelqu'un qui metrise les pointeur , j'aimerais bien si il peut m'idée a resoudre quelque probleme ! merci d'avance !
        1. st moi aussi je etudiant a gaston berger j ai des probleme en algorithme.
          mais je peux resoudre votre probleme en echange que vous traitéz mon probleme.
          1. ben c'est pas trop dur
            tu écrits une fonction de conversion
            pour ca tu lis dans ton nombre
            millions
            centaines de milles
            dizaine de mille
            etc..
            et tu codes la conversion
            c'est d'autant plus simple que les chiffres romains s'arrêtent à 1000
            et que Un nombre surmonté d’un trait horizontal rend ce nombre 1000 fois plus grand et de deux traits d’un million de fois plus grand.

            1. Voila je suis intéréssé a la programmation , j'espére qu'on pourra se connaitre pour qu'on puisse changé des idée , c'est ok ?
          2. bonjour.tu veut écrire des alogrithme avec TP,
            je te conseille de partir vers le site www.caloga.com

            pour télécharger le logiciel de TP
            le mot clé est <turbo pascal>.