Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2011, 00:54   #1
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
Сообщение Найдите ошибку в маленьком коде

Задача.
Даны целые числа A1..A15. Получить сумму тех чисел которые кратны 5 и имеют отрицательное значение. Сформировать массив С из значений зад. массива А.

Оформление.
На форме располагаются два СтрингГрида. В первый записываются значения (массив А). Во второй выводятся подходящие по условию числа.

Проблема.
Написал всё кроме нахождения суммы чисел подходящих по условию задачи. Всё прекрасно компилируется...НО! После того как StringGrid1 заполнен с клавиатуры и после того как кликнешь по кнопке компилятор выдаёт ошибку: "Project Project1.exe raised exception class EConvertError with message"'is not valid integer value'. Process stopped.
Use step or Run to continue.

В чём проблема то?? Никак не могу понять...Помогите пожалуйста разобраться. Главное устранить эту критическую ошибку.

п.с. Не ругайтесь за корявость, особенно с if..then. Ну я только учусь.



Код

"
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,m:integer;
    a,c:array [1..15] of integer;
begin
    for i:=1 to 15 do
      a[i]:=StrToInt(StringGrid1.Cells[1,i]);//присвиваем массиву А значения из Стринг грида
   for i:=1 to 15 do
    if (a[i] mod 5=0) then
    if a[i]>0  then //ищем отрицательные и кратные 5 числа
      for m:=1 to 15 do
      c[m]:=a[m];//подходящие числа присваеваем массиву С
    for i:=1 to 15 do
    StringGrid2.Cells[1,i]:=IntToStr(c[i]);//заполняем стрингГрид числами с массива С
    end;
end.

Последний раз редактировалось Crabobass; 07.03.2011 в 00:59. Причина: небыло комментариев...
Crabobass вне форума Ответить с цитированием
Старый 07.03.2011, 01:43   #2
Kotlyar562
Пользователь
 
Аватар для Kotlyar562
 
Регистрация: 03.02.2010
Сообщений: 46
По умолчанию

Я заметил только ошибку в логике твоей программы. У тебя: если а кратно 5 и больше нуля, то ты все значения массива а[m] присваиваются соответственно массиву с[m].
Надо:
Код:
m:=1;
if (a[i] mod 5=0) and (a[i]<0) then
begin
  c[m]:=a[i];
  m:=m+1;
end;
Вроде так. А вот отчего ошибка не пойму, похоже чтото с конвертированием величин, только не догоню что именно. С виду правильно все))
Kotlyar562 вне форума Ответить с цитированием
Старый 07.03.2011, 05:07   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> В чём проблема то?

очевидно, тут:

Цитата:
a[i]:=StrToInt(StringGrid1.Cells[1,i]);
В одной из ячеек [1,i] пустая строка, которая не может быть преобразована в число.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.03.2011, 09:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

veniside +1

добавлю. Это TStringGrid делал человек с перепутанными взглядами на массивы, поэтому первым идёт индекс СТОЛБЦА, а вторым - индекс СТРОКИ.
поэтому эта запись:
Цитата:
Код:
 for i:=1 to 15 
   ... StringGrid1.Cells[1,i]
предполагает что во втором СТОЛБЦЕ (первый - нулевой, там, скорее всего название или номер), начиная со втрой строки, сверху вниз должно быть 15 целых чисел!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти ошибку в маленьком куске кода xaero93 Помощь студентам 4 27.01.2011 14:35
Найдите косяк в коде Kingcss Общие вопросы Delphi 2 02.01.2011 08:35
Найдите ошибку в коде Arch0000 Общие вопросы C/C++ 0 29.05.2010 07:32
найдите ошибку в коде TopoRRR Помощь студентам 6 15.12.2009 10:30
найдите ошибку в коде pony Помощь студентам 1 14.09.2009 10:03