Важная информация
Показано с 1 по 4 из 4

Тема: Помогите понять задачу в лазарусе, на массивы.

  1. #1 Помогите понять задачу в лазарусе, на массивы. 
    Новичок
    Регистрация
    24.01.2016
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Не как не могу понять сам вопрос задачи и код не получается написать...

    Дан одномерный массив. Найти произведение ненулевых элементов и количество нулевых элементов.

    Я вот до этого момента сделал дальше не получается!

    procedure TForm1.Button1Click(Sender: TObject);
    var n:integer;
    begin
    n:=strtoint(edit1.text);
    stringgrid1.ColCount:=n;
    stringgrid1.Visible:=true;
    end;

    Процедуру BitBtn1.Click беру чтоб программа высчитывала числа введенные в StringGrid
    procedure TForm1.BitBtn1Click(Sender: TObject);

    Заранее благодарю, помогите кто чем сможет..
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Что не понятного то? Массив - это данное, состоящее из нескольких (возможно многих) однотипных данных, называемых элементами, при этом к каждому элементу возможен доступ по имени (или адресу) всего массива и индексу элемента. Так вот, дан массив. Раз поминается произведение элементов, значит элементы - числа. Также сказано, что массив одномерен, это значит, что у каждого элемента ровно один индекс. Числа могут быть равны или не равны нолю. Часть элементов массива нолю и равна, но только часть. Их надо сосчитать, то есть найти их количество. А ещё надо найти произведение остальных элементов. Например, элементы равны 1, 0, 3, 6, 4, 8, 3, 0, 6, 4, тогда надо найти произведение 1*3*6*4*8*3*6*4, а нулевых элементов здесь 2. А вот некоторые аспекты задания и впрямь туманны. Аспекты, а не сам вопрос. Например, требуется ли ввести массив вручную, прочитать из файла, или получить из вызывающего приложения? Если ввести вручную, то как? В таблицу? В Memo? В командную строку? А может быть отбить на пробеле, как на телеграфном ключе? Надиктовать в конце концов войсом?
    Последний раз редактировалось Сионист; 25.01.2016 в 17:23.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    284
    Сказал(а) спасибо
    162
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    Pascal Code:
    1. unit Unit1;
    2.  
    3. {$mode objfpc}{$H+}
    4.  
    5. interface
    6.  
    7. uses
    8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9.   Grids;
    10.  
    11. type
    12.  
    13.   { TForm1 }
    14.  
    15.   TForm1 = class(TForm)
    16.     Button1: TButton;
    17.     Button2: TButton;
    18.     Edit1: TEdit;
    19.     Label1: TLabel;
    20.     Memo1: TMemo;
    21.     StringGrid1: TStringGrid;
    22.     procedure Button1Click(Sender: TObject);
    23.     procedure Button2Click(Sender: TObject);
    24.     procedure FormCreate(Sender: TObject);
    25.   private
    26.     { private declarations }
    27.   public
    28.     { public declarations }
    29.   end;
    30.  
    31. var
    32.   Form1: TForm1;
    33.  
    34. implementation
    35.  
    36. {$R *.lfm}
    37.  
    38. { TForm1 }
    39. var M1:array [1..11] of real;
    40.     maxM1, bk1:longint;
    41. //        обнуление массива
    42. procedure nulM1;
    43. var i:longint;
    44. begin
    45.   for i:=1 to 11 do
    46.     M1[i]:=0;
    47.   maxM1:=0;
    48. end;
    49. //        формируем окно программы
    50. procedure TForm1.FormCreate(Sender: TObject);
    51. var i:longint;
    52. begin
    53.   Form1.Width:=500;
    54.   Form1.Height:=312;
    55.   Form1.Caption:='Вычисление произведения ненулевых элементов массива и количество нулевых элементов';
    56.   Label1.Top:=8;
    57.   Label1.Left:=8;
    58.   Label1.Caption:='Максимальное число элементов массива (от 5 до 11)';
    59.   Edit1.Top:=26;
    60.   Edit1.Left:=8;
    61.   Edit1.Text:='10';
    62.   Button1.Top:=24;
    63.   Button1.Left:=96;
    64.   Button1.Width:=120;
    65.   Button1.Caption:='применить';
    66.   StringGrid1.Top:=56;
    67.   StringGrid1.Left:=8;
    68.   StringGrid1.Width:=208;
    69.   StringGrid1.Height:=248;
    70.   StringGrid1.ColCount:=2;
    71.   StringGrid1.RowCount:=12;
    72.   StringGrid1.Options:=[goEditing]; //разрешаем ввод и редактирование таблицы
    73.   StringGrid1.Cells[0,0]:='№ позиции';
    74.   StringGrid1.Cells[1,0]:='Значение элемента массива';
    75.   for i:=1 to 11 do
    76.     StringGrid1.Cells[0,i]:=inttostr(i);
    77.   Button2.Top:=24;
    78.   Button2.Left:=264;
    79.   Button2.Width:=120;
    80.   Button2.Caption:='вычислить';
    81.   Memo1.Top:=56;
    82.   Memo1.Left:=224;
    83.   Memo1.Height:=248;
    84.   Memo1.Width:=264;
    85.   Memo1.ScrollBars:=ssBoth;
    86.   Memo1.Clear;
    87.   Memo1.Lines.Add('    Результаты вычисления.');
    88.   Memo1.ReadOnly:=true;
    89.   bk1:=0;
    90. end;
    91. //        подготавливаем массив
    92. procedure TForm1.Button1Click(Sender: TObject);
    93. var i:longint;
    94.     sEr1:ansistring;
    95. begin
    96.   nulM1;
    97.   sEr1:='';
    98.   try
    99.     maxM1:=StrToInt(Edit1.Text);
    100.     if  maxM1<5 then sEr1:='  Минимальное количество элементов массива не должно быть меньше 5.';
    101.     if  maxM1>11 then sEr1:='  Максимальное количество элементов массива не должно быть больше 11.';
    102.   except
    103.      sEr1:='  Проверьте правильность задания количества элементов массива.';
    104.   end;
    105.   if sEr1='' then
    106.     begin
    107.       bk1:=1;
    108.       StringGrid1.RowCount:=maxM1+1;
    109.       for i:=1 to maxM1 do
    110.         begin
    111.           StringGrid1.Cells[0,i]:=inttostr(i);
    112.         end;
    113.     end
    114.   else   ShowMessage(sEr1);
    115. end;
    116. //        заполням массив и производим вычисления
    117. procedure TForm1.Button2Click(Sender: TObject);
    118. var i:longint;
    119.     sEr1, sM1:ansistring;
    120.     P:real;    //произведение элементов массива
    121.     N:longint; //кол. нулевых элементов массива
    122. begin
    123.   sEr1:='';
    124.   try
    125.     //заполнение массива данными из таблицы
    126.     for i:=1 to maxM1 do
    127.       M1[i]:=StrToFloat(StringGrid1.Cells[1,i]);
    128.   except
    129.     sEr1:='  Проверьте правильность задания элементов массива.';
    130.   end;
    131.   if bk1=0 then sEr1:='  Нажмите кнопку применить.';
    132.   if sEr1='' then
    133.     begin
    134.       bk1:=0;
    135.       P:=1;
    136.       N:=0;
    137.       // вычисление поставленной задачи
    138.       for i:=1 to maxM1 do
    139.         if M1[i]=0 then
    140.           N:=N+1
    141.         else
    142.           P:=P*M1[i];
    143.       // вывод результатов
    144.       Memo1.Lines.Add('-----');
    145.       Memo1.Lines.Add('Исходные данные:');
    146.       sM1:='[';
    147.       for i:=1 to maxM1 do
    148.         sM1:=sM1+FloatToStr(M1[i])+';';
    149.       sM1:=sM1+']';
    150.       Memo1.Lines.Add(sM1);
    151.       Memo1.Lines.Add('Произведение ненулевых элементов массива ='+FloatToStr(P));
    152.       Memo1.Lines.Add('Количество нулевых элементов массива ='+IntToStr(N));
    153.     end
    154.   else   ShowMessage(sEr1);
    155. end;
    156.  
    157. end.
    Последний раз редактировалось nik_1; 26.01.2016 в 10:25.
    Ответить с цитированием  
     

  4. Пользователь сказал cпасибо:

    >Quiet Snow< (26.01.2016)

  5. #4  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Pascal Code:
    1. if M1[i]=0 then
    2.           N:=N+1
    С типом real так нельзя, проблема в конечной точности представления чисел. Числа с плавающей запятой проверять на равенство надо с некоторой заданной точности, иначе можно очень удивиться, узнав, что 2*2<>4. А точность не задана. Поэтому следует подозревать integer.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  6. Пользователь сказал cпасибо:

    nik_1 (26.01.2016)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ребят, помогите понять суть программы.
    от gernsback в разделе Turbo Pascal
    Ответов: 9
    Последнее сообщение: 14.03.2012, 03:21
  2. Помогите решить задачу
    от Дмитрий 1993 в разделе QBasic
    Ответов: 3
    Последнее сообщение: 24.01.2012, 17:00
  3. Помогите понять программу
    от Black Doomer в разделе QBasic
    Ответов: 1
    Последнее сообщение: 15.12.2011, 18:12
  4. Ответов: 5
    Последнее сообщение: 10.04.2011, 21:20
  5. Ответов: 6
    Последнее сообщение: 09.12.2010, 18:40
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •