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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2016, 17:42   #1
yana1996
Пользователь
 
Регистрация: 02.12.2015
Сообщений: 38
По умолчанию как сделать в графическое приложения

Помогите пожалуйста переделать этот код в Графическое приложения , чтобы массивы выводился в StringGrid .

Код:
var
  a:array[1..10] of integer;
  N,i,i2,k,k2:Integer;

begin
  Write('N: ');
  Readln(N);

  for i:=1 to N do
   begin
    write(i,' :');
    readln(a[i]);
   end;

   k:=1;
   k2:=2;

  for i:=1 to N do
    for i2:=i+1 to N do
      if abs(a[i]-a[i2])<abs(a[k]-a[k2]) then
        begin
          k:=i;
          k2:=i2;
        end;

  Writeln(k,' ',k2);
end.
yana1996 вне форума Ответить с цитированием
Старый 04.03.2016, 18:11   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от yana1996 Посмотреть сообщение
.. чтобы массивы выводился в StringGrid ...
У вас тут массив ВВодится, а ВЫводится просто одно число k
Что же вам точно надо ?

Вот, то же, что и вас, только со StringGrid и Edit
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
 StringGrid1.Cells[0,0]:='i';
 StringGrid1.Cells[1,0]:='a[i]';
 for i:=1 to 10 do
  StringGrid1.Cells[0,i]:=IntToStr(i);
end;
// .....
procedure TForm1.Button1Click(Sender: TObject);
var N,i,i2,k,k2:Integer;
   a:array[1..10] of integer;
begin
 N:=StrToIntDef(Edit1.Text,0);
 for i:=1 to N do
  a[i]:=StrToIntDef(StringGrid1.Cells[1,i],0);
 k:=1;
 k2:=2;
 for i:=1 to N do
   for i2:=i+1 to N do
     if abs(a[i]-a[i2])<abs(a[k]-a[k2]) then
       begin
        k:=i;
        k2:=i2;
       end;
 Edit2.Text:=IntToStr(k);
end;
type_Oleg вне форума Ответить с цитированием
Старый 04.03.2016, 19:17   #3
yana1996
Пользователь
 
Регистрация: 02.12.2015
Сообщений: 38
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
У вас тут массив ВВодится, а ВЫводится просто одно число k
Что же вам точно надо ?

Вот, то же, что и вас, только со StringGrid и Edit
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
 StringGrid1.Cells[0,0]:='i';
 StringGrid1.Cells[1,0]:='a[i]';
 for i:=1 to 10 do
  StringGrid1.Cells[0,i]:=IntToStr(i);
end;
// .....
procedure TForm1.Button1Click(Sender: TObject);
var N,i,i2,k,k2:Integer;
   a:array[1..10] of integer;
begin
 N:=StrToIntDef(Edit1.Text,0);
 for i:=1 to N do
  a[i]:=StrToIntDef(StringGrid1.Cells[1,i],0);
 k:=1;
 k2:=2;
 for i:=1 to N do
   for i2:=i+1 to N do
     if abs(a[i]-a[i2])<abs(a[k]-a[k2]) then
       begin
        k:=i;
        k2:=i2;
       end;
 Edit2.Text:=IntToStr(k);
end;
У меня ошибка вылазит все сделала правильно
Изображения
Тип файла: jpg 333.jpg (17.9 Кб, 136 просмотров)
yana1996 вне форума Ответить с цитированием
Старый 04.03.2016, 19:31   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

На чем сделали - Delphi, Lazarus или еще что ?
В начале, когда сажаете компонент StringGrid на форму, установите в свойствах этого StringGrid :
RowCount = 11 . То есть максимум 10, как у вас в задании и еще 1 - для заголовка.
ColCount = 2 - для i и a[i]
Еще надо установить возможность редактирования ячеек, если оно по умолчанию False
type_Oleg вне форума Ответить с цитированием
Старый 04.03.2016, 19:48   #5
yana1996
Пользователь
 
Регистрация: 02.12.2015
Сообщений: 38
По умолчанию

Lazzarus
yana1996 вне форума Ответить с цитированием
Старый 04.03.2016, 19:56   #6
yana1996
Пользователь
 
Регистрация: 02.12.2015
Сообщений: 38
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А сможе еще посмотреть вот эту программу она не правильно работает
Условия
Дан массив размера N. Обнулить все его локальные максимумы (то есть числа, большие своих соседей);
выводит одни нули почему ?


Код:
var
a:array[1..7] of integer;
i,n:integer;
 
begin
    stringGrid1.rows[2].clear;
    stringGrid1.rows[1].clear;
    randomize;
    n:=StrToInt(Edit1.Text);
    for i:=1 to n do
       begin
         StringGrid1.Cells[i,1]:=IntToStr(random(100));
       end;
         for i:=1 to N do
       if (a[i-1]<a[i]) and (a[i]>a[i+1])
           then a[i]:=0;
       if a[1] > a[2]
           then a[1]:=0;
       if a[N] > a[N-1]
           then a[N]:=0;
           for i:=1 to N do
         StringGrid1.Cells[i,2]:=intToStr(a[i]);
         end;
yana1996 вне форума Ответить с цитированием
Старый 04.03.2016, 20:13   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от yana1996 Посмотреть сообщение
.. выводит одни нули почему ?
А потому что там и были с самого начала одни нули. Точнее - там неизвестно что было, просто сам Lazarus туда нулей напихал.

Вы ведь никак не инициализировали массив a . В ячейки ввели случайные величины, и всё..

Вот так надо:
Код:
for i:=1 to n do
       begin
         a[i]:=random(100);  //   *** 
         StringGrid1.Cells[i,1]:=IntToStr(a[i]);
       end;
И еще - в другом цикле у вас при i =1 и i=N будет вылазить за пределы массива. Чтобы не вылазило, сделайте от 2 до N-1.

И лучше использовать динамические массивы.
type_Oleg вне форума Ответить с цитированием
Старый 04.03.2016, 21:41   #8
yana1996
Пользователь
 
Регистрация: 02.12.2015
Сообщений: 38
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А потому что там и были с самого начала одни нули. Точнее - там неизвестно что было, просто сам Lazarus туда нулей напихал.

Вы ведь никак не инициализировали массив a . В ячейки ввели случайные величины, и всё..

Вот так надо:
Код:
for i:=1 to n do
       begin
         a[i]:=random(100);  //   *** 
         StringGrid1.Cells[i,1]:=IntToStr(a[i]);
       end;
И еще - в другом цикле у вас при i =1 и i=N будет вылазить за пределы массива. Чтобы не вылазило, сделайте от 2 до N-1.

И лучше использовать динамические массивы.
Спасибо большое все заработало !!!)
yana1996 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графическое приложения yana1996 Общие вопросы Delphi 0 01.03.2016 21:35
Определение запуска FullScreen приложения - как сделать ? антигерой C# (си шарп) 2 30.05.2015 08:48
Как сделать аналог Яндекс.Маркета в виде отдельного приложения? Avatar-Lion Помощь студентам 5 03.04.2013 18:51
Как сделать рестарт приложения ? rasmus_rasmus_87 Помощь студентам 1 26.02.2009 11:45
Как сделать Панель задач для MDI окошек своего приложения? Angel86rus Общие вопросы Delphi 1 04.10.2007 15:15