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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2012, 10:22   #1
destroy_
Пользователь
 
Регистрация: 27.10.2012
Сообщений: 13
По умолчанию |Delphi|-как отсортировать и вывести в стринггрид

Задание прикрепил, сам что то не доганяю, помогите правильно ли делаю, как отсортировать и вывести не понимаю...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 amas:array of array of integer;
 bmas:array of integer;
 sr:real;
 i,j,summ:integer;
 temp:double;
begin
 setlength(bmas,Sedit.Value);
  SetLength(amas,Sedit.Value);
 for i:=0 to sedit.value-1 do
  for j:=0 to sedit.value-1 do
    amas[i,j]:=strToInt(aGrid.Cells[i,j]);
      for i:=0 to sedit.value-1 do
   begin
   amas[i]:=0;
     for j:=0 to sedit.value-1 do
      summ:= 0;
        summ:=summ+amas[i,j];
          sr:=summ/sedit.value;
       end;


  


   for i:=0 to sedit.Value-1 do
     bmas.cells[i,0]:=floattostr(amas[i,j]);
      SetLength(amas,0,0);
        SetLength(bmas,0,0);
   end;
Изображения
Тип файла: jpg задача.jpg (48.1 Кб, 132 просмотров)

Последний раз редактировалось destroy_; 27.10.2012 в 12:19.
destroy_ вне форума Ответить с цитированием
Старый 27.10.2012, 12:57   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Давайте сначала определимся, каков массив amas. В задании он одномерный, у Вас двумерный.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.10.2012, 14:15   #3
destroy_
Пользователь
 
Регистрация: 27.10.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Давайте сначала определимся, каков массив amas. В задании он одномерный, у Вас двумерный.
не принципиально, главное чтобы задача выполняло свои действия
destroy_ вне форума Ответить с цитированием
Старый 27.10.2012, 15:22   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Очень даже принципиально
Все же остановимся на одномерном.
И что же не получается?
Пока не будем касаться вопроса сортировки и вывода.
В чем заключается проблема при получении массива из стринггрида?

Кстати, форматируйте код сразу правильно, а то сейчас он выглядит ужасно, Вам самим не понятно где, что происходит.
Ну ладно, не буду мучать - вот получение массива из стринггрида:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  amas, bmas: array of integer;
  i, n: integer;
begin
  n := strToInt(Sedit.Text);
  setlength(bmas, n);
  SetLength(amas, n);
  for i := 0 to n - 1 do
    amas[i] := strToInt(aGrid.Cells[i, 0]);
  {остальные действия}
  SetLength(amas, 0);
  SetLength(bmas, 0);
end;
Кстати, я не знаю, что за свойство value у sedit (у меня нет компонента с таким свойством), поэтому заменил на то, что есть
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.10.2012 в 15:36.
BDA вне форума Ответить с цитированием
Старый 27.10.2012, 17:22   #5
destroy_
Пользователь
 
Регистрация: 27.10.2012
Сообщений: 13
По умолчанию

[CODE]
Кстати, я не знаю, что за свойство value у sedit (у меня нет компонента с таким свойством), поэтому заменил на то, что есть
В чем заключается проблема при получении массива из стринггрида?[/QUOTE]
value свойство у spinedit

да в этом проблем нет.
Проблема в выводе в другой массив да ещё и по возрастанию...

Последний раз редактировалось destroy_; 27.10.2012 в 17:28.
destroy_ вне форума Ответить с цитированием
Старый 27.10.2012, 22:15   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Эх, как это я прошляпил Ваше сообщение...
Идем дальше. Как считать среднее арифметическое?
Это, наверное, тоже для Вас не проблема?
Правда, в вышеприведенном коде я не могу проследить логики его нахождения

Допустим, нашли среднее арифметическое.
Далее проходим еще раз по массиву и сравниваем со средним арифметическим.
Для удобства (необходимости), добавляем переменную j, которая указывает на первый свободный элемент массива B. В цикле при сравнении вставляем рассматриваемый элемент в массив B и увеличиваем j.

Затем задаем новый размер массива B (j - как раз новый размер) и сортируем любым известным способом (хоть пузырьком).

Вообще, я сделаю "плохо" для Вас, написав решение, но, т.к. у меня улучшилось настроение (решил задачку, которую не мог решить 13 дней, ну конечно не без помощи друзей):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  amas, bmas: array of integer;
  i, n, j, tmp: integer;
  sr: double;
begin
  n := Sedit.Value;
  if n = 0 then
    exit;
  SetLength(bmas, n);
  SetLength(amas, n);
  for i := 0 to n - 1 do
    amas[i] := strToInt(aGrid.Cells[i, 0]);
  sr := 0;
  for i := 0 to n - 1 do
    sr := sr + amas[i];
  sr := sr / n;
  j := 0;
  for i := 0 to n - 1 do
    if amas[i] > sr then
    begin
      bmas[j] := amas[i];
      inc(j);
    end;
  SetLength(bmas, j);
  n := j;
  for i := 0 to n - 2 do
    for j := i + 1 to n - 1 do
      if bmas[i] > bmas[j] then
      begin
        tmp := bmas[i];
        bmas[i] := bmas[j];
        bmas[j] := tmp;
      end; 
  for i := 0 to n - 1 do
    Grid.Cells[i, 1] := intTostr(bmas[i]);
  SetLength(amas, 0);
  SetLength(bmas, 0);
end;
Потестите
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.10.2012 в 22:43.
BDA вне форума Ответить с цитированием
Старый 28.10.2012, 09:21   #7
destroy_
Пользователь
 
Регистрация: 27.10.2012
Сообщений: 13
По умолчанию

Цитата:
Потестите
работает не совсем так как надо, она находит только 1но число больше среднего арифметического и выводит его (хотя сам при проверке делаю так что их было не меньше 2х)

Последний раз редактировалось destroy_; 28.10.2012 в 13:09.
destroy_ вне форума Ответить с цитированием
Старый 28.10.2012, 12:45   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Во-первых, не цитируйте целиком сообщение - можно получить штраф.
Во-вторых, проверил у себя - все работает, ищите ошибку у себя.
Ввел:
Цитата:
количество 6
1 2 3 4 5 6
Ответ:
Цитата:
4 5 6
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.10.2012, 13:14   #9
destroy_
Пользователь
 
Регистрация: 27.10.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Во-первых, не цитируйте целиком сообщение - можно получить штраф.
Во-вторых, проверил у себя - все работает, ищите ошибку у себя.
Ввел:

Ответ:
во первых: исправил буду знать
во вторых: хз чё такое... поищу
destroy_ вне форума Ответить с цитированием
Старый 28.10.2012, 13:47   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Выведите среднее арифметическое и j куда-нибудь, чтобы понять, те ли они получились.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задать двумерный массив, вывести на экран отдельно главную и побочную диагонали, отсортировать по убыванию методом пузырька CookieStar Помощь студентам 6 12.12.2011 07:44
отсортировать массив случайных чисел и вывести на экран. PAREN_DEFO Помощь студентам 1 27.05.2011 17:17
как сложить числа в стринггрид? TotKtoNado БД в Delphi 0 25.04.2011 16:58
Вывести рандом двумерного массива в стринггрид. Space91 Общие вопросы Delphi 6 26.05.2010 15:46
Как записи в СтрингГрид сохранять в ДБ файл Alex_76 Помощь студентам 2 17.06.2008 15:55