Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88

Вывод матрицы в текстовый файл

21.04.2015, 15:49. Показов 2770. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, ребята. Пытаюсь сделать прототип матрицы смежности графа, но имею недостаточно знаний. Нашел здесь заготовку, которую следует модифицировать. В этом нужна ваша помощь. Во-первых, на данном этапе не могу записать получившуюся матрицу в txt файл. И так пробовал, и этак, все тщетно. Файл создается, но он пуст. Так же интересует как можно сделать так, чтобы в полученной матрице, скажем, 60% процентов значений занулялись, а остальные 40 заполнялись в рандомном порядке. Заранее вам спасибо. Помощь нужна срочная ибо скоро сдача курсача, выручайте!

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>//printf, scanf
#include <stdlib.h>//malloc, free, system
#include <time.h>//time
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
//рекомендую сразу писать функцию чисти памяти
void freeArr(int ** arr, int nRows)
{
    if(arr)
    {
        while(0 < nRows)
        {
            if(arr[nRows - 1])
                free(arr[(nRows - 1)]);//Вот так чистим память отведенную под строку
            nRows = nRows - 1;
        }
    }
    arr = NULL;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int nRows;//Будет содержать в себе число строк нашей матрицы
    int nCols;//Будет содержать в себе число столбцов нашей матрицы
    int **arr;//Указатель на нашу матрицу
    int vMax; //Будет содержать в себе предел генерируемых чисел
    int i,j;
    FILE *file;
    time_t t;//Будет содержать в себе текущее время
    //t необходимо для генерации не повторяющихся от запуска к запуску программы
    //от запуска к запуску программы случайных чисел
    srand(time(&t));//Инициализируем начальное значение генератора случ чисел
    //значением текущего времени, так достигается генерация 
    //не повторяющихся последовательностей - это ОЧЕНЬ важно
 
    file=fopen("OUT.txt","w+");
 
    printf("Введите число строк в матрице    : ");scanf("%d",&nRows);
    printf("Введите число столбцов в матрице : ");scanf("%d",&nCols);
    printf("Введите предел сгенерир элементов: ");scanf("%d",&vMax);
    //Теперь пробуем выделить память под указатели на строки матрицы
    //в записи ниже всё важно особенно размер выделяемого блока nRows*sizeof(int *)!
    //Также рекомендую всегда проверять а выделилась ли память
    if(!(arr = (int **)malloc(nRows*sizeof(int *))))
        printf("Ошибка выделения памяти под указатели на строки\n");
    else
    for(i = 0; i < nRows; i++)
    {
        //Теперь пробуем выделять память под элементы i-ой строки
        //Обращу внимания что для указателей на строки рзмер блока
        //был nRows*sizeof(int *) для элементов же строки nCols*sizeof(int)!
        if(!(arr[i] = (int *)malloc(nCols*sizeof(int))))
        {
            printf("Ошибка выделения памяти под элементы строки\n");
            break;//Сразу же прекращаем генерацию
        }
        else//Если же всё ок инициализируем элементы матрицы и печатаем их на экран
        for(j = 0; j < nCols; j++)
            printf("%d ",(arr[i][j] = rand()%vMax));
        printf("\n");
    }
    //Если всё сделали правильно у нас на экране наша матрица
 
 
    fclose(file);
 
    system("pause");//стоп-точка перед выходом
    freeArr(arr, nRows);//чистим память перед завершением программы
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2015, 15:49
Ответы с готовыми решениями:

Вывод в текстовый файл
Даны сведения о книгах, поступивших в библиотеку: ФИО автора, название книги, название издательства, год издания, дата поступления книги в...

Вывод в текстовый файл
Помогите доделать программу, нужно что бы все что в консоли отображается выводилось в текстовый файл. Заранее спасибо) #include...

Вывод в текстовый файл
Подскажите, пожему не получается вывести в файл все элементы двоичного дерева поиска, а только первый? void Book::Save() { FILE *f; ...

17
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 16:51
Лучший ответ Сообщение было отмечено anton_zenit как решение

Решение

C++
1
2
3
4
5
6
7
        for(j = 0; j < nCols; j++)
               {
            printf("%d ",(arr[i][j] = rand()%vMax));
            fprintf(file, "%d ", arr[i][j]);
               }
        printf("\n");
        fprintf(file, "\n");
1
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
21.04.2015, 16:59  [ТС]
Одна проблема решена, большое спасибо nmcf. Если кто бы мог подсказать как быть со вторым вопросом? Действительно, мы получаем случайные числа в матрице, но как сделать так, чтобы большинство было нулевых элементов в матрице,а остальные брались случайно, то есть так как есть? Как внести вот эту вероятность в код?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 17:07
Ну пройдись повторно по матрице после заполнения, используй дополнительный rand() от 1...100. Если 1...60 - присвоить ноль, 61-100 - не изменять.
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
21.04.2015, 17:14  [ТС]
насколько я понял, вы имеете в виду значение в явном виде, а тут немного другое, требуется процентное соотношение. да и 40/60 тоже достаточно условно)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 17:26
Процентное соотношение и получится за счёт сдвига диапазона.
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
21.04.2015, 17:29  [ТС]
Возможно я наглею, но не мог бы помочь с этим куском кода? Заранее спасибо
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 17:37
C++
1
2
3
4
    for(i = 0; i < nRows; i++)
    {
        for(j = 0; j < nCols; j++) if (rand() % 100 < 60) arr[i][j] = 0;
    }
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
21.04.2015, 18:15  [ТС]
увы, упорно не хочет генерировать так как нужно

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    else//Если же всё ок инициализируем элементы матрицы и печатаем их на экран
                for(j = 0; j < nCols; j++)
                {
                    printf("%d ",(arr[i][j] = rand()%vMax));
                    fprintf(file, "%d ", arr[i][j]);
                }
                for(i = 0; i < nRows; i++)
                {
                    for(j = 0; j < nCols; j++) if (rand() % 100 < 60) arr[i][j] = 0;
                }
                printf("\n");
                fprintf(file, "\n");
        }
добавил цикл, но компьютер упорно шлет лесом
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 18:26
Лучший ответ Сообщение было отмечено anton_zenit как решение

Решение

C++
1
2
3
4
5
6
7
                for(j = 0; j < nCols; j++)
                {
                    printf("%d ",(arr[i][j] = rand() % 100 < 60 ? 0 : rand()%vMax));
                    fprintf(file, "%d ", arr[i][j]);
                }
                printf("\n");
                fprintf(file, "\n");
1
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
21.04.2015, 20:27  [ТС]
Окончательно тебя замучаю, дружище. Помоги еще с одним ньюансом, смотри, какой цикл нужно вставить в код с условием, что если количество строк и столбцов равно, то есть матрица выходит квадратной, то в ней нужно занулить все элементы по диагонали. Заранее спасибо. Кидани свой номер сотового в лс, придумаю как отблагодарить

Добавлено через 57 минут
по главной диагонали)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.04.2015, 21:13
Лучший ответ Сообщение было отмечено anton_zenit как решение

Решение

C++
1
2
3
4
5
6
7
8
9
                for(j = 0; j < nCols; j++)
                {
                    if (i == j && nCols == nRows) arr[i][j] = 0;
                    else arr[i][j] = rand() % 100 < 60 ? 0 : rand()%vMax);
                    printf("%d ", arr[i][j]);
                    fprintf(file, "%d ", arr[i][j]);
                }
                printf("\n");
                fprintf(file, "\n");
1
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
22.04.2015, 17:25  [ТС]
А как вывести на экран сначала количества строк, что у нас имеется в матрице, а только затем весь данный массив? Например, чтобы и на экран, и на запись в текстовый файл шло:

5
0 3 0 1 7
0 0 6 1 4
3 6 0 3 0
7 8 9 0 0
0 7 2 1 0
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.04.2015, 17:57
Ну добавь вывод этого числа перед циклами.
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
22.04.2015, 18:03  [ТС]
nmcf, увы, но в таком случае число выводится в консоль, но не пишется в файл.

C++
1
2
3
4
5
6
7
8
printf("Введите число строк в матрице : ");scanf("%d",&nRows);
    printf("Введите число столбцов в матрице : ");scanf("%d",&nCols);
    printf("Введите предел сгенерир элементов: ");scanf("%d",&vMax);
    cout<< nRows << endl;
    //Теперь пробуем выделить память под указатели на строки матрицы
    //в записи ниже всё важно особенно размер выделяемого блока nRows*sizeof(int *)!
    //Также рекомендую всегда проверять а выделилась ли память
    if(!(arr = (int **)malloc(nRows*sizeof(int *))))
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.04.2015, 18:08
Ну а где запись в файл-то? fprintf() добавь для nRows.
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 88
22.04.2015, 18:22  [ТС]
nmcf, Полная безысходность
C++
1
2
3
printf("%d ", arr[i][j]);
            fprintf(file,"%d ", nRows);
            fprintf(file, "%d ", arr[i][j]);
Добавлено через 9 минут
nmcf, выручай, товарищ, без тебя как без рук
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.04.2015, 18:54
Вот перед этим:
C++
1
for(i = 0; i < nRows; i++)
вставь
C++
1
fprintf(file,"%d\n", nRows);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.04.2015, 18:54
Помогаю со студенческими работами здесь

Вывод ошибок в текстовый файл
Здравствуйте, допустим при компиляции у меня выскакивают ошибки как можно код этих ошибок записать в файл? При чем должно быть 2 колонки...

Вывод строки в текстовый файл
Вместо строки появляется нечто вроде 25d3fe4 Подскажите пожалуйста, в чем ошибка? ofstream fout; ...

Вывод данных в текстовый файл
В программе получил несколько динамических массивов. Необоходимо вывести их в текстовый файл (мне потом в экселе графики по этим данным...

Вывод текста в отдельный текстовый файл
Нужно вывести в файл пункты 4(case 4) и 5(case 5). #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace...

Вывод значений комплексного сигнала в текстовый файл
Необходимо вывести значения вещественной и мнимой части комплексного сигнала в текстовый файл. Самое сложное не могу понять что хотят...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.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