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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2009, 13:43   #1
SkApY
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 11
Восклицание Pascal---Delphi---Контролка

Нужна помощь,через неделю контрольная.

1)Заполнить StringGrid случайными числами от -10 до 10 (дробными).
2)Посчитать количество столбцов в которых нет отриц чисел.
3)Найти столбец в котором самая большая сумма эллементов и вывести позицию столбца.

Заранее огромное спасибо
SkApY вне форума Ответить с цитированием
Старый 04.12.2009, 14:42   #2
Aniker
 
Регистрация: 23.04.2009
Сообщений: 5
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const RowMax = 100; // нужное число строк
      ColMax = 100; // нужное число столбцов
      CMax = 4; // цифр после запятой

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.RowCount:=RowMax;
StringGrid1.ColCount:=ColMax;
Randomize;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i,j,sum:integer;
t,s,msum,pos:extended;
begin
for i:=0 to ColMax do StringGrid1.Cells[i,0]:=inttostr(i);
for i:=0 to RowMax do StringGrid1.Cells[0,i]:=inttostr(i);

// заполнение случайными дробными числами от -10 до 10
Timer1.Enabled:=false;
for i:=1 to RowMax do // проходим все ячейки
 for j:=1 to ColMax do
  begin
  t:=random(round(20*exp(CMax*ln(10))-10*exp(CMax*ln(10)))); // генерация нужного случайного числа.
  if random(2) = 1 then t:=+t else t:=-t; // генерация случайного знака.
  t:=t / exp(CMax*ln(10));  // выделение цифр после запятой
  StringGrid1.Cells[i,j]:=floattostr(t); // вносим в таблицу
  end;

// ищем все столбцы без отрицательных чисел.
sum:=0;
for i:=1 to ColMax do // перебираем столюцы
begin
 t:=0;
 for j:=1 to RowMax do
  if StrToFloat(StringGrid1.Cells[i,j])<0 then t:=1; // если находим отрицательное число, то не входит
 if t=0 then inc(sum); // иначе увеличиваем число столбцов.
end;
ShowMessage(inttostr(sum)); // выводим кол-во стоблцов без отр. чисел.

// находим столбец с максимальной суммой элементов
msum:=low(integer);
for i:=1 to ColMax do // перебираем все столбцы
begin
s:=0; // сумма элементов текущего.
for j:=1 to RowMax do // перебираем все строки столбца
begin
t:=StrToFloat(StringGrid1.Cells[i,j]);
s:=s+t; // добавляем найденное значение к сумме
end;
if s> msum then // если сумма больше текущей максимальной, то
begin
msum := s; // запоминаем сумму и ее позицию
pos:=i;
end;
end; 
ShowMessage('Максимальная сумма = '+floattostr(msum)+'; Номер столбца = '+floattostr(pos)); // выводим
end;

end.

Последний раз редактировалось Aniker; 04.12.2009 в 16:20.
Aniker вне форума Ответить с цитированием
Старый 04.12.2009, 15:48   #3
SkApY
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 11
По умолчанию

Мне это нужно как 3 отдельные задачи. И я половину из написанного не понял (((
SkApY вне форума Ответить с цитированием
Старый 04.12.2009, 16:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И я половину из написанного не понял
Значит что-то ты понимаешь.
Вот покажи что ты уже сделал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.12.2009, 20:19   #5
Aniker
 
Регистрация: 23.04.2009
Сообщений: 5
По умолчанию

Добавил комментарии к коду и разбил его на части.
дальше уж сам ))
Aniker вне форума Ответить с цитированием
Старый 04.12.2009, 20:48   #6
SkApY
Пользователь
 
Регистрация: 08.11.2009
Сообщений: 11
По умолчанию

t:=random(round(20*exp(CMax*ln(10))-10*exp(CMax*ln(10)))); // генерация нужного случайного числа.
if random(2) = 1 then t:=+t else t:=-t; // генерация случайного знака.
t:=t / exp(CMax*ln(10)); // выделение цифр после запятой

Вот это можно как-то проще записать?Просто мы ещё этого не проходили(
SkApY вне форума Ответить с цитированием
Старый 05.12.2009, 12:09   #7
Aniker
 
Регистрация: 23.04.2009
Сообщений: 5
По умолчанию

Код:
t:=random(10*10000); // генерация нужного случайного числа.
if random(2) = 1 then t:=+t else t:=-t; // генерация случайного знака.
t:=t / 10000; // выделение цифр после запятой
Aniker вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi и pascal Skorpion07 Помощь студентам 6 06.05.2010 21:11
Pascal--->Delphi. MoxFalder Помощь студентам 15 05.11.2008 23:05
О Pascal/Delphi DM_bite Свободное общение 1 12.09.2008 17:18
Из Pascal в Delphi Nivil Помощь студентам 9 08.12.2007 18:58