Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для amastudent
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51

Функция с рандомайзером внутри цикла работает некорректно

30.11.2019, 19:44. Показов 595. Ответов 2

Студворк — интернет-сервис помощи студентам
У меня есть функция RandomRoute, которая генерирует случайную последовательность в заданном диапазоне.
Сама по себе работает корректно, но если в главной функции я вызываю ее в цикле, то она выдает одну и ту же последовательность, единственное - отличается последняя последовательность. Пример работы прикреплен.
Объясните, пожалуйста, где я что-то упускаю из вида.
Заранее благодарю

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function RandomRoute (n : integer; a : TMatrix) : List<integer>;
var
  k,i,j,iRand, pathLength: integer;
  flag : boolean;
  tempList : List<integer> := new List<integer>;
Begin
  randomize; 
   for k := 0 to (n-1) do
   begin
    repeat
      iRand := random(0, (n-1));
      if (tempList.Contains(iRand)) then       
      begin
        flag := false;
        //Writeln('iRand = ', iRand);
        //Writeln('Не подходит');
      end
      else
      begin
        flag := true;
        tempList.Add(iRand);
      end;            
    until (flag);
   end;   
  tempList.Add(tempList[0]);    
  pathLength := 0;
  for var z : integer := 0 to (n-1) do
  begin
    i := tempList[z]; j := tempList[z+1];
    pathLength := pathLength + a[i,j];
  end;
   tempList.Add(pathLength);
   //Writeln('Случайный путь: ', tempList);
   Result := tempList;
End;
Главная функция:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
BEGIN
  var randRoute : List<integer> := new List<integer>;
  var minRoute : List<integer> := new List<integer>;
  routeLength := 0; 
     
      
  writeln ('Введите количество городов:');
  readln (n); // количество вершин
  writeln ('Введите точку отправления?');
  readln (firstcity);
  MatFullRandom(n, mass); 
  massCopy := mass;
  
  DispMat (n, mass);
  GreedyAlg(firstcity, n, mass);
 
  Writeln ('СЛУЧАЙНЫЕ ПУТИ:');
 
  randRoute := RandomRoute(n, massCopy);
  minRoute := randRoute;
  for var z : integer := 0 to 10 do
    begin      
      randRoute := RandomRoute(n, massCopy);
      if (randRoute.Last < minRoute.Last) then minRoute := randRoute;
      writeln('Случайный путь ', randRoute);    
    end;
 
  writeln('Наилучший из случайных: ',minRoute);
  MatrixRandomRoute(n, minRoute, massCopy, massRed);
  DispMat(n, MassRed);
  DrawGraph(n, mass);
 
END.
Миниатюры
Функция с рандомайзером внутри цикла работает некорректно  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2019, 19:44
Ответы с готовыми решениями:

Не работает IF-ELSE внутри цикла FOR
Здравствуйте, столкнулся с проблемой: внутри цикла FOR конструкция IF-ELSE отрабатывает и при ложном условии и при верном. Возможно, есть...

Функция работает некорректно
Добрый день! Сделал функцию, которая должна удалить определённый символ в определённом тексте. Принцип работы: функция конкатенирует всё,...

Некорректно работает функция
Функция Small_S должна находить короткое слово в строке str, а она почему-то выводит первое слово! Помогите решить проблему, буду очень...

2
 Аватар для amastudent
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
01.12.2019, 01:57  [ТС]
Решение найдено.
Randomize нужно вынести из подпрограммы в главную функцию.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
01.12.2019, 04:00
Randomize вообще вызывать не надо. Он сам вызывается когда вы запускаете программу.
Есть смысл вызывать Randomize только с конкретным значением, если хотите чтоб программа выдавала одинаковые значения при каждом запуске.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2019, 04:00
Помогаю со студенческими работами здесь

Функция некорректно работает
Функция компилируется, но постоянно один и тот же ответ. y=0000... Где допущена ошибка? #include &lt;stdio.h&gt; #include...

Функция работает некорректно
написал функцию,возвращающий нажатую клавишу: char func2(){ if(_kbhit()){ char c; c=_getch(); return c; } return 0; ...

Функция работает некорректно
Здравствуйте! Задача, написать функцию myfuc по заданному вызову ее int main(int argc, char *argv) { char *s = NULL; ...

Функция работает некорректно
#include &lt;iostream&gt; using namespace std; short fill(double*, short); const short size = 5; int main() { double array;...

Не работает счётчик внутри цикла
Привожу примерный код батника @echo off setlocal enabledelayedexpansion for %%A in (*.csv) do ( ...... for /f...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 31.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 30.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru