Как заставить Boolean написать True или False на Аде

Я очень новичок в программировании и только начал работать с записями и логическими значениями в Аде. Я пытаюсь сделать так, чтобы всякий раз, когда я пишу «Т», он говорил «Истина», а всякий раз, когда я пишу «F», он говорил «Ложь», но я не уверен, как это сделать. В этом задании мне не разрешено изменять T: Boolean:= False; это должно быть в коде, но я не уверен, что мне нужно сделать, чтобы получить то, что я хочу. Я думаю, мне нужно сделать какой-то оператор if, например Но я не уверен, как это сделать. Мой код выглядит следующим образом:

type Sub_J is 
  record
 
     Y: Character:= '9';
     Q: Character:= 'p';
 
  end record; 

type Sub_B is
  record
     Y: Character:= 'J';
     Q: Character:= 'o';
  end record;

type Sub_O is 
  record
 
     T: Boolean:= False;
     L: Character:= '5';
 
  end record;

type DS3 is 
  record
 
     J: Sub_J;
     B: Sub_B;
     O: Sub_O;
 
  end record;

procedure Get_3(DSThree: out DS3) is
  
   Space: Character;            
  
begin 
  
   Put("Mata in datamängd: ");              
   Get(DSThree.J.Y);
   Get(Space);
   Get(DSThree.J.Q);
   Get(Space);
   Get(DSThree.B.Y);
   Get(Space);
   Get(DSThree.B.Q);
   Get(Space);              
   Get(DSThree.O.T);      
   Get(Space);
   Get(DSThree.O.L);
  
end Get_3;

procedure Put_3(DSThree: in DS3) is
    
begin 
  
   Put("Inmatad datamängd: ");
   Put(DSThree.J.Y);
   Put(" ");
   Put(DSThree.J.Q);
   Put(" ");
   Put(DSThree.B.Y);
   Put(" ");
   Put(DSThree.B.Q);
   Put(" ");                 
   Put(DSThree.O.T);
   Put(" ");
   Put(DSThree.O.L);           
  
end Put_3;
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
201
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я предполагаю, что вы используете Ada.Text_IO.Put (или Put_Line): вам нужно напечатать изображение переменной.

В случае Character или String изображение — это сама вещь. В случае других простых типов можно применить атрибут Изображение:

Ada.Text_IO.Put (T’Image);

Это приведет к TRUE или FALSE.

я понял

procedure Get_3(DSThree: out DS3) is
  
  Space: Character;  
  True_Or_False: Character; 
   
begin 

  Put("Mata in datamängd: ");               
  Get(DSThree.J.Y);
  Get(Space);            
  Get(DSThree.J.Q);
  Get(Space);           
  Get(DSThree.B.Y);
  Get(Space);            
  Get(DSThree.B.Q);
  Get(Space);
  
  
  Get(True_Or_False);
  if True_Or_False = 'T' then
     DSThree.O.T:= True;
 
  elsif True_Or_False = 'F' then
     DSThree.O.T:= False;
  end if; 
  
  
  Get(Space);
  Get(DSThree.O.L);
  
end Get_3;

procedure Put_3(DSThree: in DS3) is
  
begin 
  
  Put("Inmatad datamängd: ");
  Put(DSThree.J.Y);
  Put(" ");            
  Put(DSThree.J.Q);
  Put(" ");            
  Put(DSThree.B.Y);
  Put(" ");     
  Put(DSThree.B.Q);
  Put(" ");
  
  
  if DSThree.O.T = True then
     Put("True");
 
  elsif DSThree.O.T = False then 
     Put("False");    
  end if;
  
  
  Put(" ");
  Put(DSThree.O.L);   
  
end Put_3;

Вам нужно 4 пробела, чтобы получить разметку кода. И не используйте вкладки.

Simon Wright 08.10.2022 21:17

Хорошо, что вы ее решили. У меня есть пара комментариев к вашему решению. Сначала рассмотрим, что произойдет, если пользователь в ответ на Get(True_Or_False) введет некоторый символ, который не является ни «T», ни «F». Затем код не присваивает значение DSThree.O.T, поэтому остается значение по умолчанию. Это ваше намерение? Во-вторых, чтобы проверить, является ли логическая переменная истинной, есть более короткий способ: вместо того, чтобы писать «если DSThree.O.T = True then», просто напишите «if DSThree.O.T then». Вместо «если DSThree.O.T = False, то» напишите «если не DSThree.O.T, то». На самом деле ваш тест «elsif» на False не нужен, достаточно «else».

Niklas Holsti 08.10.2022 21:34

Ваш вопрос, к сожалению, не очень ясен. Вы показываете программу, но программа неполная и не компилируемая, и вы не говорите явно, к какой части программы относится ваш вопрос - об операции ввода (Get), операции вывода (Put) или о чем-то другом ?

Вы говорите, что ваша цель такова: «всякий раз, когда я пишу букву «Т», она будет говорить «Истина» и точно так же F вместо «Ложь». Но вы имеете в виду, что вы пишете «T» в исходном коде программы или в ответ на операцию ввода (Get) при запуске программы? И это операция вывода, которую вы хотите сказать «Истина»? Или вы хотите, чтобы «T» и «F» были сокращениями для True и False в исходном коде Ады?

Если вы хотите иметь возможность вводить «T» в ответ на операцию Get для логической переменной, например B: Boolean, и чтобы «T» означало «Истина», один из способов — получить значение символа, например, Get(C ), где C — переменная Character, а затем выберите регистр:

case C is
when 'T' => B := True;
when 'F' => B := False;
when others =>
   -- Erroneous input.
   -- Perhaps tell the user and ask for new input.
   ...
end case;

Обратите внимание, однако, что Get for a Character действительно дает следующий символ, а не пропускает пустые символы, как это делает Get для других типов. Однако он пропускает ограничители строк (и ограничители страниц).

Дать вам хороший ответ было бы намного проще, если бы вы могли показать компилируемую программу и объяснить, что вы хотите, чтобы она делала.

Да, я это понимал, но я даже не был уверен, о чем спрашивал. Я буду делать более качественные посты в будущем. спасибо за помощь

Zeptuz 08.10.2022 20:41

Другие вопросы по теме