Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1718 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1976150
ayoubitou
Posté le 22-03-2010 à 23:21:29  profilanswer
 

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
mood
Publicité
Posté le 22-03-2010 à 23:21:29  profilanswer
 

n°1976274
Profil sup​primé
Posté le 23-03-2010 à 13:18:01  answer
 

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.
 
       

n°1976275
Profil sup​primé
Posté le 23-03-2010 à 13:19:33  answer
 

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

n°1976280
ayoubitou
Posté le 23-03-2010 à 13:54:18  profilanswer
 

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 .

n°1976284
Profil sup​primé
Posté le 23-03-2010 à 14:03:33  answer
 

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
n°1976356
breizhbugs
Posté le 23-03-2010 à 15:22:25  profilanswer
 

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.

n°1976357
Profil sup​primé
Posté le 23-03-2010 à 15:27:14  answer
 

Tu déconnes ?

n°1976358
Kenelm
Posté le 23-03-2010 à 15:33:10  profilanswer
 

Ç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.

n°1976365
breizhbugs
Posté le 23-03-2010 à 15:43:20  profilanswer
 

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
n°1976503
ayoubitou
Posté le 23-03-2010 à 19:42:37  profilanswer
 

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

mood
Publicité
Posté le 23-03-2010 à 19:42:37  profilanswer
 

n°1976545
Profil sup​primé
Posté le 23-03-2010 à 22:30:37  answer
 

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

n°1976571
ayoubitou
Posté le 23-03-2010 à 23:50:27  profilanswer
 


 
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 .
 

n°1976636
Profil sup​primé
Posté le 24-03-2010 à 10:18:11  answer
 

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.

n°1976712
Profil sup​primé
Posté le 24-03-2010 à 11:58:34  answer
 

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
n°1976714
Profil sup​primé
Posté le 24-03-2010 à 11:59:35  answer
 

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

n°1976788
ayoubitou
Posté le 24-03-2010 à 14:00:34  profilanswer
 

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.

n°1976813
Profil sup​primé
Posté le 24-03-2010 à 14:26:28  answer
 

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

n°1976850
breizhbugs
Posté le 24-03-2010 à 15:34:04  profilanswer
 

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

n°1980561
Flagad'awa​re
c pô moi, j'ai pas touché!
Posté le 02-04-2010 à 21:32:40  profilanswer
 

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

n°1982016
casidom
Posté le 08-04-2010 à 14:51:20  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

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

 

Sujets relatifs
[Résolu] Bloquer l'envoi d'un formulaire[RESOLU] API Console -> Colorer du texte
[Résolu] Rester invisible de google pendant qq temps ?[résolu] calculs avant la compilation, avec le pré-processeur
Fonction globale: symbole externe non résolu[Résolu][Socket] connaitre l'IP de connexion
[Résolu] IE et erreurs JS incompréhensibles[Résolu][SQL/ACCESS] Problème COUNT / GROUP BY
[Résolu] Création d'une page html pour email, largeur zone texte ? 
Plus de sujets relatifs à : [pascal] programme pascal qui transforme "123" en "102030" résolu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR