Работа с разными типами данных
Primary tabs
У вас есть массив:
type myArr = array[1..8] of integer; var a: myArr;
-- целочисленный из 8 элементов.Пользователь вводит любые целые числа (после каждого нажимает Enter),
до тех пор пока не введет символ решетки #.Задача: сохранить в массив целые числа, которые ввел пользователь
(до символа # или до окончания места в массиве) и вывести их на экран,
значения неиспользованных ячеек массива выводить ненужно.
Решение:
Преобразование из string в integer процедурой Val не рассматриваем, потому что
это урок 18.
Целые числа это тип integer. Символы тип char. Не понимаю как считывать ввод из
консоли разных типов данных. Глобальные переменные с одним именем, но разных типов
создать нельзя. Локальные переменные в разных процедурах или функциях будет
не видно. Если создать переменную типа string, то как её потом преобразовать в число
для записи в массив, который типа integer? Помогите пожалуйста разобраться.
- Log in to post comments
- 2464 reads
vedro-compota
Sun, 01/21/2024 - 18:46
Permalink
просто readln()
Для считывания очередного значения тут достаточно процедуры readln() - она приводится в примерах урока
Подробнее см. видео-комментарий: https://youtu.be/NRD_ueud1ag
_____________
матфак вгу и остальная классика =)
Andrey
Mon, 01/22/2024 - 07:11
Permalink
type
type myArr = array[1..8] of integer; var a: myArr; i: integer; begin for i:= low(a) to high(a) do begin writeln('Vvedite ',i,' chislo :'); readln(a[i]); //if a[i] = '#' then //break; end; //Выводим массив на экран writeln('Vash massiv :'); for i:= low(a) to high(a) do writeln('[',i,'] = ',a[i]); readln(); end.Решение с выводом массива, которое работает до ввода '#'. Если ввести '#',
то Lazarus выдает ошибку о несоответствии числовому типу. Консоль останавливается.
Закоментировал проверку условия (для примера), которое не запустит программу
из-за несоответствия типов. Не понимаю, как остановить цикл после ввода '#'.
vedro-compota
Tue, 01/23/2024 - 12:18
Permalink
да, все логично, тут:
да, все логично, тут:
readln(a[i]); // попытка записать символ в число, поэтому ошибка //if a[i] = '#'-- идет попытка сначала считать как число, а потом проверить, чтобы решить проблему придется читать два раза получается, первый раз как char- там любой символ получится считать и сравнить
_____________
матфак вгу и остальная классика =)
Andrey
Wed, 01/24/2024 - 14:19
Permalink
Двойной ввод
type myArr = array[1..8] of integer; var a: myArr; i,int: integer; cha_r:char; begin for i:= low(a) to high(a) do begin writeln('Vvedite ',i,' chislo :'); readln(cha_r); if (cha_r = '#') then break else begin writeln('Povtorite vvod ',i,' chisla :'); readln(int);//эти две строки для наглядности вместо a[i] := int; //одной readln(a[i]); end; end; //Выводим массив на экран writeln('Vash massiv :'); for i:= low(a) to high(a) do writeln('[',i,'] = ',a[i]); readln(); end.Получается приходится 2 раза просить ввести число для записи одной ячейки массива.
Или есть другое решение?
vedro-compota
Sat, 01/27/2024 - 14:47
Permalink
действительно, тут лучше изменить условие
в этом варианте действительно, судя по всему, без двух readln() не обойтись, переформулируем условие задачи на с массива чисел на массив символов, а оригинальную задачку перенесем в урок с процедурой val()
_____________
матфак вгу и остальная классика =)