2017-02-18 4 views
-1

J'ai un problème. J'apprends Pascal depuis seulement deux semaines et je ne sais pas grand-chose. Je dois écrire un programme qui doit calculer quelque chose sur 3 nombres entrés. Le problème est que tous les 3 doivent être entrés dans une édition avec des espaces entre les deux. Donc, fondamentalement, j'ai une chaîne «numéro de numéro». Comment puis-je séparer ces nombres en 3 chaînes séparées afin que je puisse les convertir en entier.Séparer les nombres dans une chaîne. Pascal

+3

'procédure GetNumbers (var x, y, z: nombre entier); begin WriteLn ('Entrez trois nombres séparés par un espace, puis appuyez sur Entrée.'); ReadLn (x, y, z); fin; ' –

+0

@LURD Je serais heureux d'UV votre solution si vous le faites à une bonne réponse. La seule réponse actuelle n'est pas vraiment une réponse à la question et trop compliquée. –

+0

@TomBrunberg, merci de m'encourager à aller jusqu'au bout pour faire une réponse :-) –

Répondre

1

Dans Pascal, il existe des procédures intégrées pour récupérer l'entrée de la console.

La meilleure façon d'obtenir des entrées numériques est d'utiliser Read()/ReadLn(), qui peut également effectuer la conversion de chaîne en valeur numérique:

procedure GetNumbers(var x,y,z: Integer); 
begin 
    WriteLn('Enter three numbers separated with space and then press enter.'); 
    ReadLn(x,y,z); 
end; 

Ici, le ReadLn() détecte trois entrées séparées par un espace, attend [Entrée] et affecte les valeurs entières aux variables x, y, z.

+0

Merci, cela a beaucoup aidé. Cela fonctionne-t-il aussi pour les tableaux? –

+0

Oui: 'Type TMyArr = array [0..2] de Integer; procedure GetNumbers (var arr: TMyArr); begin WriteLn ('Entrez trois nombres séparés par un espace, puis appuyez sur Entrée.'); ReadLn (arr [0], arr [1], arr [2]); fin; ' –

+0

Et s'il y a n éléments? Comme array [1..n] où n peut atteindre 100 000. –

0

L'utilisation de la fonction de copie est unidirectionnelle. Désolé pour la mise en forme, je ne peux pas comprendre comment coller les extraits de code correctement dans ces sections de réponse.

function TMyForm.Add(anEdit : TEdit) : integer; 
var 
    Idx : integer; 
    TempString : string; 

function GetNext : integer; 
begin 
    result := result + StrToInt(copy(TempString, 1, Idx - 1)); 
    TempString := copy(TempString, Idx + 1, MAXINT); 
end; 

begin 
    result := 0; 
    TempString := anEdit.Text; 

    repeat 
     Idx := pos(' ', TempString); 
     if Idx > 0 then 
     result := GetNext; 
    until Idx = 0; 

    if trim(TempString) <> '' then 
     //this is the last piece of it then 
     result := result + StrToInt(trim(TempString)); 
end; 

Vous devez également veiller à ce que les valeurs saisies soient des nombres et non des lettres, généralement avec des blocs try..except.

+1

L'aide en ligne de stackoverflow explique comment faire un formatage correct – lurker