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
Répondre
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.
Merci, cela a beaucoup aidé. Cela fonctionne-t-il aussi pour les tableaux? –
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; ' –
Et s'il y a n éléments? Comme array [1..n] où n peut atteindre 100 000. –
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.
L'aide en ligne de stackoverflow explique comment faire un formatage correct – lurker
'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; ' –
@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. –
@TomBrunberg, merci de m'encourager à aller jusqu'au bout pour faire une réponse :-) –