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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2015, 01:56   #11
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

максимально приближено к турбопаскакалю...

1.png
Код:
program cp_284430;

{$apptype console}

const
  MAX_COUNT = 100;

type
  TArr = array[0..MAX_COUNT - 1] of LongInt;

procedure RandomArray(var X: TArr; const Count: Integer);
var
  Index: Integer;
begin
  for Index:= 0 to Count - 1 do
    X[Index]:= Random(101);
end;

procedure InsertValue(var X: TArr; const Place, Value: LongInt);
var
  Index: Integer;
begin
  for Index:= High(X) downto Place + 1 do
    X[Index]:= X[Index - 1];
  X[Place]:= Value;
end;

procedure OutArray(const X: TArr; const Count: Integer);
var
  Index: Integer;
begin
  for Index:= 0 to Count - 1 do
    begin
      Write(X[Index]: 4);
      if Index mod 11 = 10
        then WriteLn;
    end;

  WriteLn;
  WriteLn;
end;

function Search(var X: TArr; const Template, Count: Integer): Integer;
var
  Index, Found: Integer;
begin
  Found:= 0;
  Index:= 0;

  while (Index < Count + Found) { and (Index < MAX_COUNT) } do
    begin
      if X[Index] = Template
        then begin
               InsertValue(X, Index, Template * 2);
               Inc(Found);
               Inc(Index);
             end;
      Inc(Index);
    end;

  Search:= Found;
end;

var
  A: TArr;
  C, F: Integer;

begin
  Randomize;

  repeat
    Write('Enter the source array length [1..', MAX_COUNT div 2, ']: ');
    ReadLn(C);
  until (C > 0) and (C - 1 < MAX_COUNT div 2);

  RandomArray(A, C);
  WriteLn(' -------- Source: ----------');
  OutArray(A, C);

  Write('Enter the template to search: ');
  ReadLn(F);

  F:= Search(A, F, C);

  WriteLn(' -------- Modified (found: ', F ,' items): ----------');
  OutArray(A, C + F);

  Readln;
end.
всё, я спать.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 02.11.2015 в 01:58.
min@y™ вне форума Ответить с цитированием
Старый 02.11.2015, 08:04   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сформировать массив a[1..n] случайным образом. Определить, содержит ли он заданное число. Если элемент найден, то вставить перед ним элемент вдвое больше найденного.
Обычно такие задачи мы решали так:
Код:
var a:array[1..1000] of integer; j,i,n,v:integer;
begin
 Write('Сколько элементов в массиве? '):readln(n);
 for i:=1 to n do begin
  write('a[',i,']: ');readln(a[i]);
 end;
 Write('Задавай число '):readln(v);
 for i:=1 to n do begin
  if a[i]=v then begin
   for j:=n downto i do a[j+1]:=a[j];
   a[i]:=v;
   inc(n);
  end;
 end;
 
end.
Т.е. просто напросто забором заведомо большего размера под массив.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 08:28   #13
mira95
Пользователь
 
Регистрация: 13.10.2015
Сообщений: 18
Хорошо

Спасибо огромное, да, это что-то поближе к решению, точнее вроде бы оно, сейчас немного поковыряюсь:

немного подкорректировала, почти работает, вот единственное, что напрягает-это то, что элемент не только ставится перед искомым и становится в 2 раза больше, но и сам искомый элемент в новом массиве тоже становится в 2 раза больше, например, если мы нашли число 30 в массиве 40 50 30, то выводит 40 50 60 60,

Код:
program lab2;
uses crt;
var a:array[1..1000] of integer; j,i,n,v:integer;
begin
 Write('Задаем  размерность') ;
 readln(n);
 randomize;
 for i:=1 to n do begin
      a[i]:=random(81)+10;
      writeln(a[i]);

 end;
 Write('Задаем число для поиска ');
 readln(v);
 for i:=1 to n do begin
  if a[i]=v then begin
   for j:=n downto 1 do begin
    a[j+1]:=a[j];
    a[i]:=2*v;
     end;
   n:=n+1;
   for j:=1 to n do
   writeln(a[j]);
  end;
 end;

end.

Последний раз редактировалось Stilet; 02.11.2015 в 10:10.
mira95 вне форума Ответить с цитированием
Старый 02.11.2015, 09:19   #14
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а чо, мой вариант не подошёл?
почему?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.11.2015, 09:27   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Почему, почему. Небось вумный вариант сильно, Мире страшно стало, вот и в игнор
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2015, 09:33   #16
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
вумный вариант сильно
вумный = плохой?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.11.2015, 09:42   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Препод не поверит, что заслуга ТС. Да и ТС возможно не удалось разобраться в том варианте
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2015, 10:13   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
становится в 2 раза больше
Дык у тебя же там умножение приписано
Зачем?
И кстати. У меня там малость лажа:
Код:
 i:=1 while i<=n do begin
  if a[i]=v then begin
   for j:=n downto i do a[j+1]:=a[j];
   a[i]:=v;
   inc(n);
   inc(i);
  end;
  inc(i);
 end;
Вот так надежнее должно быть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 10:47   #19
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Вот так надежнее должно быть.
под копирку
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.11.2015, 17:46   #20
mira95
Пользователь
 
Регистрация: 13.10.2015
Сообщений: 18
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
а чо, мой вариант не подошёл?
почему?
Некоторые из перечисленных вариантов были слишком сильными с применением таких команд, которые мы даже за 2 года работы с Паскалем не проходили Некоторые были близки к нужному ходу решения, парочку я даже брала за основу и лепила из них пробные, в общем, задача решилась, прокатило, спасибо всем
mira95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одномерный массив размера n. Найти максимальный элемент массива среди элементов массива,после первого отрицательного (Паскаль) Элиза12345 Паскаль, Turbo Pascal, PascalABC.NET 7 13.11.2012 16:03
Добавление и удаление элементов из массива строк Alex2391 Общие вопросы Delphi 1 04.03.2011 17:59
Произведение элементов массива [Паскаль] Анна22 Помощь студентам 2 06.12.2010 23:57
Добавление элементов массива в массив JOFRIF Общие вопросы C/C++ 11 04.10.2008 01:47