adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
Паскаль
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
GUCHI
АнониМ
СообщениеДобавлено: Ср 11-06-08 : 13-11    Заголовок сообщения: Паскаль Ответить с цитатой

Надо срочно програмку написать на паскале для зачета. Помогите кто может! Ап стену друже!
Задача:
Из последовательности отрицательных чисел выбрать меньшие -8. Если таких нет то выдать сообщение.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
not_available
Эксперт
Предупреждений : 1
СообщениеДобавлено: Ср 11-06-08 : 14-41    Заголовок сообщения: Ответить с цитатой

достаточно простая задача. делается за 5-10 минут Wink
Код:
var
  _numbers: array[1..10] of Integer;
  _flag: Boolean;
  i: Byte;
begin
  Randomize;
  _flag := False;
  for I := 1 to 10 do
    begin
      _numbers[I] := 0 - Random(20);
      if _numbers[I] < -8 then
      _flag := True;
    end;
  if _flag then
  begin
    for I := 1 to 10 do
      if _numbers[I] < -8 then
      Write(_numbers[I],' ');
  end
  else
  Write('нет таких чисел');
  Readln;
end.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
BS
Эксперт
СообщениеДобавлено: Вс 15-06-08 : 15-48    Заголовок сообщения: Ответить с цитатой

Без заполнения массива 3 минуты Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора   Номер ICQ
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 24-09-08 : 14-01    Заголовок сообщения: Ответить с цитатой

GUCHI писал(а):
Из последовательности отрицательных чисел выбрать меньшие -8. Если таких нет то выдать сообщение.

9й класс. Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
NeoN
Гуру
СообщениеДобавлено: Ср 24-09-08 : 14-43    Заголовок сообщения: Ответить с цитатой

offtop
просто любопытно, где такие зачеты?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Отправить e-mail Jabber ID Номер ICQ
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 24-09-08 : 14-48    Заголовок сообщения: Ответить с цитатой

Хм...в ВКИ возможно... Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
dlnsk
Гуру
СообщениеДобавлено: Ср 24-09-08 : 23-15    Заголовок сообщения: Ответить с цитатой

Вообще-то препод может придраться к такому решению, т.к. наличие чисел меньше -8 определяется не в момент поиска, а в момент заполнения массива...
...я бы не зачел. Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Чт 25-09-08 : 15-46    Заголовок сообщения: Ответить с цитатой

Ну можно так, например:
Код:

var
  a: array[1..10] of Integer;
  i,x: integer;
begin
  randomize;
  x:=0;
  for i:=1 to 10 do
     begin
     a[i]:=  0-random(25);
     write (a[i],' ');
     end;
  for i:=1 to 10 do
     if a[i]<-8 then
     begin
     writeln (a[i]);
     x:=x+1;
     end;
  if x=0 then
     writeln ('takih chisel net');
  readln;
end.

 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
not_available
Эксперт
Предупреждений : 1
СообщениеДобавлено: Чт 25-09-08 : 16-44    Заголовок сообщения: Ответить с цитатой

ДобрыйФей
мой вариант будет быстрей работать Smile например на
Код:
_flag := True;
в цикле уйдет меньше процессорного времени, нежеле на бессмысленное сложение
Код:
x:=x+1;

dlnsk
наоборот так лучше, если чисел -8 не было, то и искать ничего не нужно, цикл не запускаем = экономим процессорное время )))
я так написал, как будто недавно i8086 появился Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Чт 25-09-08 : 16-49    Заголовок сообщения: Ответить с цитатой

not_available писал(а):
dlnsk
наоборот так лучше, если чисел -8 не было, то и искать ничего не нужно, цикл не запускаем = экономим процессорное время )))

У парнишки другое задание было просто.
not_available писал(а):
мой вариант будет быстрей работать

Мой вариант проще и понятней. Легче будет преподу объяснить что там и где, если что. Smile
not_available писал(а):
процессорного времени

Это роли не играет. Там разница несущественная. Smile Хотя, конечно, в идеале его стоит экономить... Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
not_available
Эксперт
Предупреждений : 1
СообщениеДобавлено: Чт 25-09-08 : 17-03    Заголовок сообщения: Ответить с цитатой

вот более оптимизированный вариант. версия 2.0. всего 1 цикл и 2 проверки. Быстрее помоему только на asm можно сделать Smile Very Happy
Код:
var
  _numbers: array[1..10] of Integer;
  _flag: Boolean;
  i: Byte;
begin
  Randomize;
  _flag := False;
  for i := 1 to 10 do
    begin
      _numbers[i] := 0 - Random(20);
      if _numbers[i] < -8 then
        begin
          Write(_numbers[i],' ');
          _flag := True
        end;
    end;
  if not _flag then
    Write('нет таких чисел');
  Readln;
end.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
dlnsk
Гуру
СообщениеДобавлено: Чт 25-09-08 : 21-48    Заголовок сообщения: Ответить с цитатой

not_available
Дело не в том, чтобы быстрее было, а в том, чтобы соответствовало заданию.

Если в задании сказано
GUCHI писал(а):
Из последовательности отрицательных чисел

то тут два варианта:
1. Эта последовательность заранее имеется (массив), тогда предполагается что он уже заполнен данными (заполнять его или нет в задании не сказано и к решению задачи не относится, а значит если хочется заполнить, то делать это нужно заранее, но ни как не в том же цикле, где поиск).
2. Последовательности заранее нет, но тогда задача решается вообще без участия массива.

Короче, опять тебе незачет... Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора  
not_available
Эксперт
Предупреждений : 1
СообщениеДобавлено: Чт 25-09-08 : 22-10    Заголовок сообщения: Ответить с цитатой

dlnsk
Так я его и заполняю заранее, перед проверкой элемента.
Что сначала заполнить последовательно массив, а потом его отдельным циклом крутить в поиске нужных значений.
Что заполнить элемент массива и сразу его проверить. Разницы для юзера никакой. Но во втором варианте это будет происходить быстрее.
Массив-то просто указатель на область памяти, и нет разницы при последовательном доступе к элементам когда они там запишутся. При случайном доступе, да, тогда сначала надо было его заполнить полностью, а потом проверять.
Последовательность есть? Есть. Есть задача, есть цель, есть результат. Зачет я сам себе ставлю Very Happy
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
dlnsk
Гуру
СообщениеДобавлено: Пт 26-09-08 : 02-18    Заголовок сообщения: Ответить с цитатой

not_available
Любая задача подразумевает ее применение где-либо. Поэтому любой алгоритм правильно было бы требовать оформлять в виде процедуры/функции (если конечно этот материал уже пройден). Соответственно любая функция в идеале должна быть универсальна, что не наблюдается в твоем примере... Wink
Формально ответ у тебя будет правильным, но с точки зрения здравого смысла не все в порядке... Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора  
not_available
Эксперт
Предупреждений : 1
СообщениеДобавлено: Пт 26-09-08 : 10-37    Заголовок сообщения: Ответить с цитатой

dlnsk
Ну это само собой, для вуз'овской задачки начального уровня сойдет. Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
$vetlii
Гуру
СообщениеДобавлено: Пт 17-10-08 : 20-55    Заголовок сообщения: Ответить с цитатой

Цитата:
Быстрее помоему только на asm можно сделать


...считаю, что так работать будет ещё эффективней)
Код:
var
  _numbers: array[1..10] of Integer;
  _flag, flag2: Boolean;
  i: Byte;
begin
  Randomize;
  flag2 := True;
  _flag := False;
  for i := 1 to 10 do
    begin
      _numbers[i] := 0 - Random(20);
      if _numbers[i] < -8 then
        begin
          Write(_numbers[i],' ');
          If flag2 then
            begin
              _flag := True;
              flag2 := False;
            end;
        end;
    end;
  if not _flag then
    Write('нет таких чисел');
  Readln;
end.


...теперь всего один раз запоминается, что есть число <-8 (а не перезаписывается при каждом выполнении условия)...
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
not_available
Эксперт
Предупреждений : 1
СообщениеДобавлено: Пт 17-10-08 : 21-07    Заголовок сообщения: Ответить с цитатой

$vetlii
ладно)))
тоже самое, но экономим 1 байт памяти Very Happy
Код:
var
  _numbers: array[1..10] of Integer;
  _flag: Boolean;
  i: Byte;
begin
  Randomize;
  _flag := False;
  for i := 1 to 10 do
    begin
      _numbers[i] := 0 - Random(20);
      if _numbers[i] < -8 then
        begin
          Write(_numbers[i],' ');
          if not _flag then
            _flag := True;
        end;
    end;
  if not _flag then
    Write('нет таких чисел');
  Readln;
end.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы