Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2017, 00:39   #1
Александр121
Форумчанин
 
Регистрация: 17.09.2017
Сообщений: 265
По умолчанию расскажите как работает программа интересны некоторые моменты - C (СИ)

Код:
Зачем нужны вот эти строки я так понимаю это динамический массив? почему он повторяется постоянно?
 (int**)malloc(n*sizeof(int*))
(int*)malloc(n*sizeof(int));
(int*)malloc(n*sizeof(int));
 
второй вопрос зачем в выводе ,i+1,sum[i]); // i+1 зачем?
тут зачем ,sum[mx],mx+1);//,mx+1 зачем?


Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>   //для time(0)
int  main()
{
setlocale(0, "");
    srand(time(0)); // для инициализации разных последовательностей псевдослучайных чисел
    int n = 3,i,j;
    int **a = (int**)malloc(n*sizeof(int*));
    for ( i = 0; i<n; i++)
    {
        a[i] = (int*)malloc(n*sizeof(int)); // заполнение
        for (int j = 0; j<n; j++)  // матрицы заполненой
            a[i][j] = rand()%10-rand()%10; // рандомными числами

    }
    for (i = 0; i<n; i++)
    {
        for ( j = 0; j<n; j++)
            printf("%d ",a[i][j]); // вывод матррицы
        printf("\n");
    }
    int *sum = (int*)malloc(n*sizeof(int));
    for (int i = 0; i<n; i++)
    {
        sum[i] = 0;
        for (int j = 0; j<n; j++)
        {
            if (a[i][j]>0) // тока положительные
                sum[i]+=a[i][j]; // вычесление суммы
        }
    }
    int mx = 0;
    for (int i = 0; i<n; i++)
    {
        if (sum[i]>sum[mx]) // вычесление наибольшей суммы
            mx = i; //
        printf("Сумма положительных элементов в строке с номером %d = %d\n",i+1,sum[i]);
    }
    printf("Наибольшая сумма равна %d, она находится в строке %d\n",sum[mx],mx+1);

    for (int i = 0; i<n; i++)
        free(a[i]); // освобождние памяти
    free(a);
    free(sum);
}
Александр121 вне форума Ответить с цитированием
Старый 24.12.2017, 00:43   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что двумерный массив это массив массивов.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.12.2017, 00:54   #3
Александр121
Форумчанин
 
Регистрация: 17.09.2017
Сообщений: 265
По умолчанию

второй вопрос зачем в выводе ,i+1,sum[i]); // i+1 зачем?
тут зачем ,sum[mx],mx+1);//,mx+1 зачем?
вот про это что скажите?
Александр121 вне форума Ответить с цитированием
Старый 24.12.2017, 09:20   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Да откройте уже книжку и включите чуть голову. В С++ массивы нумеруются с 0, а у вас пользователю выводит с 1.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расскажите как работает этот цикл? Александр121 Общие вопросы C/C++ 3 23.12.2017 11:27
Расскажите как это работает Студент27 Общие вопросы C/C++ 5 16.03.2013 14:04
расскажите как изменить адрес sanich123 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 18.09.2012 13:21
Расскажите как сделать! Fenzzz Помощь студентам 6 31.08.2011 16:35
[Проблемка] Не могу понять некоторые моменты в borland c++ alex4718 Общие вопросы C/C++ 2 20.03.2010 10:56