je ne devrais probablement pas, mais les problèmes ici vont bien au-delà de simples erreurs de syntaxe donc voici quelques conseils à une approche plus semblable à Ada. Les mots en gras méritent d'être lus plus en détail dans un bon livre d'Ada. D'abord, arrêtez de penser à un niveau si bas. Les chaînes sont des tableaux de caractères, et les tableaux dans Ada offrent des fonctionnalités telles que le tableau attributs pour simplifier la programmation - et surtout la maintenance du programme.
Les tableaux sont de longueur fixe lorsque vous les créez, mais cette longueur n'a pas à être déterminée jusque là. Donc, vous pouvez déclarer un tableau et l'initialiser avec un appel de fonction - il prend sa taille à partir du résultat de l'appel de la fonction.
Utilisez cette fonction et supprimez size
comme une entité distincte. Lorsque le bloc declare se termine, le tableau est hors champ, il est donc libéré automatiquement et, s'il se trouve dans une boucle, l'appel de fonction peut renvoyer une chaîne de taille différente, de sorte que les limites du tableau peuvent être différentes à chaque fois. problème.
Nous devons faire une boucle sur tous les caractères du tableau, mais nous ne connaissons pas sa taille ... alors demandez-le simplement, par exemple via son attribut range.
Et plutôt que d'écrire chaque test deux fois, utilisez une fonction du package Ada.Characters.Handling
pour vous assurer que nous ne traitons que les minuscules.
En outre, si déclarations sont un mauvais choix pour cette tâche, une déclaration cas est plus simple et plus court - je l'ai montré à la fois ci-dessous
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Characters.Handling;
procedure MorseCode is
begin
Put("Enter the sentence you would like to convert to morse code: ");
declare
Sentence : String := Get_Line;
begin
Put_Line(Sentence);
for i in Sentence'range loop
if Ada.Characters.Handling.To_Lower(Sentence(i)) = 'a' then
Put(".- ");
-- elsif etc ... not very nice
end if;
case Ada.Characters.Handling.To_Lower(Sentence(i)) is
when 'b' => Put("-...");
when 'c' => Put("-.-.");
when others => null;
end case;
end loop;
end;
end;
Il y a aussi bondis et sans bornes des chaînes dont vous n'avez pas besoin dans cet exemple simple. Ils sont un peu fastidieux à utiliser parfois, vous avez besoin de conversions de type entre eux et les chaînes simples.
... Et le problème est? – John3136
Vous avez eu un -1 à votre question Fortran parce qu'il n'y avait aucune preuve de recherche de votre côté. Ce n'est pas parce qu'un bon utilisateur a tout arrangé pour vous que cela n'est pas acceptable. Et maintenant tu le fais encore. Regardez les messages d'erreur de votre compilateur, essayez de les corriger (si vous ne pouvez pas les comprendre, utilisez Internet), et * puis *, si vous êtes bloqué sur une certaine erreur, vous pouvez demander à ce sujet sur SO . – flyx