[pascal] programme pascal qui transforme "123" en "102030" résolu

programme pascal qui transforme "123" en "102030" résolu [pascal] - Delphi/Pascal - Programmation

Marsh Posté le 22-03-2010 à 23:21:29    

Bonjour,
je veux  faire un programme pascal qui transforme "123" en "102030" ,un programme qui mets des "0" entre le nombre que je lui insère . je le mets le nombre 654 il me donne en résultat 605040 .
je pence qu'on doit divisé 654 par 100 pour avoir le 6 "on utilise dans VAR integer " alors sans virgule ,mais pour le reste je ne sais plus ,si vous pouvez bien me donner une solution ,et merci .

Message cité 1 fois
Message édité par ayoubitou le 27-04-2010 à 22:31:21
Reply

Marsh Posté le 22-03-2010 à 23:21:29   

Reply

Marsh Posté le 23-03-2010 à 13:18:01    

Il faudrais récupérer  
   le poids des unités et  
       multiplier par dix
le poids des disaine et  
       multiplier par 100
le poids des centaines et
       multiplier par 1000
 
Ainsi de suite.
 
Et faire l'addition.
 
       

Reply

Marsh Posté le 23-03-2010 à 13:19:33    

ARff  [:rhetorie du cupra]  
 
Faut tout miltuplier par 10 en fait.

Reply

Marsh Posté le 23-03-2010 à 13:54:18    

merci pour votre réponse mais j'ai pas bien compris en tous cas j'ai trouvé la solution je pense  "x=654"  
a:=x/100                     =6
b:=x/10 -a*10              =5
c:=x -a*10 -a*100         =4  
 
apres en affiche  a,(0),b,(0),c,(0)
et voila le résultat   605040 .

Reply

Marsh Posté le 23-03-2010 à 14:03:33    

Non, il doit falloir le calculer, insérer un zéro en vrac, c'est pas du job.
 
Je m'embrouille un peu.  :(  
 

Code :
  1. with Text_Io;
  2. with Ada.Integer_Text_Io;
  3.  
  4. procedure Insert_O is
  5.  
  6.   subtype T_Data is natural range 0..999;
  7.   Input : T_Data;
  8.  
  9.   Units : constant array (1..3) of Natural := (100, 10, 1);
  10.   S_Resultat : array (1..3) of Natural := ( others => 0 );
  11.   Resultat : Natural := 0;
  12. begin
  13.   loop
  14.  
  15.      -- Saisie de la donnée;
  16.      begin
  17.         Text_Io.New_Line;
  18.         Text_Io.Put( "Entrez un entier entre 0 et 1000 : " );
  19.         Ada.Integer_Text_Io.Get ( Input );
  20.         exit;
  21.      exception
  22.         when Constraint_Error =>
  23.            null;
  24.  
  25.      end;
  26.   end loop;
  27.  
  28.   begin
  29.  
  30.      -- Calcul du s-résultat
  31.  
  32.      for I in 1..3 loop
  33.         while input >= Units ( I ) loop
  34.           input := input - Units ( I );
  35.           S_Resultat( I ) := S_Resultat( I ) + 1;
  36.         end loop;
  37.      end loop;
  38.   end;
  39.  
  40.  
  41.   begin
  42.  
  43.      -- Calcul du résultat
  44.  
  45.      for I in 1..3 loop
  46.         Resultat := Resultat + S_Resultat( I ) * (Units (I) * Units (I) * 10);
  47.      end loop;
  48.  
  49.      --affichage du résultat
  50.   Text_Io.New_Line;
  51.   Text_Io.Put( "Le résultat est : " );
  52.   Ada.Integer_Text_Io.Put ( Resultat );
  53.  
  54.  
  55.   exception
  56.      when Constraint_Error =>
  57.         Text_Io.Put_Line("Le résultat est trop grand." );
  58.   end;
  59.  
  60.  
  61. end Insert_O;


Message édité par Profil supprimé le 23-03-2010 à 14:23:35
Reply

Marsh Posté le 23-03-2010 à 15:22:25    

ayoubitou a écrit :

Bonjour,
je veux  faire un programme pascal qui transforme "123" en "102030" ,un programme qui mets des "0" entre le nombre que je lui insère . je le mets le nombre 654 il me donne en résultat 605040 .
je pence qu'on doit divisé 654 par 100 pour avoir le 6 "on utilise dans VAR integer " alors sans virgule ,mais pour le reste je ne sais plus ,si vous pouvez bien me donner une solution ,et merci .
 
 


Moi quand je vois "123" je me dis que c'est pas un nombre (123 lui est un nombre par contre!), mais une chaine de caractères qu'il faut lire char par char et écrire dans un autre buffer en insérant un "0" entre chaque.

Reply

Marsh Posté le 23-03-2010 à 15:27:14    

Tu déconnes ?

Reply

Marsh Posté le 23-03-2010 à 15:33:10    

Ça peut être une solution d'en faire une chaîne de caractères décimale, de rajouter les 0, et de parser le résultat.
 
Pas forcément la meilleure, mais ça peut être une solution.

Reply

Marsh Posté le 23-03-2010 à 15:43:20    

Sinon avec la récursivité c'est facile, voici ce que j'ai fait en C:

Code :
  1. #include <stdio.h>
  2. int dizaine(int n)
  3. {
  4. int res = 0;
  5. int digit = 0;
  6. if (n >= 10)
  7. {
  8.  res = dizaine((n-digit)/10);
  9.  digit = n % 10;
  10.  printf("%d0", digit);
  11.  res = res * 100+10*digit;
  12. }
  13. else
  14. {
  15.  digit = n % 10;
  16.  printf("%d0", digit);
  17.  res = 10 * digit;
  18. }
  19. return res;
  20. }
  21. int main(int argc, char *argv[])
  22. {
  23. int nombre = 0, resultat = 0;
  24. printf("entrer un nombre:" ) ;
  25. scanf("%d", &nombre);
  26. resultat = dizaine(nombre);
  27. printf("\nle nombre est:%d\nFIN\n", resultat);
  28. }


Message édité par breizhbugs le 23-03-2010 à 15:52:23
Reply

Marsh Posté le 23-03-2010 à 19:42:37    

pour que je puisse exécuter bien mon programme ,j'ai besoin de la division mais ca marche pas .
 
program hhh;
var a,b :char  ;
begin
readln (a) ;
b:=a/10 ;
writeln (b) ;
end .
 
il m'affiche "error 26 type mismatch" ,je veux reglé ce problème pour exécuter le programme

Reply

Marsh Posté le 23-03-2010 à 19:42:37   

Reply

Marsh Posté le 23-03-2010 à 22:30:37    

Tu ne peux pas diviser un caractère par un entier.

Reply

Marsh Posté le 23-03-2010 à 23:50:27    


 
ya pas une solution pour la division ,parce que avec l'adition ou la multiplication ca marche .
pour le programme que tu m'as ecris je le comprend pas du tous ,puisque je viens de commencer pascal .
si ya une solution avec un programme plus simple ,indique-le moi .
 

Reply

Marsh Posté le 24-03-2010 à 10:18:11    

ayoubitou a écrit :


 
ya pas une solution pour la division ,parce que avec l'adition ou la multiplication ca marche .
 


Tu peut tenter de déclarer b comme un réel.

ayoubitou a écrit :


 
pour le programme que tu m'as ecris je le comprend pas du tous ,puisque je viens de commencer pascal .
si ya une solution avec un programme plus simple ,indique-le moi .


Tu débute tout court en programmation ?
Un autre exemple avec le langage Ada ne t'avancera pas d'avantage.
 
Tu peut remarquer que je n'utilise pas de réel, ce qui peut te montrer que d'en utiliser serait une erreur.
 
Pour t'aider dans le sens de ton programme, déclare plutôt a, b, c comme entier, comme prévu, et cherche comment saisir et afficher un entier au clavier.

Reply

Marsh Posté le 24-03-2010 à 11:58:34    

Code :
  1. program insert_o;
  2.  
  3. var
  4.        data : longint;
  5.        units      : array[1..3] of integer = (100, 10, 1);
  6.        s_resultat : array[1..3] of integer = (0, 0, 0);
  7.        unit_index : integer;
  8.        begin
  9.                write('Entrez un nombre entier entre 1 et 999 : ');
  10.                readln(data);
  11.                for unit_index := 1 to 3 do
  12.                        while data >= units[unit_index] do
  13.                        begin
  14.                                data := data - units[unit_index];
  15.                                s_resultat[unit_index] := s_resultat[unit_index] + 1;
  16.                        end;
  17.                        data := s_resultat[1] * 100 * 100 * 10 +
  18.                                s_resultat[2] * 10 * 10 * 10 +
  19.                                s_resultat[3] * 10;
  20.  
  21.               writeln('Le r‚sultat est : ', data);
  22.        end.


 
Pour copier le code tu double clique dessus pour faire péter le numéro des ligne.


Message édité par Profil supprimé le 24-03-2010 à 12:00:51
Reply

Marsh Posté le 24-03-2010 à 11:59:35    

Désolé pour le problème de la saisie, en fait, je ne savais pas à quel point Pascal était puissant.

Reply

Marsh Posté le 24-03-2010 à 14:00:34    

j'ai reussi a faire le programme qu'il me faut .
 
program hhh;
var a,x,y,z  :integer ;
begin
readln (a) ;
x:=a div 100 ;
y:=a div 10 - (x*10) ;
z:=a - (x*100)-(y*10) ;
writeln (x,0,y,0,z);
readln ;
end .
merci pour votre aide.

Reply

Marsh Posté le 24-03-2010 à 14:26:28    

ayoubitou a écrit :

j'ai reussi a faire le programme qu'il me faut .
 
program hhh;
var a,x,y,z  :integer ;
begin
readln (a) ;
x:=a div 100 ;
y:=a div 10 - (x*10) ;
z:=a - (x*100)-(y*10) ;
writeln (x,0,y,0,z);
readln ;
end .
merci pour votre aide.


 
456 => 40506
 
Il manque un zero.  :o

Reply

Marsh Posté le 24-03-2010 à 15:34:04    

Et si l'utilisateur rentre un nombre à 4 chiffres?
Tu devrais revoir ta façon de résoudre le problème...

Reply

Marsh Posté le 02-04-2010 à 21:32:40    

ayoubitou a écrit :

j'ai reussi a faire le programme qu'il me faut .
 
program hhh;
var a,x,y,z  :integer ;
begin
readln (a) ;
x:=a div 100 ;
y:=a div 10 - (x*10) ;
z:=a - (x*100)-(y*10) ;
writeln (x,0,y,0,z);
readln ;
end .
merci pour votre aide.


 
 :??:  
 
si c'est pour au final ajouter des 0, tu prend l'entrée en var tmp:string; pis la sortie tmp2:string;
 
pis tu fait  
 

for i := 1 to length(tmp) do tmp2:= tmp[i]+'0';


 
mais ouais c'est surement pas le but du sujet  :D

Reply

Marsh Posté le 08-04-2010 à 14:51:20    

uses crt;
var a:string ;
      i:integer;
begin
     clrscr;
     readln(a);
     for i:=1 to length(a) do insert('0',a,2*i);
     writeln(a);
     readln;
end.
 
Il est toujours possible de convertir avec "val" et "str" les chaînes en nombres et les nombres en chaînes.


Message édité par casidom le 09-04-2010 à 11:16:05
Reply

Sujets relatifs:

Leave a Replay

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