Помощь - Поиск - Пользователи - Календарь
Полная версия: Ошибка в random
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Jaxx
Мне нужно создать одномерный массив случайного размера в диапазоне от 50 до 200 элементов, заполнить его случайными числами, и произвести некоторые операции с этим массивом. Написал следующее:

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

int i;
int f=0;
int N= random(150)+50;
int* arr;
arr=(int*)malloc(N*sizeof(int));


randomize();

cout << "Nachalnyi massiv \n";

cout << "\n";


for (i=0; i<N; i++)
{
arr[i]=random(100)-50;
cout << " " << arr[i];
}


cout << "\n";
cout << "\n";

cout << "Nachalnye indeksy neuvelichivayuschihsya posledovatelnostei: " << "\n";
cout << "\n";

for (i=0; i<N; i++)
{
if (arr[i]>arr[i+1]) { if (!f) cout << i << " "; f=1; }
else f=0;
}

return 0;
}


Числа генерируются нормально, но размер массива почему-то всегда равен 50. В чем проблема? И кстати, после нескольких запусков программы из IDE куда-то деваются около 800 Мб виртуальнойй памяти...
klem4
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

srand(time(NULL)); // <---------------------
int i;
int f=0;
int N = 50 + rand() % 150; // <--------------------
int* arr;
arr=(int*)malloc(N*sizeof(int));




cout << "Nachalnyi massiv \n";

cout << "\n";


for (i=0; i<N; i++)
{
arr[i]= rand()%100 - 50; // <-------------------
cout << " " << arr[i];
}


cout << "\n";
cout << "\n";

cout << "Nachalnye indeksy neuvelichivayuschihsya posledovatelnostei: " << "\n";
cout << "\n";

for (i=0; i<N; i++)
{
if (arr[i]>arr[i+1]) { if (!f) cout << i << " "; f=1; }
else f=0;
}

free(arr); // <--------------------
return 0;
}
Jaxx
Е-мае... Только что заметил дополнительное условие: "В тексте программы запрещается использовать операцию индексации". А как тогда быть с циклом:

 for (i=0; i<N; i++)
{
if (arr[i]>arr[i+1]) { if (!f) cout << i << " "; f=1; }
else f=0;
}

Мне нужно вывести начальные индексы всех неувеличивающихся последовательностей массива... Как это сделать без индексации, я что-то не совсем понимаю.
volvo
Цитата
после нескольких запусков программы из IDE куда-то деваются около 800 Мб виртуальнойй памяти...
Чем проверяешь? TaskManager-ом? Забудь... освобождением памяти занимается ОС, ты должен только убедиться, что твоя программа не имеет Memory Leaks (heapwalk-ом проходи по куче и смотри, сколько памяти было свободно перед началом работы программы, а сколько - после free)

Добавлено через 1 мин.
А операция индексации заменяется работой с указателем на текущий элемент массива...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.