Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Масив със случайни числа, С?

Featured Replies

Здравейте!

 

Имам задача, която включва изискването да запълня масив с цели случайни числа. Преподавано ми е, че това се прави с функция srand, но не съм виждала как се прави и не мога да разбера как да я приложа. Бихте ли ми помогнали да заменя rand със srand?

#include <stdio.h>

#include <stdlib.h>

#define SIZE 100

int main(int argc, char** argv)

{

int array;

int count = 0;

int el = 0;

printf("Въведете броя на елементите в масива: ");

scanf("%d", &count);

/* Генериране на масива. */

for (el = 0; el < count; el++)

{

array[el] = rand() % 100;

}

/* Визуализиране на масива. */

for (el= 0; el <count; el++)

printf("m [%d] = %d\n", el, array[el]);

return 0;

}

преди генериране на масива се пуска нещо такова:

#include <time.h>


time_t t;
srand((unsigned) time(&t));

За да се инициализира генератора на случайни числа. В противен случай всеки път ще генерира една и съща поредица

  • Автор

Благодаря! : )
 

Приложих това, но получавам поредица от еднакви случайни числа. Нещо бъркам.

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

#define SIZE 100
#include <time.h>

int main(int argc, char** argv)
{
int array[size];
int count = 0;
int el = 0;



printf("Въведете броя на елементите в масива: ");
scanf("%d", &count);

/* Генериране на масива. */
for (el = 0; el < count; el++)
{
time_t t;
srand( (unsigned) time(&t));
array[el] = rand() % 100;

return 0;

}
Въведете броя на елементите в масива: 4
m [0] = 77
m [1] = 77
m [2] = 77
m [3] = 77
 
Сортиране по възходящ ред:
array[0]=77
array[1]=77
array[2]=77
array[3]=77
 

 

Благодаря! : )

 

Приложих това, но получавам поредица от еднакви случайни числа. Нещо бъркам.

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

#define SIZE 100
#include <time.h>

int main(int argc, char** argv)
{
int array[size];
int count = 0;
int el = 0;



printf("Въведете броя на елементите в масива: ");
scanf("%d", &count);

/* Генериране на масива. */
for (el = 0; el < count; el++)
{
time_t t;
srand( (unsigned) time(&t));
array[el] = rand() % 100;

return 0;

}
Въведете броя на елементите в масива: 4
m [0] = 77
m [1] = 77
m [2] = 77
m [3] = 77
 
Сортиране по възходящ ред:
array[0]=77
array[1]=77
array[2]=77
array[3]=77

 

Нали ви казах преди цикъла, вие къде сте го сложили?

srand( (unsigned) time(&t));
for (el = 0; el < count; el++)
{
time_t t;

array[el] = rand() % 100;

return 0;

}
  • Автор

Направих това:

 /* Генериране на масива. */
    srand( (unsigned) time(&t));
    for (el = 0; el < count; el++)
    {
        time_t t;
        array[el] = rand() % 100;        
    }

Това е резултатът:

 

 

Въведете броя на елементите в масива: 3


Сортиране по възходящ ред:


RUN SUCCESSFUL (total time: 2s)
 

 

Направих това:

 /* Генериране на масива. */
    srand( (unsigned) time(&t));
    for (el = 0; el < count; el++)
    {
        time_t t;
        array[el] = rand() % 100;        
    }

Това е резултатът:

 

 

Въведете броя на елементите в масива: 3


Сортиране по възходящ ред:


RUN SUCCESSFUL (total time: 2s)

 

АМи отпечатайте ги :)

  • Автор

Нищо не излиза, просто е празно. : ) 

 

Само с rand работи, с парчето което добавям излиза празно.

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

#define SIZE 100

#include <time.h>


int main(int argc, char** argv) 
{
    int array[SIZE];
    int count = 0;
    int el = 0;
    int j = 0;
    int t = 0;
           
    
    printf("Въведете броя на елементите в масива: ");
    scanf("%d", &count);
    
    /* Генериране на масива. */
    srand( (unsigned) time(&t));
    for (el = 0; el < count; el++)
    {
        time_t t;
        array[el] = rand() % 100;        
    }
    
    /* Визуализиране на масива. */
    for (el= 0; el <count; el++)        
    printf("array [%d] = %d\n", el, array[el]);
            
    /* Сортиране на масива във възходящ ред. */
    for( el = 0 ; el < (count - 1); el++ ) 
    {
        for(j = el+1 ; j < count ; j++)
        {
            if( array[el] > array[j])
            {
                t = array[el];
                array[el] = array[j];
                array[j] = t;
            }
        }
    }   
    
    /* Визуализиране на резултатите. */
    printf("\nСортиране по възходящ ред:\n");
    for( el=0 ; el < count; el++)
    {
        printf("array[%d]=%d\n", el, array[el]);
    }
        
    
    return 0;
}
  • Автор

Здравейте, capnemo!

 

 

Извинете, че Ви отговарям едва сега, тези дни пътувах.

int t = 0

 касае променлива t, която използвам при сортирането и е част от кода, който написах преди да се обърна към Вас.

 

Сега, след като ми показахте този проблем, промених името на променливата и резултатите отново се отпечатват. За съжаление, продължавам да получавам псевдослучайни числа - при всяко стартиране излизат едни и същи.

 


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

#define SIZE 100


int main(int argc, char** argv) 
{
    int array[SIZE];
    int count = 0;
    int el = 0;
    int j = 0;
    int empty = 0;
           
    
    printf("Въведете броя на елементите в масива: ");
    scanf("%d", &count);
    
    /* Генериране на масива. */
   // srand( (unsigned) time(&t));
    for (el = 0; el < count; el++)
    {
        time_t t;
        array[el] = rand() % 100;        
    }
    
    /* Визуализиране на масива. */
    for (el= 0; el <count; el++)        
    printf("array [%d] = %d\n", el, array[el]);
            
    /* Сортиране на масива във възходящ ред. */
    for( el = 0 ; el < (count - 1); el++ ) 
    {
        for(j = el+1 ; j < count ; j++)
        {
            if( array[el] > array[j])
            {
                empty = array[el];
                array[el] = array[j];
                array[j] = empty;
            }
        }
    }   
    
    /* Визуализиране на резултатите. */
    printf("\nСортиране по възходящ ред:\n");
    for( el=0 ; el < count; el++)
    {
        printf("array[%d]=%d\n", el, array[el]);
    }
        
    
    return 0;
}

 

Аз се опитах да ви покажа че трябва да имате променлива от конкретен тип за да можете да инициализирате генератора на случайни числа. Какво не стана ясно?


И преправете този код:

int empty = 0;

    printf("Въведете броя на елементите в масива: ");
    scanf("%d", &count);
    
    /* Генериране на масива. */
   // srand( (unsigned) time(&t));
    for (el = 0; el < count; el++)
    {
        time_t t;
        array[el] = rand() % 100;        
    }

Да стане:

int empty = 0;
time_t ttt;

    printf("Въведете броя на елементите в масива: ");
    scanf("%d", &count);
    
    /* Генериране на масива. */
    srand( (unsigned) time(&ttt));
    for (el = 0; el < count; el++)
    {
        array[el] = rand() % 100;        
    }
  • Автор

Сега видях, че съм сложила коментар:

// srand( (unsigned) time(&t));

Когато махна коментара, не се компилира. Изписва ми, че имам недеклариран "t". Не зная как да го декларирам това t. Въобще не разбирам какво означава това: 

time(&t)

О, сега видях какво ми обяснихте. Оправих го и вече работи точно. Много Ви благодаря! : )

 

Аз се занимавам с програмиране от месец и нещо. Явно все още нещата трудно ми стават ясно.

 

 

Отново Ви благодаря! : )

Сега видях, че съм сложила коментар:

// srand( (unsigned) time(&t));

Когато махна коментара, не се компилира. Изписва ми, че имам недеклариран "t". Не зная как да го декларирам това t. Въобще не разбирам какво означава това: 

time(&t)

О, сега видях какво ми обяснихте. Оправих го и вече работи точно. Много Ви благодаря! : )

 

Аз се занимавам с програмиране от месец и нещо. Явно все още нещата трудно ми стават ясно.

 

 

Отново Ви благодаря! : )

Радвам се че можах да помогна. И имам една препоръка: четете внимателно условието и това, което другите ви пишат. Обикновено няма време да се пише с детайлни обяснения защо нещо е така, но вие ако го прочетете внимателно можете да го осмислите :)

Най-лесния начин е изобщо да не се ползва променлива, а генератора

на псевдослучайни числа са се инициализира със srand(time(NULL))

  • Автор

Най-лесния начин е изобщо да не се ползва променлива, а генератора

на псевдослучайни числа са се инициализира със srand(time(NULL))

 

Здравейте, ined!

 

Нямам представа какво означава генератора на псевдослучайни числа да се инициализира със srand(time(NULL)). Дали бих могла да прочета някъде повече за това?

Най-лесния начин е изобщо да не се ползва променлива, а генератора

на псевдослучайни числа са се инициализира със srand(time(NULL))

Това също мисля става, но с променлива кода става малко по-структуриран и самообясняващ се :)

Здравейте, ined!

 

Нямам представа какво означава генератора на псевдослучайни числа да се инициализира със srand(time(NULL)). Дали бих могла да прочета някъде повече за това?

ТОва означава следното:

time(NULL) връща указател към структура тип време в която записва текущото астрономическо време

srand инициализира генератор на случайни числа с това по-горе и ви дава възможност следващото извикване на rand да ви даде някаква различна от стандартната псевдослучайна величина

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.