Хелп с паскалем

bodic13

bodic13
Дней с нами
3.137
Розыгрыши
0
Сообщения
55
Репутация
4
Реакции
29
Суть в чем, мне нужно сделать прогу, которая будет считывать числа из многострочного поля, добавлять их в одномерный массив, а потом выводить кол-во чисел =12. Вроде все написал правильно, но при вводе в поле однозначных чисел(1-9), прога выдает ошибку. Если вводить числа в которых больше 2-вух символов. то все работает нормально. Снимок.PNG

Сам код:
procedure TForm1.Button1Click(Sender: TObject);
begin
b := 0;
for i := 0 to 20 do
a := StrToFloat(Memo1.Lines);
for i := 0 to 20 do
if a = 12
Then
b := b + 1;
Label1.Caption := IntToStr(b);


end;
 

KeK

Король флуда
Дней с нами
3.112
Розыгрыши
0
Сообщения
753
Репутация
31
Реакции
984
Program ProgaKotorayaSchitivayetChisla;

:kappa::kappa::kappa::kappa::kappa:
 
  • Like
Реакции: bodic13

botka4aet

Бог флуда
Дней с нами
3.674
Розыгрыши
0
Сообщения
7.622
Репутация
192
Реакции
4.540
Telegram
botka4aet
До экзаменов еще месяц - че ты--Ссылка удалена--
 
  • Like
Реакции: bodic13

qazxz11

Участник
Дней с нами
2.736
Розыгрыши
0
Сообщения
24
Репутация
2
Реакции
23
for i := 0 to 20 do
a := StrToFloat(Memo1.Lines);
помойму это какое то гонево или тут не весь код, или ошибки
Оператор цикла for переваривает только один оператор после себя, т.е. ты 20 раз присваиваешь значение из поля memo переменной а, при чём ты не переключаешься по строкам поля сразу бабахаешь всё(тут по идее будет ошибка), и если а - это всё же массив - так же не перебираешь индексы
И что мать его должен делать следующий код?
for i := 0 to 20 do
if a = 12
Then
b := b + 1;
20 раз мы проверяем а=12?
опять же, речь же шла про массив, а элементы ты не перебираешь, а сразу сравниваешь со всем массивом целиком, и по итогу если истина - увеличиваем счётчик на 1.
P.S. про работу кода нам кто то гонит :(
 
Последнее редактирование:

botka4aet

Бог флуда
Дней с нами
3.674
Розыгрыши
0
Сообщения
7.622
Репутация
192
Реакции
4.540
Telegram
botka4aet
for i := 0 to 20 do
a := StrToFloat(Memo1.Lines);
помойму это какое то гонево или тут не весь код, или ошибки
Оператор цикла for переваривает только один оператор после себя, т.е. ты 20 раз присваиваешь значение из поля memo переменной а, при чём ты не переключаешься по строкам поля сразу бабахаешь всё(тут по идее будет ошибка), и если а - это всё же массив - так же не перебираешь индексы
И что мать его должен делать следующий код?
for i := 0 to 20 do
if a = 12
Then
b := b + 1;
20 раз мы проверяем а=12?
опять же, речь же шла про массив, а элементы ты не перебираешь, а сразу сравниваешь со всем массивом целиком, и по итогу если истина - увеличиваем счётчик на 1.
P.S. про работу кода нам кто то гонит :(
Ошибка то все равно вылетать не должна
 
  • Like
Реакции: bodic13

qazxz11

Участник
Дней с нами
2.736
Розыгрыши
0
Сообщения
24
Репутация
2
Реакции
23
Ошибка то все равно вылетать не должна
если опустить даже косяки что я назвал выше - остаётся проблема сравнения чисел с плавающей точкой. Имхо там стоит закостылить целый тип для всех и не морочить голову над этим, всё равно наверняка в поля memo будут вводить целые числа, вряд ли кто будет полноценно тестировать это учебное задание
P.S. там где то попадает мусор, который данный код не может обработать, мб пробел, мб косяки с присвоенением, а вообще, что мешает ТС выполнить код пошагово и посмотреть на какой строке оно рушится?
 
Последнее редактирование:
  • Like
Реакции: bodic13

bodic13

bodic13
Дней с нами
3.137
Розыгрыши
0
Сообщения
55
Репутация
4
Реакции
29
если опустить даже косяки что я назвал выше - остаётся проблема сравнения чисел с плавающей точкой. Имхо там стоит закостылить целый тип для всех и не морочить голову над этим, всё равно наверняка в поля memo будут вводить целые числа, вряд ли кто будет полноценно тестировать это учебное задание
P.S. там где то попадает мусор, который данный код не может обработать, мб пробел, мб косяки с присвоенением, а вообще, что мешает ТС выполнить код пошагово и посмотреть на какой строке оно рушится?
Сори, я не тот код скинул там после а стоит: i в квадратных скобках и после Memo1.Lines тоже стоит . Если сделать массив int то там вообще лютый трэш начинается, т.к. первый символ в цифре перестает распознаваться, и на любое число вылетает ошибка. Наверно мне все сделать мешает врожденная криворукость.)Ну а так, за помощь спасибо.)
 

qazxz11

Участник
Дней с нами
2.736
Розыгрыши
0
Сообщения
24
Репутация
2
Реакции
23
Сори, я не тот код скинул там после а стоит: i в квадратных скобках и после Memo1.Lines тоже стоит.
Вот такое уже примерно должно работать, В общем расчехлил виртуалку и поставил на неё делфи(ох, как же давно это было...), все беды - от стрёмного memo, индексация строк в нём идёт начиная с 0 и до последнего значения(если будут проблемы - я забыл проверить, а так не помню как оно в делфи, и убрал с машины, попробуй в массив записывать не с 0 элемента, а с 1го). Твой цикл - захардкожен на 20 итераций. Проблема собственно в том, что в поле memo у тебя нет столько заполненных значений и вот тут то всё и ломается. Тебе нужны циклы не до 20 а до последней по номеру строки, т.е. от 0 до "Memo1.Lines.Count - 1", Memo1.Lines.Count возвращет число строк, учти, даже если в строке ничего не будет записано - оно останется строкой, минус один там чтобы получить номер этой строки так как отсчёт идет от 0.
P.S. всё же воткни целые числа, но вообще дело твоё
,
 
Последнее редактирование: