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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2014, 00:20   #1
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию Двумерный массив

Ребята, помогите решить задание.

Посчитать произведение элементов в тех колонках массива, в которых нет отрицательных элементов, вывести отдельно произведение разных столбцов.

мой код такой, но он ничерта не работает. и идеи тоже закончились.
Код:
int res = 1,count=0;
	for (j = 0; j < m; j++)
	{
		for (i = 0; i < n; i++)
		{
			if (arr[i][j] > 0)
			{
				count++;
			}
			if (count == n)
			{
				res *= arr[i][j];
				break;
			}
			else
				if (count != n)
				{
				cout << "В колонке есть отрицательное или ноль";
				}
		}
	}
	cout << res;
	delete[] arr;
	cout << endl;
	return 0;
}

Последний раз редактировалось Stilet; 26.12.2014 в 08:23.
NYork вне форума Ответить с цитированием
Старый 26.12.2014, 06:13   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,603
По умолчанию

Примерно так
Код:
int** a; // требуется выделить память и заполнить массив
//<...>
int n,m; // размерности массива
int i,j; // итераторы;
int f; // флаговая переменная, показывающая, есть ли отрицательные в колонке
int p; // произведение по колонке

for(i=0;i<n;i++) // по столбцу
{
f = 0; // флаг наличия отрицательных устанавливается в нуль
p = 1; // произведение на единицу
for(j=0;j<m;j++) // по строкам
{
if ( a[i][j] < 0) // если отрицательное
f = 1; // флаг в единицу устанавливается
p *= a[i][j]; // вычисляется произведение (если проверять флаг, то можно сразу переходить к следующей
 колонке не вычисляя до конца). прерывание цикла осуществляется оператором continue
}
printf("%d\n", p); // вывод произведения по колонке

}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось Stilet; 26.12.2014 в 08:23.
challengerr вне форума Ответить с цитированием
Старый 26.12.2014, 12:01   #3
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию

Тоже не правильно работает, на экран выводит общее произведение + если в столбце есть число <=0, программа его не исключает.

int res = 1,count=0;
int f; // флаговая переменная, показывающая, есть ли отрицательные в колонке
for (j = 0; j<m; j++) // по столбцу
{
f = 0; // флаг наличия отрицательных устанавливается в нуль // произведение на единицу
for (i = 0; i<n; i++) // по строкам
{
if (arr[i][j] < 0) // если отрицательное
f = 1; // флаг в единицу устанавливается
else if (f == 0)
res *= arr[i][j]; // вычисляется произведение
}
cout << "\nПроизведение: " <<res; // вывод произведения по колонке
}
Изображения
Тип файла: jpg massiv.jpg (7.7 Кб, 151 просмотров)
Тип файла: jpg massiv2.jpg (8.7 Кб, 134 просмотров)
NYork вне форума Ответить с цитированием
Старый 26.12.2014, 12:06   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

res перед вторым for нужно "обнулять" (присваивать 1). Идёт накопление результата.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.12.2014, 18:58   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Вот реализация задачи, общий принцип такой.

Код:
package ru.bugrimov;

public class Main {
    public static void main(String [] args) {
        int arr[][] = {
                        {1, 2, 3, 4, 6},
                        {9,-7,-3, 2, 7},
                        {3, 0, 5, 2,-7},
                        {1, 7, 6, 8, 5},
                        {5, 1,-4, 3,-8},
                        {5,-2,-7, 5, 0}
                        };
        printArray(arr);
        control(arr);
    }

    // Печать массива на экран
    public static void printArray(int[][] arr) {
        for (int[] anArr : arr) {
            for (int anAnArr : anArr) {
                System.out.printf("[%2d]", anAnArr);
            }
            System.out.println();
        }
    }

    // Проверка на наличие отрицательных элементов и вывод результата
    public static void control(int arr [][]) {
        try {
            for (int i = 0; i < (arr.length - 1); i++) {
                boolean fl = false;         // Флаг наличия отрицательного элемента
                int pr = 1;                 // Счетчик произведений
                for (int j = 0; j < (arr[i].length + 1); j++) {
                    pr *= arr[j][i];        // Вычисление произведения
                    if (arr[j][i] < 0) {    // Если в столбике встречается отриц. число, то
                        fl = true;          // установить флаг и завершить вложенный цикл
                        break;
                    }
                }
                if (!fl) {                  // Если флаг не установлен, то вывести произведение столбика
                    System.out.println(" Произведение " + i + " столбца: " + pr);
                }
            }
        } catch (ArrayIndexOutOfBoundsException ex) {
            System.out.println("Ошибка: " + ex);
        }
    }
}
Снимок.PNG
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 26.12.2014, 23:18   #6
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию

Спасибо! Всё работает! Всех с Наступающим!!!)))
NYork вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Java: Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Заменить первые три строки массива A vikysha55 Помощь студентам 1 16.04.2014 10:50
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40