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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2008, 13:38   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Счастье Код и несколько вопросов

Итак, здесь мне надо написать правильно условие через if...then или try...except, чтобы программа не выдавала ошибку, если не во все ячейки введены данные,т.е пусто, (будет хорошо, если покажете хотя бы на одном цикле, остальные попробую сделать по аналогии):
Код:
Код:
//количество оценок в SG3
   SG3.Cells[0,i]:=IntToStr(StrToInt(SG2.Cells[0,i])+
   StrToInt(SG2.Cells[1,i])+StrToInt(SG2.Cells[2,i])+
   StrToInt(SG2.Cells[3,i]));
 //средний бал в SG3
   SG3.Cells[1,i]:=
   FloatToStrF(2*StrToInt(SG2.Cells[0,i])/StrToInt(SG3.Cells[0,i])+
           3*StrToInt(SG2.Cells[1,i])/StrToInt(SG3.Cells[0,i])+
           4*StrToInt(SG2.Cells[2,i])/StrToInt(SG3.Cells[0,i])+
           5*StrToInt(SG2.Cells[3,i])/StrToInt(SG3.Cells[0,i]),ffFixed,1,1);
 //Качество успеваемости в SG3
   SG3.Cells[2,i]:=
   FloatToStrF(Trunc((StrToInt(SG2.Cells[2,i])+StrToInt(SG2.Cells[3,i]))*100)
              /StrToInt(SG3.Cells[0,i]),ffFixed,0,0);
 //Успеваемость в SG3
   SG3.Cells[3,i]:=
   FloatToStrF(100-Trunc(StrToInt(SG2.Cells[0,i])*100)/StrToInt(SG3.Cells[0,i]),ffFixed,0,0);
 //Обученность в SG3
   SG3.Cells[4,i]:=
   FloatToStrF(Trunc((2*StrToInt(SG2.Cells[0,i])+3*StrToInt(SG2.Cells[1,i])+
           4*StrToInt(SG2.Cells[2,i])+5*StrToInt(SG2.Cells[3,i]))*20)
           /StrToInt(SG3.Cells[0,i]),ffFixed,0,0);
 //Четвертная оценка в SG3
   SG3.Cells[5,i]:=
   FloatToStrF(Trunc(2*StrToInt(SG2.Cells[0,i])+3*StrToInt(SG2.Cells[1,i])+
           4*StrToInt(SG2.Cells[2,i])+5*StrToInt(SG2.Cells[3,i]))
           /StrToInt(SG3.Cells[0,i]),ffFixed,0,0);
А здесь мне надо правильно записать цикл подсчета суммы ячеек в таблице по вертикали и умножения на число:
Код:
  SG2.Cells[0,26]:=
      FloatToStr(2*(StrToInt(SG2.Cells[0,1])+StrToInt(SG2.Cells[0,2])+
      StrToInt(SG2.Cells[0,3])+StrToInt(SG2.Cells[0,4])+
      StrToInt(SG2.Cells[0,5])+StrToInt(SG2.Cells[0,6])+
      StrToInt(SG2.Cells[0,7])+StrToInt(SG2.Cells[0,8])+
      StrToInt(SG2.Cells[0,9])+StrToInt(SG2.Cells[0,10])+
      StrToInt(SG2.Cells[0,11])+StrToInt(SG2.Cells[0,12])+
      StrToInt(SG2.Cells[0,13])+StrToInt(SG2.Cells[0,14])+
      StrToInt(SG2.Cells[0,15])+StrToInt(SG2.Cells[0,16])+
      StrToInt(SG2.Cells[0,17])+StrToInt(SG2.Cells[0,18])+
      StrToInt(SG2.Cells[0,19])+StrToInt(SG2.Cells[0,20])+
      StrToInt(SG2.Cells[0,21])+StrToInt(SG2.Cells[0,22])+
      StrToInt(SG2.Cells[0,23])+StrToInt(SG2.Cells[0,24])+
      StrToInt(SG2.Cells[0,25])));
Пробовал так:
Код:
//SG2.Cells[0,26]:=FloatToStr(2*(StrToInt(SG2.Cells[0,i])));
Но не получается. Просто присваивает первую ячейку и все. Вот. Буду Вам всем очень благодарен если поможете)).
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.08.2008, 13:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вместо StrToInt попробуй StrToIntDEF, или делай проверку на то содержит ли клетка число или там непонятно что.
Вот пример:
Код:
 SG3.Cells[0,i]:=IntToStr(StrToIntDef(SG2.Cells[0,i],0)+   
   StrToIntDef(SG2.Cells[1,i],0)+StrToIntDef(SG2.Cells[2,i],0)+   
   StrToIntDef(SG2.Cells[3,i],0));
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2008, 14:12   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Код:
SG3.Cells[0,i]:=IntToStr(StrToIntDef(SG2.Cells[0,i],0)+   
   StrToIntDef(SG2.Cells[1,i],0)+StrToIntDef(SG2.Cells[2,i],0)+   
   StrToIntDef(SG2.Cells[3,i],0));
Я попробовал, но при нажатии на кнопку рассчета выдается ошибка:
"Invalid floating point operation". А так компилируется.
Цитата:
делай проверку на то содержит ли клетка число или там непонятно что
Вы не могли бы код написать пожалуйста?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.08.2008, 14:30   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вы не могли бы код написать пожалуйста?)
А я написал выше.
Цитата:
Invalid floating point operation
В какой строке кода? Мож у тебя в ячейках не целое а вещественное стоит, тогда вместо StrToIntDef нужно StrToFloatDef
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2008, 15:10   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Я попробовал использовать StrToIntDef для подсчета количества оценок, т.е получилось так:
Код:
//количество оценок в SG3   
   SG3.Cells[0,i]:=IntToStr(StrToIntDef(SG2.Cells[0,i])+   
   StrToIntDef(SG2.Cells[1,i])+StrToIntDef(SG2.Cells[2,i])+   
   StrToIntDef(SG2.Cells[3,i]));
Работает пока, пишет ноль в пустых. А попробовав изменить этот код:
Код:
//Четвертная оценка в SG3   
   SG3.Cells[5,i]:=   
  FloatToStrF(Trunc(2*StrToInt(SG2.Cells[0,i])+3*StrToInt(SG2.Cells[1,i])+   
           4*StrToInt(SG2.Cells[2,i])+5*StrToInt(SG2.Cells[3,i]))   
           /StrToInt(SG3.Cells[0,i]),ffFixed,0,0);
на
Код:
//Четвертная оценка в SG3   
   SG3.Cells[5,i]:=   
  IntToStr((2*StrToIntDef(SG2.Cells[0,i],0)+3*StrToIntDef(SG2.Cells[1,i],0)+   
           4*StrToIntDef(SG2.Cells[2,i],0)+5*StrToIntDef(SG2.Cells[3,i],0))   
           /StrToIntDef(SG3.Cells[0,i],0));
Компилятор выдает мне ошибку такого содержания:
"There is no overloaded version of 'IntToStr' that can be called with these arguments". И ставит курсор перед двоеточием после второй скобки во втором измененном варианте кода четвертной оценки. (в ответ доолжно выдаваться целое число)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.08.2008, 15:47   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Конечно, тебе либо нужно в выражении поменять / на div либо IntToStr поменять на FloatToStr.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2008, 16:19   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Stilet, я пробовал менять "/" на "div", но компилятор выдает ошибку типа этот оператор не applicable (забыл как переводится это слово ) с этим типом. Может Вы не сочьтете за трудность и исправите в моем коде то, что надо? Может integer поменять на real. Не знаю. Может я неправильно с точки зрения синтаксиса меняю что то, потому что компилятор постоянно указывает только на позицию после второй скобки.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.08.2008, 16:28   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я писал:
Цитата:
либо IntToStr поменять на FloatToStr.
Пробовалось это?

и кстати StrToIntDef в твоем случае стоит поменять на StrToFloatDef
Если та же ошибка-прикрепляй сюда весь свой проект, ибо в том что ты привел решение дано выше.

А еще совет: Я бы воспользовался Экзелем для решения подобной задачи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2008, 16:49   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Только что обнаружил, что формулы работают, но без деления. То естья отключаю деление и оставляю только сумму, то все считается и выводится в ячейки. Правда ответы не те, что надо (потому что без деления), а как только включаю деление, то сразу опять появляется ошибка: «Invalid floating point operation». Может пришла кому какая нибудь мысль после этого?)
Цитата:
А еще совет: Я бы воспользовался Экзелем для решения подобной задачи.
Не могу, Stilet, у меня как раз именно задача и заключается в написании программы для таких расчетов.
А исходник я щас выложить не могу, т.к у меня при моей очень маленькой скорости=33,6 архив отправляться бедут час минимум)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.08.2008, 17:04   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Внимательно перечитай мой предидущий пост
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько вопросов Зубоскалик Общие вопросы Delphi 14 20.11.2008 14:28
Несколько вопросов по VBA Graveyard Microsoft Office Excel 6 27.08.2008 08:50
несколько вопросов по RichEdit TaTT DoGG Компоненты Delphi 4 27.05.2008 10:57
Несколько Вопросов Дорст Общие вопросы Delphi 3 12.11.2007 09:18
Несколько вопросов по Delphi 2005 Nez Общие вопросы Delphi 53 21.02.2007 05:49