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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 21:07   #1
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию Две блок схемы по готовому коду(Одномерные массивы)

на форме расположены два Memo1 И Memo2 в первый выводится рандомный массив из 10 или менее элементов далее эти элементы сортируются и все четные элементы рандомного массива оказываются в конце нового массива который выводится в memo2.(вот так загнул).Спасибо очень большое все работает на ура, я очень сильно извиняюсь но теперь нужно по готовому коду составить блок схемы (их две: первая описана выше, второй алгоритм делает из строки состоящей из символов от 0 до 9 которую мы вводим в edit2 и выводи уже в edit 3)Нагляднее на картинке . Код программы совмещает в себе два алгоритма. Мои пробные блок схемы появятся в период с 20 по 22 мая, но может кто быстрее поможет.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Label1: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    Edit1: TEdit;
    Edit3: TEdit;
    Button3: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
     type
  Mas=array [0..9] of integer;
var
S:Mas;
 Num,Sum:integer;
procedure RanArray (var A:Mas; n:integer);
var
i:integer;
begin
  for i := 0 to n-1 do
    A[i]:=random(50);
end;

procedure OutArray (var A:Mas; n:integer;Lines:TStrings);
var
i:integer;
begin
  Lines.Clear;
  for i := 0 to n-1 do
    Lines.Add(IntToStr(i)+':'#9+IntToStr(A[i]));
end;


         
procedure ExecArray(var A: mas; n: integer);
var i, j, k: integer;
begin
  {j - куда будем помещать чётные элементы}
  j := n;

  // найдём справа первое нечётное число. его и поменяем с чётным, при необходимости
  while (j >= 0) and (A[j] mod 2 = 0) do dec(j);

  i := 0;
  while (i < j) do begin
      // если чётный элемент
    if (a[i] mod 2)=0 then begin
        // поменяем местами a[i] и a[j]
      k := A[j];
      A[j] := A[i];
      A[i] := k;

        // найдём следующий нечётный элемент от конца
      while (j >= 0) and (A[j] mod 2 = 0) do dec(j);
    end;
    inc(i); {перейдём к обрабоке следующего элемента}
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);

 begin
Randomize;
Num:=StrToInt(Edit1.Text);
if Num>10 then
  begin
    Application.MessageBox('Неверное количество элементов','Ошибка',MB_OK);
    Num:=0;
    exit;
  end;
RanArray(S,Num);
OutArray(S,Num,Memo1.Lines);

end;

procedure TForm1.Button3Click(Sender: TObject); // второй алгоритм

var
 s:string; k,i,z,j,c,t:integer;

begin
k:=1;
t:=0;
s:=edit2.text;
i:=1;
z:=0;
J:=0;
c:=0;
for i:=1 to length(s) do
begin
k:=1;
j:=0;
z:=z+1;
       Begin
       if s[i] in ['0'..'9'] then
        t:=(ord(S[i])-ord('0'))
end;
       Begin
     while J<length(s)-z do
     begin
     k:=k*10;
     J:=j+1;
     end;
     c:=c+t*k;
     end;
     end;
edit3.Text:=inttostr(c);
        end ;//конец второго алгоритма.

procedure TForm1.Button2Click(Sender: TObject);
begin

ExecArray(s,Num);
OutArray(s,Num,Memo2.Lines);
end;
end.

end.
Изображения
Тип файла: jpg 2323.jpg (42.4 Кб, 67 просмотров)

Последний раз редактировалось илья001; 19.05.2011 в 15:32.
илья001 вне форума Ответить с цитированием
Старый 18.05.2011, 22:15   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
все четные элементы рандомного массива оказываются в конце нового массива который выводится в memo2
Хм. Что-то я немного не понимаю, или про какой конец нового массива идет речь, если он изначально пустой?
Базиля вне форума Ответить с цитированием
Старый 18.05.2011, 22:39   #3
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию

ну в мемо2 будет 35 45 23 16 28 если судить по картинке, а так в мемо2 будет точно такой же массив как и в мемо1 только все четные элементы будут в конце а нечетные в начале.
илья001 вне форума Ответить с цитированием
Старый 18.05.2011, 22:47   #4
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Ну тогда нужно было написать это сразу) А то не ясно что там должно храниться помимо этих четных элементов
Сейчас попытаемся разобраться.
Базиля вне форума Ответить с цитированием
Старый 18.05.2011, 23:01   #5
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию

как я разобрался мне нужно
Код:
Procedure ExecArray(var A:mas;n:integer);
связать с рандомным массивом и вывести его в мемо2, но само описание ЕxecArray скорее всего не правильное
илья001 вне форума Ответить с цитированием
Старый 19.05.2011, 13:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если порядок расположения чётных - нечётных сохранять не обязательно, тогда
Код:
procedure ExecArray(var A: mas; n: integer);
var i, j, k: integer;
begin
  {j - куда будем помещать чётные элементы}
  j := n;

  // найдём справа первое нечётное число. его и поменяем с чётным, при необходимости
  while (j >= 0) and (A[j] mod 2 = 0) do dec(j);

  i := 0;
  while (i < j) do begin
      // если чётный элемент
    if (a[i] mod 2)=0 then begin
        // поменяем местами a[i] и a[j]
      k := A[j];
      A[j] := A[i];
      A[i] := k;

        // найдём следующий нечётный элемент от конца
      while (j >= 0) and (A[j] mod 2 = 0) do dec(j);
    end;
    inc(i); {перейдём к обрабоке следующего элемента}
  end;
end;
вызов (на кнопке Button2 - "Обработать")
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ExecArray(s, Num);
  OutArray(s, Num, Memo2.Lines);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.05.2011, 16:03   #7
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию

Простите конечно но сегодня я узнал что нужно составить блок схемы по сделанному коду, конечно дело не сложное для многих, но я только начал изучать Delphi в университете а там как вы знаете кость кинут и думай что с ней делать, а в школе был Qbasic и блок-схемы детские, короче я постараюсь что-нибудь сделать на выходных, но может кто и раньше поможет.
илья001 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы матрицы. Все ненулевые элементы массива D(k) расположить в начале массива E(k) и подсчитать их к Вася Маклауд Помощь студентам 0 03.04.2011 17:21
Перенести первые k строк в конец массива, соблюдая порядок их следования. umiko Microsoft Office Excel 1 16.05.2009 08:29
Задачка про массив - Из массива удалить четные элементы, стоящие после максимального Crookers Общие вопросы C/C++ 4 23.09.2008 19:35
Если все элементы матрицы четные, вычислить их произведение. Misho0k Паскаль, Turbo Pascal, PascalABC.NET 7 20.05.2008 22:51