Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как посчитать проценты? 
:(
    Опции темы
Digit
  Дата 9.7.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



есть два числа типа real. меньшее из них считается равным 100% и нужно узнать на сколько прочентов второе число болише первого.

проблема в том, что делить real на real нельзя, а как обойти это не знаю... smile
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



уж сколько раз твердили миру smile

Код

var a,b:real
      percent:real;
      a1,b1:integer;
begin
a1:=a*100; // теперь у нас число integer, и его можно делить
b1:=b*100; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
end;


пример:
a=50,45 -> a1=5045 |
..................................| => a1>b1 => percent = 2994*100/5045 = 59,346
b=29,94 -> b1=2994 |

Это сообщение отредактировал(а) Femida - 9.7.2005, 19:25


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



согласен, такой вариант прокатит, но при одноу условии - после запятой не более 2-х символов...
а у меня может быть и больше... (например чтонть типа 34.3453456) smile
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit, проблема решается легко: либо ставишь условие на кол-во знаков после запятой, либо автоматически приписываешь лишние нули (типа се числа домножаются на 1'000'000'000 или любое такое число.


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Femida, навено подумаешь, что я совсем тупой, но как поставить условие на кол-во знаков после запятой? =)
PM MAIL ICQ   Вверх
SPrograMMer
Дата 9.7.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Цитата(Digit @ 9.7.2005, 19:22)
(например чтонть типа 34.3453456)

Ну так домнажай не на 100, а на... скока там у тебя знаков smile


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Digit
Дата 9.7.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(SPrograMMer @ 9.7.2005, 19:27)
Цитата(Digit @ 9.7.2005, 19:22)
(например чтонть типа 34.3453456)

Ну так домнажай не на 100, а на... скока там у тебя знаков smile

В том то и дело, что после запятой не ограниченное кол-во знаков... Точнее сколько real выдержит столько и будет...
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Цитата(Digit @ 9.7.2005, 20:12)
на сколько прочентов
подправка: надо же найти разность, тогда конечная вормула:

Код

var: delta:real;
.......

delta:=100-percent;



--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Femida @ 9.7.2005, 19:30)
Код

var: delta:real;
.......

delta:=100-percent;

как мы можем вычесть percent из 100, если мы не можем его посчитать (он все еще real)

есть в Делфях финкции для получения торлько целой части числа (в Паскала знаю trunc)
PM MAIL ICQ   Вверх
Marriage
Дата 9.7.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Что -то я не пойму ....
smile почему нельзя делить real на real ???



--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit
Цитата(Digit @ 9.7.2005, 20:27)
как поставить условие на кол-во знаков после запятой? =)



Код

var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
Label1.Caption:='Введите число, с количеством знаков после запятой равным n'; // n - прописать числом
a:=StrToInt(Edit1.Text);
Label2.Caption:='Введите число, с количеством знаков после запятой равным n';
b:=StrToInt(Edit2.Text);
a1:=a*10^n; // теперь у нас число integer, и его можно делить
b1:=b*10^n; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=100-percent;
end;[code=delphi]



Это сообщение отредактировал(а) Femida - 9.7.2005, 19:43


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Marriage @ 9.7.2005, 19:39)
Что -то я не пойму ....
smile почему нельзя делить real на real ???

обьясняю ситуацию:
есть два числа типа real (a1 и a2)
считаем третье число (rez):
Код

rez:= a1/a2;


получаем ответ от Делфей: "Invaild floating point operation"

а вот почему нельзя, этого не знаю... может трудно реализовать или хавает много ресурсов под это дело...
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit опять так же можно:

Код
delta:=10^(n+2)-percent*10^n;



Это сообщение отредактировал(а) Femida - 9.7.2005, 19:46


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Femida @ 9.7.2005, 19:42)
Digit
Цитата(Digit @ 9.7.2005, 20:27)
как поставить условие на кол-во знаков после запятой? =)



Код

var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
Label1.Caption:='Введите число, с количеством знаков после запятой равным n'; // n - прописать числом
a:=StrToInt(Edit1.Text);
Label2.Caption:='Введите число, с количеством знаков после запятой равным n';
b:=StrToInt(Edit2.Text);
a1:=a*10^n; // теперь у нас число integer, и его можно делить
b1:=b*10^n; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=100-percent;
end;[code=delphi]


это тоже конечно хороший вариант, но опять одно НО: число берется из файла...

мне проще "обрезать" числу хвост (оставить три знака после запятой)...
PM MAIL ICQ   Вверх
Marriage
Дата 9.7.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Digit
Чет я не понял ...
Код

procedure TForm1.Button1Click(Sender: TObject);
var
a1,a2:real;
rez:real;

begin

 rez:= a1/a2;

 Button1.Caption:=FloatToStr(rez);

end;


Здесь что, должна ошибка вылетать ???

Это сообщение отредактировал(а) Marriage - 9.7.2005, 19:54


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Digit
Дата 9.7.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Marriage @ 9.7.2005, 19:50)
Femida
Чет я не понял ...
Код

procedure TForm1.Button1Click(Sender: TObject);
var
a1,a2:real;
rez:real;

begin

 rez:= a1/a2;

 Button1.Caption:=FloatToStr(rez);

end;


Здесь что, должна ошибка вылетать ???

это я писал...

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  s, c, temp, temp1. temp2: real;
......

  temp:= s-c;
  temp1:= temp/s;
  temp2:= temp1*100;
......


не знаю должна или не должне, но у меня матюгается ...
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Marriage а что ко мне то smile


Digit
Цитата(Digit @ 9.7.2005, 20:47)
число берется из файла...
так и надо сразу писать.
Код

 Memo1.Lines.LoadFromfile('C:/proba.txt');
Edit1.text:=Memo1.Lines[1]; // типа вторая строка в Memo у нас отведена для числа
 a:=StrToInt(Edit1.Text); 
a1:=a*10^n;




--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Marriage
Дата 9.7.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Цитата
s, c, temp, temp1. temp2: real;


А что там точка делат ???
А ошибка точно именно на строчке с делением выдает ошибку, что - то мне не вериться в такое ...

Это сообщение отредактировал(а) Marriage - 9.7.2005, 19:59


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Marriage скорее всего описка


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



так и есть - описка... =)

Marriage, так что поверь, а не хочешь проверь =)


Femida, я запитался в этих кусках кода... можешь все целиком скинуть? smile

З.Ы. Я - новичок, а умение обьяснять приходит с опытом... smile
PM MAIL ICQ   Вверх
Marriage
Дата 9.7.2005, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Digit
Скинь целиком ..


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Digit
Дата 9.7.2005, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Femida @ 9.7.2005, 19:57)
Код

 Memo1.Lines.LoadFromfile('C:/proba.txt');
Edit1.text:=Memo1.Lines[1]; // типа вторая строка в Memo у нас отведена для числа
 a:=StrToInt(Edit1.Text); 
a1:=a*10^n;

а откуда взялось n?

Marriage, код очень большой...
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Код

var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
n:=StrToInt(Edit3.text); // пользоваетль сам вводит количество знаков после запятой
if n<0 then Messagedlg('Это число должно быть больше нуля',mtError,[mbcancel],0);
Memo1.Lines.LoadFromfile('C:/proba.txt');
Edit1.text:=Memo1.Lines[0]; // типа первая строка в Memo у нас отведена для числа a
a:=StrToInt(Edit1.Text);
Edit2.text:=Memo1.Lines[1]; // типа вторая строка в Memo у нас отведена для числа b
b:=StrToInt(Edit2.Text);
a1:=a*10^n; // теперь у нас число integer, и его можно делить
b1:=b*10^n; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=10*n*100-percent*10*n;
Label1.Caption:=IntToStr(delta);
end;

Добавлено @ 20:20
проверь на работоспособность, пока Delphi под рукой нет


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Marriage
Дата 9.7.2005, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Digit
Скинь свой код полностью ...

Это сообщение отредактировал(а) Marriage - 9.7.2005, 20:27


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Marriage, зачем? пусть попробует - если работает, то весь код не нужен


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Marriage
Дата 9.7.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



НУ разве может быть такое :

Цитата
обьясняю ситуацию:
есть два числа типа real (a1 и a2)
считаем третье число (rez):

код Pascal/Delphi
1:

rez:= a1/a2;






получаем ответ от Делфей: "Invaild floating point operation"



--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Digit
Дата 9.7.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Femida, мы кажется снова не допоняли друг друга...
пользователь ничего не вводит...
можно отбросить все знаки после 3-го знака после запятой (тоесть 4-й, 5-й и тд)
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Код
var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
n:=3; ..вот здесь сам пиши тогда число, сколько надо
Memo1.Lines.LoadFromfile('C:/proba.txt');
Edit1.text:=Memo1.Lines[0]; // типа первая строка в Memo у нас отведена для числа a
a:=StrToInt(Edit1.Text);
Edit2.text:=Memo1.Lines[1]; // типа вторая строка в Memo у нас отведена для числа b
b:=StrToInt(Edit2.Text);
a1:=a*10^n; // теперь у нас число integer, и его можно делить
b1:=b*10^n; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=10^(n+2)-percent*10^n;
Label1.Caption:=IntToStr(delta);
end;



Подправил, там глючок был

Это сообщение отредактировал(а) Femida - 9.7.2005, 20:36


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Femida, сорри... ступил smile
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit, работает?


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



на 12-й сторочке твоего кода говорит: "Pointer type requiried"
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Код

var a,b:real
      percent:real;
      a1,b1:integer;
      delta:real;
begin
n:=3; ..вот здесь сам пиши тогда число, сколько надо
Memo1.Lines.LoadFromfile('C:/proba.txt');
Edit1.text:=Memo1.Lines[0]; // типа первая строка в Memo у нас отведена для числа a
a:=StrToInt(Edit1.Text);
Edit2.text:=Memo1.Lines[1]; // типа вторая строка в Memo у нас отведена для числа b
b:=StrToInt(Edit2.Text);
a1:=a*1000; // теперь у нас число integer, и его можно делить
b1:=b*1000; //
if a1<b1 then percent:=(a1*100)/b1;
if a1>b1 then percent:=(b1*100)/a1;
delta:=10000-percent*1000;
Label1.Caption:=IntToStr(delta);
end;

т.к. n заранее известно, то от степени можно отказаться.


КОД для случая округления до 3 знаков


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



так тоже пробовал....

еще у меня вылетает такая ощибка после попытки скомпилить:

--Resize_Images_Alt_Text--

это может быть причиной?
Добавлено @ 21:10
на сколько я понял вот этот кусок нужен для считывания из файла:
Код

Memo1.Lines.LoadFromfile('C:/proba.txt');    
Edit1.text:=Memo1.Lines[0]; // типа первая строка в Memo у нас отведена для числа a    
a:=StrToInt(Edit1.Text);    
Edit2.text:=Memo1.Lines[1]; // типа вторая строка в Memo у нас отведена для числа b    
b:=StrToInt(Edit2.Text);


ну так вот к моменту, когда надо посчитать проценты, значения уже считаны (меньшее в c, большее в s. извениюсь, что не сказал раньше...)
Добавлено @ 21:14
попробовал такой вариант:

Код

var
  s, c, p: real;
  sa, ca: integer;
....

  sa:= Trunc(s*100);
  ca:= Trunc(c*100);
  p:= sa/ca;


ругается на строчку с p... аналогичная ошибка:"Invaild floating point operation"

Это сообщение отредактировал(а) Alex - 10.7.2005, 12:12
PM MAIL ICQ   Вверх
mvdr
Дата 9.7.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



приведи программу. Никто ее не сворует, а зато в переменных путаницы не будет


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Digit
Дата 9.7.2005, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



чтобы уже ваще ни каких не до пониманий не было кладу все:

Unit1
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    a1: TEdit;
    b1: TEdit;
    Button1: TButton;
    StaticText1: TStaticText;
    c1: TEdit;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    StaticText4: TStaticText;
    StaticText6: TStaticText;
    StaticText5: TStaticText;
    StaticText7: TStaticText;
    StaticText8: TStaticText;
    a2: TEdit;
    b2: TEdit;
    c2: TEdit;
    StaticText9: TStaticText;
    StaticText10: TStaticText;
    StaticText11: TStaticText;
    a3: TEdit;
    b3: TEdit;
    c3: TEdit;
    a4: TEdit;
    b4: TEdit;
    c4: TEdit;
    a5: TEdit;
    b5: TEdit;
    c5: TEdit;
    a6: TEdit;
    b6: TEdit;
    c6: TEdit;
    a7: TEdit;
    b7: TEdit;
    c7: TEdit;
    a8: TEdit;
    b8: TEdit;
    c8: TEdit;
    q1: TEdit;
    q2: TEdit;
    StaticText12: TStaticText;
    r1: TEdit;
    r2: TEdit;
    r3: TEdit;
    r4: TEdit;
    r5: TEdit;
    r6: TEdit;
    r7: TEdit;
    r8: TEdit;
    StaticText13: TStaticText;
    StaticText14: TStaticText;
    Label1: TLabel;
    rez: TEdit;
    Label2: TLabel;
    p4: TEdit;
    p5: TEdit;
    p6: TEdit;
    p7: TEdit;
    p8: TEdit;
    p1: TEdit;
    p2: TEdit;
    p3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  FileName = 'File.txt';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i, ca, sa: integer;
  s, c, k, r, v, t, p, percent: real;
  kolichestvo, cena, stoimost, raznica, procent : array[1..8]of TEdit;
begin

For i:=1 to 8 do
  kolichestvo[i]:=FindComponent('a'+IntToStr(i)) as TEdit;
For i:=1 to 8 do
  cena[i]:=FindComponent('b'+IntToStr(i)) as TEdit;
For i:=1 to 8 do
  stoimost[i]:=FindComponent('c'+IntToStr(i)) as TEdit;
For i:=1 to 8 do
  raznica[i]:=FindComponent('r'+IntToStr(i)) as TEdit;
For i:=1 to 8 do
  procent[i]:=FindComponent('p'+IntToStr(i)) as TEdit;

for i:= 1 to 8 do
  begin
  k:= StrToFloat(kolichestvo[i].Text);
  c:= StrToFloat(cena[i].Text);
  s:= StrToFloat(stoimost[i].Text);

  r:= k*(s - c);

  sa:= Trunc(s*100);
  ca:= Trunc(c*100);
  p:= sa/ca;

  procent[i].Text:= FloatToStr(p);
  raznica[i].Text:= FloatToStr(r);
  end;

v:= 0; t:= 0;

for i:= 1 to 8 do
  begin
  k:= StrToFloat(kolichestvo[i].Text);
  c:= StrToFloat(cena[i].Text);
  s:= StrToFloat(stoimost[i].Text);

  v:= v + k*c;
  t:= t + k*s;
  end;

q1.Text:= FloatToStr(v);
q2.Text:= FloatToStr(t);
rez.Text:= FloatToStr(t-v);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: integer;
str: TStrings;
begin
str:= TStringList.Create;

for i:=0 to ControlCount-1 do
  if controls[i] is TEdit then str.Add(TEdit(controls[i]).Text);

str.SaveToFile(FileName);
str.Free
end;

procedure TForm1.FormShow(Sender: TObject);
var
str: TStrings;
i,x: integer;
begin
if FileExists(FileName)
then
  begin
  str:= TStringList.Create;
  str.LoadFromFile(FileName);
  x:= 0;
  for i:=0 to ControlCount-1 do
    if controls[i] is TEdit
    then begin TEdit(controls[i]).Text:= str.Strings[x]; inc(x); end;
  str.Free;
  end;
end;

end.


Project1
Код

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

PM MAIL ICQ   Вверх
Illusion Dolphin
Дата 9.7.2005, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



(хватаясь руками за голову: или я схожу уже с ума или...)
Ложим на форму 3 компонента TEdit, у 2х первых из них назначаем одну и ту же процедуру OnChange:
Код

procedure TForm1.Edit2Change(Sender: TObject);
var
 x1,x2, r : real;
begin
 x1:=abs(strtofloatdef(edit1.text,0)); //а что делать коли число отрицательно?
 x2:=abs(strtofloatdef(edit2.text,0)); //этот вариант проскипал
 if x1*x2=0 then exit; //error input
 if x1<x2 then r:=100*x2/x1-100 else r:=100*x1/x2-100;
 edit3.Text:=floattostr(r);
end;

Получаем нужный нам ответ.
P.S. А "Invaild floating point operation" получали видимо как обычно из-за деления на ноль... поправьте меня, если что не так понял, но читая 3ю страницу я запутался что вам надо smile)))

Это сообщение отредактировал(а) Illusion Dolphin - 9.7.2005, 22:43


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Digit
Дата 10.7.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Цитата(Illusion @ 9.7.2005, 22:42)
P.S. А "Invaild floating point operation" получали видимо как обычно из-за деления на ноль... поправьте меня, если что не так понял, но читая 3ю страницу я запутался что вам надо smile)))

Оба числа 100 пудово были не нулевыми, а точнее только положительными...
Добавлено @ 11:41
Illusion Dolphin, делал также.
пробовал зазбивать твою строчку с if на несколько - всегда ругается на строчку где производится деление одногооперанда на другой....
PM MAIL ICQ   Вверх
Marriage
Дата 10.7.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Цитата
всегда ругается на строчку где производится деление одногооперанда на другой....


Чему равны эти 2 операнда точно .????
Числа можешь привести ..


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Digit
Дата 10.7.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



x1:= 2436
x2:= 4665

оба типа integer
Добавлено @ 16:27
И еще... написал этот проблемный кусок кода (где производится деление) как отдельную прогу:

Код

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  e1, e2, p:real;
  ew1, ew2, t: integer;

begin
  e1:= StrToFloat(Edit1.Text);
  e2:= StrToFloat(Edit2.Text);
  ew1:= Trunc(e1*100);
  ew2:= Trunc(e2*100);

  p:= ((ew2-ew1)/ew1)*100;

  Edit3.Text:= (FloatToStr(p)+'%');
end;
end.


есть три поля Edit1, ...2, ...3 и кнопка
Edit1 -> x1
Edit2 -> x2
Edit3 -> ответ

все пашет лучше не куда
PM MAIL ICQ   Вверх
mvdr
Дата 13.7.2005, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Digit? у тебя случаем не Delphi 7? У нее иногда такое бывает


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1069 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.