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

bodic13

bodic13
Дней с нами
3.119
Розыгрыши
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;
 
Program ProgaKotorayaSchitivayetChisla;

:kappa::kappa::kappa::kappa::kappa:
 
  • Like
Реакции: bodic13
До экзаменов еще месяц - че ты--Ссылка удалена--
 
  • Like
Реакции: bodic13
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. про работу кода нам кто то гонит :(
 
Последнее редактирование:
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
Ошибка то все равно вылетать не должна
если опустить даже косяки что я назвал выше - остаётся проблема сравнения чисел с плавающей точкой. Имхо там стоит закостылить целый тип для всех и не морочить голову над этим, всё равно наверняка в поля memo будут вводить целые числа, вряд ли кто будет полноценно тестировать это учебное задание
P.S. там где то попадает мусор, который данный код не может обработать, мб пробел, мб косяки с присвоенением, а вообще, что мешает ТС выполнить код пошагово и посмотреть на какой строке оно рушится?
 
Последнее редактирование:
  • Like
Реакции: bodic13
если опустить даже косяки что я назвал выше - остаётся проблема сравнения чисел с плавающей точкой. Имхо там стоит закостылить целый тип для всех и не морочить голову над этим, всё равно наверняка в поля memo будут вводить целые числа, вряд ли кто будет полноценно тестировать это учебное задание
P.S. там где то попадает мусор, который данный код не может обработать, мб пробел, мб косяки с присвоенением, а вообще, что мешает ТС выполнить код пошагово и посмотреть на какой строке оно рушится?
Сори, я не тот код скинул там после а стоит: i в квадратных скобках и после Memo1.Lines тоже стоит . Если сделать массив int то там вообще лютый трэш начинается, т.к. первый символ в цифре перестает распознаваться, и на любое число вылетает ошибка. Наверно мне все сделать мешает врожденная криворукость.)Ну а так, за помощь спасибо.)
 
Сори, я не тот код скинул там после а стоит: i в квадратных скобках и после Memo1.Lines тоже стоит.
Вот такое уже примерно должно работать, В общем расчехлил виртуалку и поставил на неё делфи(ох, как же давно это было...), все беды - от стрёмного memo, индексация строк в нём идёт начиная с 0 и до последнего значения(если будут проблемы - я забыл проверить, а так не помню как оно в делфи, и убрал с машины, попробуй в массив записывать не с 0 элемента, а с 1го). Твой цикл - захардкожен на 20 итераций. Проблема собственно в том, что в поле memo у тебя нет столько заполненных значений и вот тут то всё и ломается. Тебе нужны циклы не до 20 а до последней по номеру строки, т.е. от 0 до "Memo1.Lines.Count - 1", Memo1.Lines.Count возвращет число строк, учти, даже если в строке ничего не будет записано - оно останется строкой, минус один там чтобы получить номер этой строки так как отсчёт идет от 0.
P.S. всё же воткни целые числа, но вообще дело твоё
,
 
Последнее редактирование: