Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dimoncheg
10 / 10 / 2
Регистрация: 18.10.2012
Сообщений: 220
#1

Генератор случайных чисел для записи в бинарный файл - C++

02.05.2014, 18:55. Просмотров 1395. Ответов 3
Метки нет (Все метки)

Здравствуйте. Есть задача:

В файле содержатся числа. Сформировать квадратную матрицу из 25 последних чисел файла. Посчитать сумму элементов над главной диагональю полученной матрицы.

Исходный файл формировать программно. Количество элементов исходного файла неизвестно.

Так вот. Файлик бинарный. В него рандомим числа. Вот код нашего рандома:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
 
int main() {
    srand((unsigned)time(NULL));
    FILE* f = fopen("in.bin", "w");
    int n = 25 + rand()%25;
    for (int i = 0; i < n; i++) {
        int a = 0 + rand()%10;
        fwrite(&a, sizeof(int), 1, f);
    printf("\n");
        system("pause");
}
 
}
Вот сама программа:

C++
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
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    FILE* f = fopen("in.bin", "r");
    int n = 5;
    int a[n][n];
    if (f == NULL) {
        printf("Can't open file\n");
        return 0;
    }
    int i = 0;// счетчик считанных чисел
    while (!feof(f) && i < 25) {// пока не конец файла и не дошли до 25го элемента
        int x;// переменная, в которую будем считывать число из файла
        fread(&x, sizeof(int), 1, f);// считываем 1 элемент размером sizeof(int) из файла, связанного с указателем f в память по адресу переменной x
        a[i/5][i%5] = x;// задаем нужный элемент массива данным значением
        i++;// увеличиваем счетчик символов
    }
    printf("\n");
    int sum = 0;// сумма элементов над главной диагональю
    for (int i = 0; i < n; i++) {// проход по массиву
        for (int j = 0; j < n; j++) {
            printf("%d ", a[i][j]);// вывод элемента
            if (i < j) {// если элемент выше главной диагонали
                sum +=a[i][j];// прибавляем его к сумме
            }
        }
        printf("\n");
    }
    printf("\nsum = %d\n", sum);// выводим сумму
    system("pause");
}
Можете объяснить принцип работы этого генератора (первый код), а то я его немного не понимаю? Не понимаю смысл переменной "a" и не понимаю почему нужно после выполнения несколько раз жать любую клавишу для продолжения. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 18:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генератор случайных чисел для записи в бинарный файл (C++):

Заполнить файл f целыми числами, используя генератор случайных чисел - C++
Заполнить файл f целыми числами, используя генератор случайных чисел. Из файла f получить файл g, исключив повторные вхождения чисел....

Создать бинарный файл, заполненный двоичными кодами N случайных четырёхзначных чётных чисел - C++
Создать бинарный файл, заполненый двоичными кодами N случайных четырехзначных парных чисел. N вводим из клавиатуры

Бинарные файлы. Написать функцию, которая записывает в бинарный файл N случайных вещественных чисел в указанном диапазоне - C++
Добрый день! Подскажите пожалуйста! Генерирую рандомное кол-во вещественных чисел, и записываю их в бинарный файл, после чего читаю...

Генератор случайных чисел - C++
Еще одна тема о генераторе. Только вопрос, на который я пока не нашел ответа в других темах. Как сгенерировать случайное число в двух или...

Генератор случайных чисел (с UI) - C++
Я создал простенький генератор случайных чисел с Пользовательским Интерфейсом (GUI). Добавлено через 21 минуту Актуальна :)

Генератор случайных чисел - C++
Здравствуйте, для программы мне требуется генератор, который будет задавать рандомно число, но данное число должно быть с определенными...

3
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
02.05.2014, 19:23 #2
Сначала инициализируется генератор случайных чисел (srand).
Потом файл открывается для записи.
Генерируется случайное количество чисел - n.
Потом в цикле генерируется n случайных чисел. Случайно число записывается в переменную а, а переменная а записывается в файл. Затем выводится символ новой строки и ожидается ввод. Конец цикла.

Не по теме:

Имхо, ты даже ни разу не попытался разобрать этот код.

0
dimoncheg
10 / 10 / 2
Регистрация: 18.10.2012
Сообщений: 220
02.05.2014, 19:55  [ТС] #3
Цитата Сообщение от Керра Посмотреть сообщение
Случайно число записывается в переменную а, а переменная а записывается в файл. Затем выводится символ новой строки и ожидается ввод.
Это меня и интересовало, спасибо. С кодом пытался разобраться и не раз.
0
MayaNash
03.05.2014, 11:39     Генератор случайных чисел для записи в бинарный файл
  #4

Не по теме:

Цитата Сообщение от dimoncheg Посмотреть сообщение
С кодом пытался разобраться и не раз.
Тут 10 строчек, четко видно где используется переменная а, и скобочки тоже видимые. Удивительно.
Ладненько, на эту тему лучше закончить.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 11:39
Привет! Вот еще темы с ответами:

Генератор случайных чисел - C++
Добрый день!У меня есть код #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; #include &lt;ctime&gt; char randSym() { ...

генератор случайных чисел - C++
Всем доброго времени суток, вот решил написать генератор чисел длины 768 бит, все отлично вроде и работает но только проблема в том что...

Генератор случайных чисел - C++
Помогите написать программу, которая генерировала бы случайные числа мультипликативным конгруэнтным методом. Нужно использовать такое...

Генератор случайных чисел - C++
Вот написал программу, которая генерирует матрицу 9*9. В каждой строке - от 1 до 9, не повторяются В каждом стобце - то же самое. ...


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

Или воспользуйтесь поиском по форуму:
4
03.05.2014, 11:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru