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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2018, 16:52   #1
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
Сообщение [РЕШЕНО] Функция в программе. Помогите пожалуйста найти и исправить ошибки

Здравствуйте! Помогите пожалуйста найти и исправить ошибки.
Создать функцию определяющую среднее значение парных элементов матрицы и минимальное среди непарных элементов матрицы, и с ее помощью обработать три двумерных массива.
Код:
#include <iostream>// подключение заголовочного файла
#include <Windows.h>// подключение заголовочного файла
using namespace std;//подключение пространства имён
float B[100][100] = { 0 }, s, min, k, n, m, z; //обьявление массивов
int i, j;
float example() {
    int i, j;
    min = B[1][1]; //присваивание первого элемента масива как минимальное
    for (i = 0; i < ::n; i++) {  //начало цикла обработки данных
        for (j = 0; j < ::m; j++) {
            if (fmod(B[i][j], 2) == 0) { s = s + B[i][j]; k = k + 1; }  //условие с расчётом для парных элементов
            else {
                if (B[i][j] < min) { min = B[i][j]; }   //условие с расчётом для непарных элементов
            }
        }
    }return 0;
}
int main()// оглавление главной функции
{
    SetConsoleCP(1251);  //установка кодовой таблици для ввода и вывода кирилици в консоли
    SetConsoleOutputCP(1251);   
    for (z = 0; z < 3; z++) {
        cout << "vvedite kol-vo strok i stolbcov" << endl;  //ввод кол-ва строк и столбцов
        cin >> m >> n;
        k = 0; //обнуление кол-ва парных элементов
        s = 0; //обнуление суммы парных элементов
        for (i = 0; i < n; i++) {  //начало цикла ввода масива
            for (j = 0; j < m; j++) {
                cout << "vvedite element masiva [" << i + 1 << "][" << j + 1 << "]" << endl;
                cin >> B[i][j];
            }
        }
        example();
        cout << "sred. arefmet. parnih elementov =" << s / k << "\n" << "minimalnoe iz neparnih =" << min << endl;
    }
    system("pause");
}
Vyacheslav. вне форума Ответить с цитированием
Старый 13.06.2018, 15:43   #2
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

Код:
min = B[1][1]; //присваивание первого элемента масива как минимальное
    for (i = 0; i < ::n; i++) {  //начало цикла обработки данных
        for (j = 0; j < ::m; j++) {
            if (fmod(B[i][j], 2) == 0) { s = s + B[i][j]; k = k + 1; }  //условие с расчётом для парных элементов
            else {
                if (B[i][j] < min) { min = B[i][j]; }   //условие с расчётом для непарных элементов
            }
        }
Ну массив(матрица) начинается с
[0][0]->[0][1]->[0][2]->[0][...100]
[1][0]->[1][1]->[1][2]->[1][...100]
[...100][0]->[1][1]->[1][2]->[1][...100]

не используй глобальные переменные, массивы создавай в мейне и передавай в функцию,сделай еще одну функцию для заполнения массива рандом числами, можешь и в мейне сделать если функцию не можешь написать, а то в ручную каждый раз задолбаешся вводить, зачем ты создал функцию float и возвращаешь 0? сделай тогда void

Последний раз редактировалось Вадим Мошев; 14.06.2018 в 00:32.
2Lui вне форума Ответить с цитированием
Старый 13.06.2018, 23:01   #3
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
По умолчанию

Спасибо. Уже сделал.
Vyacheslav. вне форума Ответить с цитированием
Старый 14.06.2018, 01:01   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Vyacheslav., Напишите, как вы это сделали. Это будет полезно другим читателям.
Вадим Мошев вне форума Ответить с цитированием
Старый 14.06.2018, 05:36   #5
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Цитата:
Сообщение от 2Lui Посмотреть сообщение
не используй глобальные переменные, массивы создавай в мейне и передавай в функцию,
Не согласен. Глобальный массив удобнее. Придётся передавать функции ссылку на массив, если объявить его в 'main'.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 14.06.2018, 23:12   #6
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

Цитата:
Сообщение от jura_k Посмотреть сообщение
Не согласен. Глобальный массив удобнее. Придётся передавать функции ссылку на массив, если объявить его в 'main'.
Может быть удобнее в таких простых программах. А так нет.
2Lui вне форума Ответить с цитированием
Старый 15.06.2018, 14:44   #7
Julik2
Пользователь
 
Регистрация: 06.06.2018
Сообщений: 25
По умолчанию

Цитата:
Сообщение от jura_k Посмотреть сообщение
Не согласен. Глобальный массив удобнее. Придётся передавать функции ссылку на массив, если объявить его в 'main'.
Цитата:
Сообщение от 2Lui Посмотреть сообщение
Может быть удобнее в таких простых программах. А так нет.
Удобно-не-удобно, ромашка что ли
Во-первых, массив в принципе не должен передаваться в функцию.
Логично обрабатывать массив "на уровне" определения массива.
А во-вторых, технически, неразумно через аргументы функции передавать большие структуры по значению, даже если это не перегрузит стек, то явно будет снижение производительности.
(O|O)
Julik2 вне форума Ответить с цитированием
Старый 15.06.2018, 18:45   #8
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

А зачем по значению передавать? указатель передай, где написано что массив не должен передаваться в функцию? Что хочешь то и передаешь,
мне интересно как пишут функции сортировки массива, или что то подобное без передачи массива)

Последний раз редактировалось 2Lui; 15.06.2018 в 18:48.
2Lui вне форума Ответить с цитированием
Старый 15.06.2018, 18:54   #9
Julik2
Пользователь
 
Регистрация: 06.06.2018
Сообщений: 25
По умолчанию Работа с массивами на C

Цитата:
Сообщение от 2Lui Посмотреть сообщение
где написано что массив не должен передаваться в функцию? Что хочешь то и передаешь.
Программист - desireless сущность, хотелками не должен руководствоваться.

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

Функции для массивов с передачей параметров на языке C рациональны только для математических программ или учебных, просто для разделения последовательности операций - ввод, обработка, печать массива.
(O|O)

Последний раз редактировалось Julik2; 16.06.2018 в 12:45.
Julik2 вне форума Ответить с цитированием
Старый 15.06.2018, 19:50   #10
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

Поясните мне почему массив является уникальным объектом? и где тут отсутствует логика при передачи указателя?
Пример тебе нужно что то с массивом сделать, что ты будешь каждый раз писать сортировку? или сделаешь функцию сортировки и просто передашь функции сортировки указатель на массив?
2Lui вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить ошибки в программе bakulan123 Помощь студентам 2 25.11.2017 16:20
Помогите, пожалуйста, исправить ошибки в программе thedgehog Паскаль, Turbo Pascal, PascalABC.NET 1 16.12.2014 10:40
Помогите Исправить Ошибки в Программе Maxim_Burea Помощь студентам 5 26.09.2009 22:54
Помогите исправить ошибки в программе Gambit90 Помощь студентам 1 20.12.2007 16:24