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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2011, 09:54   #1
AsiaDelphi
 
Регистрация: 13.07.2011
Сообщений: 7
По умолчанию Создать массив в дельфи по правилу

Даны натуральные числа n,Z1,...Zn. Сформировать массив W1,...Wn по правилу: W1=Z1*Z1,если Z1 кратно 3; W1=Z1/3,если Z1 кратно 5; или W1=cosZ1 в остальных случаях.
AsiaDelphi вне форума Ответить с цитированием
Старый 13.07.2011, 10:19   #2
TEHb
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 32
По умолчанию

мля...
объявляешь динамический массив, определяеш размер Z1..Zn, делаеш проверку:
Код:
if Z[i] mod 3 = 0 then
  W[i]:=Z[i]*Z[i]
else
  if Z[i] mod 5 = 0 then
    w[i]:=Z[i]/3
  else
    w[i]:=Cos(Z[i]);
незабуть Z1..Zn в массив запихать.
TEHb вне форума Ответить с цитированием
Старый 13.07.2011, 10:35   #3
AsiaDelphi
 
Регистрация: 13.07.2011
Сообщений: 7
По умолчанию

Это то я как раз знаю.А массивы я создавать не умею
AsiaDelphi вне форума Ответить с цитированием
Старый 13.07.2011, 11:00   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну динамические массивы тут совсем не обязательны. можно и статическими обойтись.

пример со статическими массивами:
Код:
const N = 10; {в массиве задано 10 чисел}
var 
  Z : array[1..N] of integer;
  W : array[1..N] of double;
  i : integer;
...
begin
  WriteLn('Введите элементы массива Z: ');
  for i:=1 to N do begin
    Write(i,'-й элемент: ');
    Readln(Z[i]);
  end;

  {формирование массива W }
  for i:=1 to N do begin
     if Z[i] mod 3 = 0 then
            W[i]:=Z[i]*Z[i]
     else
       if Z[i] mod 5 = 0 then
          w[i]:=Z[i]/3
       else
          w[i]:=Cos(Z[i]);
  end;
...

пример с динамическими массивами:
Код:
var 
  N : integer;
  Z : array of integer;
  W : array of double;
  i : integer;
...
begin
   repeat
     WriteLn('Введите количество элементов в массиве (N) : ');
     Readln(N);
     if N<1 then 
        WriteLn('Меньше одного элемента не может быть!');  
   until N>0;

   {выделение памяти под массивы Z и W}
   SetLength(Z, N);
   SetLength(W, N);

  WriteLn('Введите элементы массива Z: ');
  for i:=0 to N-1 do begin
....
  дальше всё по тексту вышепреведённой программы, не забывая, что динамические массивы имеют индексацию от нуля, 
поэтому 1-й элемент имеет индекс 0 Z[0], W[0],
а последний элемент массива (в данном случае) имеет индекс N-1
.....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2011, 11:13   #5
AsiaDelphi
 
Регистрация: 13.07.2011
Сообщений: 7
По умолчанию

Спасибо большое))
AsiaDelphi вне форума Ответить с цитированием
Старый 13.07.2011, 12:34   #6
AsiaDelphi
 
Регистрация: 13.07.2011
Сообщений: 7
По умолчанию

правда она не хочет работать(А массив должен на форме выводиться?
AsiaDelphi вне форума Ответить с цитированием
Старый 13.07.2011, 13:04   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
правда она не хочет работать(А массив должен на форме выводиться?
нет, разумеется.

Запомните. Программа (ну по крайней мере корректная ) всегда делает ровно то, что в неё заложил программист.

Поэтому, никакого вывода массива (тем более на форме) в данном коде просто напросто нет. Если Вам нужно вывести массив - значит это нужно написать (запрограммировать).

вывести содержимое массива W можно, например так:
Код:
for i:=Low(W) to High(W) do
   Write(W[i]:0:7,'  ');
Ну и ещё.
теперь хочу отдельно отметить фразу "на форме выводиться"...
Дело в том, что программы под Win32, написанные на Delphi могут быть принципиально двух видов:
консольные ( в тексте программы задаётся директива {$APPTYPE CONSOLE}
GUI (это программа Win32 со стандартной(ыми) формой(ами) VCL)

в консольной программе допустимы операции работы с консолью:
Write/WriteLn и Read/ReadLn
т.е. можно что-то выдать на экран, либо что-то прочитать (ввести) с консольного ввода.

В программе с использованием форм данные операторы НЕДОПУСТИМЫ (точнее Read/Write можно использовать исключительно для чтения/записи из файлов)!

приведённые мною примеры - это как раз таки КОНСОЛЬНЫЕ (ввод/вывод там осуществляется на стандартную консоль). Если нужно приложение с формами, то операции ввода и вывода нужно убирать, и заменять на работу со оконными элементами управления TEdit, TLabel, TStringGrid и т.д. и т.п....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2011, 13:38   #8
AsiaDelphi
 
Регистрация: 13.07.2011
Сообщений: 7
По умолчанию

Ну да,я создала форму.А можно вот так ввести массив z:
For i:=1 to n do
Z[i]:=strtofloat(StringGrid1.cells[i])

У меня он почему то останавливается на скобке Z[ и пишет "(" expected but "[" found
AsiaDelphi вне форума Ответить с цитированием
Старый 13.07.2011, 14:04   #9
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
For i:=1 to n do
Z[i]:=strtofloat(StringGrid1.cells[i, 0])
psycho-coder вне форума Ответить с цитированием
Старый 13.07.2011, 14:15   #10
AsiaDelphi
 
Регистрация: 13.07.2011
Сообщений: 7
По умолчанию

Вот что у меня получилось,но он не проходит скобку "["
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  const N=10;
 type
 Z=array[1..N] of integer;
  W =array[1..N] of double;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 const N = 10;
var
  i: integer;
begin


  for i:=1 to N do begin
    Z[i]:=strtofloat(stringGrid1.Cells[i,0]);
  end;


  for i:=1 to N do begin
     if Z[i] mod 3=0 then
            W[i]:=Z[i]*Z[i]
     else
       if Z[i] mod 5 = 0 then
          w[i]:=Z[i]/3
       else
          w[i]:=Cos(Z[i]);
  end;



end.
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.07.2011 в 14:50.
AsiaDelphi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать двоичный файл, записать n целых чисел. Из файла создать массив, элементы числа-палиндромы (на C) Simak63 Помощь студентам 0 30.03.2011 21:06
Заполнить массив n*n по правилу Albert341 Общие вопросы Delphi 5 27.12.2010 10:34
Как создать txt файл в Дельфи? quarty Помощь студентам 4 30.10.2010 14:26
массив в Дельфи Vredna-92 Помощь студентам 0 03.06.2010 23:49
Как создать собственную ДЛЛ на Дельфи SkyM@n Помощь студентам 5 02.12.2007 07:27