Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Лысков Игорь Витальевич
Статус: Младший модератор
Рейтинг: 284
∙ повысить рейтинг >>
Micren
Статус: Практикант
Рейтинг: 279
∙ повысить рейтинг >>
_Ayl_
Статус: 4-й класс
Рейтинг: 170
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1325 от 07.06.2009, 01:35
Администратор рассылки: Dr_Andrew, Младший модератор
В рассылке: подписчиков - 627, экспертов - 143
В номере: вопросов - 2, ответов - 2

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 168666: Здравствуйте эксперты, подскажите пожалуйста: Надо обрабатывать большой массив чисел который задается в ручную, как вбив один раз в массив их, грамотно сохранить массив в файл, а затем обратно загрузить его из файла ...


Вопрос № 168735: Здравствуйте, нужна ваша помощь в решении задачи. Задание: Написать программу, которая определяет номер строки квадратной матрицы, сумма элементов которой максимальна....

Вопрос № 168666:

Здравствуйте эксперты, подскажите пожалуйста:
Надо обрабатывать большой массив чисел который задается в ручную, как вбив один раз в массив их, грамотно сохранить массив в файл, а затем обратно загрузить его из файла

Отправлен: 01.06.2009, 13:18
Вопрос задал: Tribak, Студент
Всего ответов: 1
Страница вопроса >>


Отвечает _Ayl_, 4-й класс :
Здравствуйте, Tribak!

Вот пример кода для одномерного массива.
Для многомерных все тоже самое, только для записи/чтения нужно делать вложенные циклы по каждой размерности.
И сохранять построчно.
Например, для 3-хмерного массива цикл записи будет выглядеть так:

void SaveArray (int *** p_arr, int n1, int n2, int n3, char * p_fname) {
...
fprintf (f, "%d\n%d\n%d\n", n1, n2, n3);

for (int k = 0; k < n3; k++)
for (int j = 0; j < n2; j++)
for (int i = 0; i < n1; i++)
fprintf (f, "%d\n", *(*(*(p_arr + i) + j) + k));

...
}
вот исправленный код
Код:
include <stdio.h>
#include <stdlib.h>
#include <malloc. h>

int InputArray (int ** p_arr) {
int n;

printf ("Введите размер массива: ");
scanf ("%d", &n);

(*p_arr) = (int*)malloc (n * sizeof (int));

printf ("Введите элементы массива");
for (int i = 0; i < n; i++) {
printf ("%d --> ", i);
scanf ("%d", (*p_arr) + i);
}

return n;
}

void SaveArray (int * p_arr, int p_n, const char * p_fname) {
FILE * f;

if ((f = fopen (p_fname, "w")) == NULL) {
fprintf (stderr, "Не могу создать файл %s!", p_fname);
exit (-1);
}

fprintf (f, "%d", p_n);
for (int i = 0; i <p_n; i++)
fprintf (f, "%d", *(p_arr + i));

fclose (f);
}

int LoadArray (int **p_arr, const char *p_fname) {
int n;
FILE * f;
if ((f = fopen (p_fname, "r")) == NULL) {
fprintf (stderr, "Не могу открыть файл %s!", p_fname);
exit (-1);
}

fscanf (f, "%d", &n);

(*p_arr) = (int*)malloc (n * sizeof (int));
for (int i = 0; i < n; i++)
{
fscanf (f, "%d", (*p_arr + i));
}

return n;
}

int main () {
int * arr;
int n;

n = InputArray (&arr);
SaveArray (arr, n, "file1.dat");
n = LoadArray (&arr, "file1.dat");
return 0;
}
В данной программе имеется множество ошибок.


-----
∙ Отредактировал: Victor Pyrlik, Модератор
∙ Дата редактирования: 03.06.2009, 18:54 (время московское)

Приложение:

Ответ отправил: _Ayl_, 4-й класс
Ответ отправлен: 01.06.2009, 11:56

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 250154 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Вопрос № 168735:

    Здравствуйте, нужна ваша помощь в решении задачи.
    Задание:
    Написать программу, которая определяет номер строки квадратной матрицы, сумма элементов которой максимальна.

    Отправлен: 02.06.2009, 01:24
    Вопрос задал: Radriges, Посетитель
    Всего ответов: 1
    Страница вопроса >>


    Отвечает Абельхарисов Руслан/Marked One, Практикант :
    Здравствуйте, Radriges.
    Код программы c комментариями:
    Код:
    #include "stdafx.h"
    #include "iostream"

    using namespace std;

    //Функция вычисления суммы элементов строки
    int SumStr(int a[], int n)
    {
    int sum = 0;
    for (int i = 0; i < n; i++)
    sum += a[i];
    return sum;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    //Максимальное кол-во строк и столбцов
    const int MaxN = 10;

    //Выбранные размеры матрицы
    int n;

    //Получаем их
    cout << "N(MaxN = 10): ";
    cin >> n;

    //Создаем матрицу
    int a[MaxN][MaxN];

    //Запоняем её случайными числами от 0 до 50 и выводим вместе с номерами строк
    cout << "Matrix: \n";
    for (int i = 0; i < n; i++)
    {
    cout << "№" << i << ": ";
    for (int j = 0; j < n; j++)
    {
    a[i][j] = rand() % 51;
    printf("% 3d", a[i][j]);
    }
    cout << endl;
    }

    //устанавливаем начальные номер строки с макс. суммой и саму сумму
    int max_str = 0;
    int max_sum = SumStr(a[0], n);
    int tmp_sum;

    //Перебираем все строки
    for (int i = 1; i < n; i++)
    {
    //Вычисляем сумму элементов текущей строки
    tmp_sum = SumStr(a[i], n);

    //Если она менше сохраненной ранее, то...
    if (tmp_sum > max_sum)
    {
    //...сохраняем новые значения
    max_sum = tmp_sum;
    max_str = i;
    }
    }

    //Выводим ответ
    cout << "\nResult: " << max_str << endl;
    system("PAUSE");
    return 0;
    }


    Проверял в Microsoft Visual C++ 2008 Express Edition.
    Удачи!!!

    Ответ отправил: Абельхарисов Руслан/Marked One, Практикант
    Ответ отправлен: 02.06.2009, 16:52

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 250270 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.0 beta от 24.05.2009

    В избранное