Программа Рейтинг стран за результатами олимпийских соревнований и ошибка: ''Is Not A Valid Integer Value"

tane

Здравствуйте)программа Рейтинг стран за результатами олимпийских соревнований Ввожу данные в таблицу,выдает ошибка: '' Is Not A Valid Integer Value. Помогите разобраться. (Кнопка Підсумок > Итог)
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    tabl: TStringGrid;
    Button1: TButton;
    Image1: TImage;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormActivate(Sender: TObject);
begin
tabl.Cells[0,0]:='Країна'; 
tabl.Cells[1,0]:='Золотих' ;
tabl.Cells[2,0]:='Срібних'; 
tabl.Cells[3,0]:='Бронзових';
tabl.Cells[4,0]:='Всього медалей';
tabl.Cells[5,0]:='Балів';
tabl.Cells[0,1]:='Україна';
tabl.Cells[0,2]:='Білорусія';
tabl.Cells[0,3]:='Англія';
tabl.Cells[0,4]:='Германія';
tabl.Cells[0,5]:='Італія';
tabl.Cells[0,6]:='Китай' ;
tabl.Cells[0,7]:='Корея';
tabl.Cells[0,8]:='Куба';
tabl.Cells[0,9]:='Нідерланди';
tabl.Cells[0,10]:= 'Россія' ;
tabl.Cells[0,11]:='США';
tabl.Cells[0,12]:='Франція';
tabl.Cells[0,13]:='Японія';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var 
c,r:integer; {номер столбика и номер строки таблицы}
s:integer; // всtго медалей у команды
p:integer; // балов у команды
m: integer; // номер ряда з максимальним к-ом балов 
buf:array[0..5] of string; // буфер для обмена рядков 
i:integer; // номер рядка - испол у сортировки
begin
for r:=1 to tabl.rowcount do // проработать все строки
begin
s:=0 ; //общее количество медалей?
for c:=1 to 3 do
if tabl.cells[c,r] <>' 'then s:=s+StrToInt(tabl.cells[c,r])
else tabl.cells[c,r]:= '0' ; // общее количество балов
p:=7*StrToInt(tabl.cells[1,r])+6*StrToInt(tabl.cells[2,r])+5*StrToInt(tabl.cells[3,r]); // выводим результат
 
tabl.cells[4,r]:=IntToStr(s); // всьего медалей
tabl.cells[5,r]:=IntToStr(p); // всьего балов
end; {упорядочивание таблицы за спадением - по 5-у столбику упорядочить методом выбора}
    for r:=1 to tabl.rowcount-1 do
begin
m:=r; // найбольший елемент - в r-му рядку
for i:=r to tabl.rowcount-1 do
if StrToInt(tabl.cells[5,i])>StrToInt(tabl.cells[5,m]) then m:=i;
if r <> m then
begin
for c:=0 to 5 do
begin
buf[c]:=tabl.Cells[c,r]; tabl.Cells[c,r]:=tabl.Cells[c,m]; tabl.Cells[c,m]:=buf[c];
end; end; end; end;
 
   
end.
5 ответов

tane

замените StrToInt на TryStrToInt и ошибки не будет.


tane

замените StrToInt на TryStrToInt и ошибки не будет.
Ага. Будут просто неверные результаты.
if tabl.cells[c,r] <>' 'then s:=s+StrToInt(tabl.cells[c,r])
' ' - это строка из одного символа пробела. Пустая строка это ''


tane

Ага. Будут просто неверные результаты.' ' - это строка из одного символа пробела. Пустая строка это ''
а что при Trim сумма изменится?я предлагал сделать так:
if TryStrToInt(tabl.cells[c,r],k) then
 s:=s+k
else
 tabl.cells[c,r]:= '0' ; // общее количество балов


tane

а что при Trim сумма изменится?
При чем тут Trim? У автора в коде проверяется не то пустая ячейка или непустая, а записан ли в ячейку один и только один пробел или не записан. Поэтому пустые ячейки проходят проверку и попадают в StrToInt(tabl.cells[c,r])


tane

for r:=1 to tabl.rowcount do // проработать все строки Добавляем rowcount-1 do // проработать все строки и все работает. Спасибо всем за отклик!