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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2008, 22:13   #1
Agent[PNZ]
Пользователь
 
Регистрация: 20.11.2007
Сообщений: 37
По умолчанию Курсовой проект по Delphi 7

Вот задание
Ребят, вот по курсачу надо сделать прогу, делаю я её делаю пытюась че-то менять но все время глюки какие-то, то результат в минус уходит то вообще зацикливается прога. То, что получилось кидаю ниже, а пока я еще сам мозгую, буду очень благодарен если че нить подскажет кто...
Код:
implementation

{$R *.dfm}
procedure Pokupka (cena:integer; var rabmest:integer);
var
a,b,c,d,e,f:integer; { количество дополнительных лицензий }
g,h,i,j,k,l:integer; { цены за дополнительные лицензии}
begin
rabmest:=StrToInt (Form1.Edit1.Text);
b:=5;
c:=10;
d:=20;
e:=50;
f:=100;
g:=150;
h:=520;
i:=1000;
j:=1900;
k:=4600;
l:=9000;
if rabmest div f <> 0 then
begin
repeat
cena:=cena+l;
rabmest:=rabmest-f;
until   rabmest div f <> 0;
end;

if rabmest div e <> 0 then
begin
repeat
cena:=cena+k;
rabmest:=rabmest-e;
until rabmest div e <> 0  ;
end;

if rabmest div d <> 0 then
begin
repeat
cena:=cena+j;
rabmest:=rabmest-d;
until rabmest div d <> 0 ;
end;

if rabmest div c <> 0 then
begin
repeat
cena:=cena+i;
rabmest:=rabmest-c;
until rabmest div c <> 0;
end;

if rabmest div b <> 0 then
begin
repeat
cena:=cena+h;
rabmest:=rabmest-b;
until rabmest div b <> 0;
end;

cena:=cena+(rabmest*g);
if rabmest=1 then cena:=420;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cena1,rabmest1:integer;
begin
Pokupka (rabmest1, cena1);
Edit2.Text:=IntToStr(cena1);
end;

end.

Последний раз редактировалось Agent[PNZ]; 12.11.2008 в 22:46. Причина: забыл задание прикрепить)))
Agent[PNZ] вне форума Ответить с цитированием
Старый 12.11.2008, 23:47   #2
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Предлагаю свой вариант.
Вложения
Тип файла: zip Pr_License.zip (202.7 Кб, 21 просмотров)

Последний раз редактировалось MalexG; 12.11.2008 в 23:53.
MalexG вне форума Ответить с цитированием
Старый 13.11.2008, 00:20   #3
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Если правильно понял задание, то вот мой вариант.
Разрабатывался в Delphi 2009.
Вложения
Тип файла: rar Licences.rar (212.0 Кб, 13 просмотров)
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 13.11.2008, 00:29   #4
Agent[PNZ]
Пользователь
 
Регистрация: 20.11.2007
Сообщений: 37
По умолчанию

Надо именно в Delphi 7, cори что раньше не написал...
Agent[PNZ] вне форума Ответить с цитированием
Старый 13.11.2008, 00:31   #5
Agent[PNZ]
Пользователь
 
Регистрация: 20.11.2007
Сообщений: 37
Подмигивание

Цитата:
Сообщение от MalexG Посмотреть сообщение
Предлагаю свой вариант.
ошибка где то при вводе 10 рабочих мест 1540, хотя лицензия на 10 мест меньше стоит, вроде 1000...
Agent[PNZ] вне форума Ответить с цитированием
Старый 13.11.2008, 00:57   #6
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
Надо именно в Delphi 7, cори что раньше не написал...
Тогда так:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    procedure CountPrice(Desks: integer);

  public
    { Public declarations }
  end;

const
  FirstBuy = 420;
  L: array [1..6] of integer = (1, 5, 10, 20, 50, 100); //Лицензии
  P: array [1..6] of integer = (150, 520, 1000, 1900, 4600, 9000); //Цена

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  CountPrice(StrToIntDef(Edit1.Text, 0));
end;

procedure TForm1.CountPrice(Desks: integer);
var
  TotalPrice: integer;
begin
  if Desks = 0 then
    Exit;
  TotalPrice := 0;
  ListBox1.Clear;
  Desks := Desks - 1; //первая покупка дороже = FirstBuy;
  while Desks >= L[6] do
  begin
    Desks := Desks - L[6];
    TotalPrice := TotalPrice + P[6];
    ListBox1.Items.Add(IntToStr(L[6]) + ' мест на сумму ' + IntToStr(P[6]));
  end;
  while Desks >= L[5] do
  begin
    Desks := Desks - L[5];
    TotalPrice := TotalPrice + P[5];
    ListBox1.Items.Add(IntToStr(L[5]) + ' мест на сумму ' + IntToStr(P[5]));
  end;
  while Desks >= L[4] do
  begin
    Desks := Desks - L[4];
    TotalPrice := TotalPrice + P[4];
    ListBox1.Items.Add(IntToStr(L[4]) + ' мест на сумму ' + IntToStr(P[4]));
  end;
  while Desks >= L[3] do
  begin
    Desks := Desks - L[3];
    TotalPrice := TotalPrice + P[3];
    ListBox1.Items.Add(IntToStr(L[3]) + ' мест на сумму ' + IntToStr(P[3]));
  end;
  while Desks >= L[2] do
  begin
    Desks := Desks - L[2];
    TotalPrice := TotalPrice + P[2];
    ListBox1.Items.Add(IntToStr(L[2]) + ' мест на сумму ' + IntToStr(P[2]));
  end;
  while Desks >= L[1] do
  begin
    Desks := Desks - L[1];
    TotalPrice := TotalPrice + P[1];
    ListBox1.Items.Add(IntToStr(L[1]) + ' место на сумму ' + IntToStr(P[1]));
  end;
  TotalPrice := TotalPrice + FirstBuy;
  ListBox1.Items.Add('   + первая покупка = ' + IntToStr(FirstBuy));
  ListBox1.Items.Add('Всего = ' + IntToStr(TotalPrice));
end;

end.
И вот так:
Код:
object Form1: TForm1
  Left = 453
  Top = 391
  Caption = 'Form1'
  ClientHeight = 286
  ClientWidth = 426
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesigned
  PixelsPerInch = 96
  TextHeight = 13
  object ListBox1: TListBox
    Left = 0
    Top = 0
    Width = 426
    Height = 209
    Align = alTop
    ItemHeight = 13
    TabOrder = 0
  end
  object Button1: TButton
    Left = 175
    Top = 232
    Width = 75
    Height = 25
    Caption = 'Count'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -16
    Font.Name = 'Tahoma'
    Font.Style = [fsBold]
    ParentFont = False
    TabOrder = 1
    OnClick = Button1Click
  end
  object Edit1: TEdit
    Left = 48
    Top = 236
    Width = 81
    Height = 21
    TabOrder = 2
    Text = '0'
  end
end
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 13.11.2008, 08:50   #7
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Цитата:
Сообщение от Agent[PNZ] Посмотреть сообщение
ошибка где то при вводе 10 рабочих мест 1540, хотя лицензия на 10 мест меньше стоит, вроде 1000...
Внимательнее читайте задание.
Сказано же, что однопользовательская версия стоит 420$.
Допустим что всего надо приобрести 10 р.м., тогда:
гл. лицензия - 420$;
5 доп. лицензий - 520$;
4*1 доп. лицензии - 4*150$;
===========================
Итого: 1540$.
MalexG вне форума Ответить с цитированием
Старый 13.11.2008, 19:16   #8
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Немного ".pas" оптимизировал
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    procedure CountPrice(Desks: integer);

  public
    { Public declarations }
  end;

const
  FirstBuy = 420;
  L: array [1..6] of integer = (1, 5, 10, 20, 50, 100); //Лицензии
  P: array [1..6] of integer = (150, 520, 1000, 1900, 4600, 9000); //Цена

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  CountPrice(StrToIntDef(Edit1.Text, 0));
end;

procedure TForm1.CountPrice(Desks: integer);
var
  TotalPrice, I: integer;
begin
  if Desks = 0 then
    Exit;
  TotalPrice := 0;
  ListBox1.Clear;
  Desks := Desks - 1; //первая покупка дороже = FirstBuy;
  TotalPrice := TotalPrice + FirstBuy;
  ListBox1.Items.Add('первая лицензия ' + IntToStr(FirstBuy));
  for I := High(L) downto 1 do
    while Desks >= L[I] do
    begin
      Desks := Desks - L[I];
      TotalPrice := TotalPrice + P[I];
      if I > 1 then
        ListBox1.Items.Add(IntToStr(L[I]) + ' мест на сумму ' + IntToStr(P[I]))
      else
        ListBox1.Items.Add(IntToStr(L[I]) + ' место на сумму ' + IntToStr(P[I]));
    end;
  ListBox1.Items.Add('Всего = ' + IntToStr(TotalPrice));
end;

end.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 13.11.2008, 23:08   #9
Agent[PNZ]
Пользователь
 
Регистрация: 20.11.2007
Сообщений: 37
По умолчанию

А я вот думал над заданием когда, то почему-то решил, что про единичную поставку имеется ввиду, что если пользователь вводит что ун ас 1 рабочее место, то сразу стоимость 420, то есть когда одно рабочее место лицензии вообще не требуются, или это обязательная главная лицензия просто?
Agent[PNZ] вне форума Ответить с цитированием
Старый 14.11.2008, 13:25   #10
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
А я вот думал над заданием когда, то почему-то решил, что про единичную поставку имеется ввиду, что если пользователь вводит что ун ас 1 рабочее место, то сразу стоимость 420, то есть когда одно рабочее место лицензии вообще не требуются, или это обязательная главная лицензия просто?
В задании написано, что для двух и более рабочих мест требуется приобретение ДОПОЛНИТЕЛЬНЫХ лицензий. Т.е. превая - основная, а все очтальные - дополнительные. Вот и выходит, что первая - по любому 420, а остальные (дополнительные) - по другим расценкам.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен курсовой проект фамил Помощь студентам 2 13.05.2008 17:58
Доделать проект на Delphi SNUPY Фриланс 3 06.05.2008 15:16
Небольшой курсовой проект (Assembler) slaider Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 10.03.2008 18:59
проект на delphi(ум.матриц) Алиба Помощь студентам 5 23.10.2007 14:02