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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2011, 00:27   #1
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию двухмерный массив (СИ)

есть вот такая задачка, вроде не очень сложная, но вот на СИ написать программу затрудняюсь, помогите пожалуйста с решением, вот условие задачи:
В массиве M[6*4] все числа различны. В каждой строке находится минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатать номер строки массива М, в которой расположено выбранное число.

Спасибо за помощь!!!
Cas01 вне форума Ответить с цитированием
Старый 18.10.2011, 03:13   #2
HeLiO
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 13
По умолчанию

можно так:


Код:
#include "stdio.h"
#include "conio.h"

int M[6][4] = {{1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20},{21,22,23,24}};

int getMin (int line)
{
	int min = M[line][0];
	for (int i = 0; i < 4; i++)
	{
		if (M[line][i] < min)
			min = M[line][i]; 
	}
	return min;

}


void main (void)
{
	int lineNum = 0;
	int resMax = getMin(lineNum);
	for (int i = 0; i < 6; i++)
	{
		if (getMin(i) > resMax)
		{
			resMax = getMin(i);
			lineNum = i;
		}
	}
	printf("Our string num is: %i (%i) \n", lineNum + 1, lineNum);
	getch();
}

Последний раз редактировалось HeLiO; 18.10.2011 в 03:35.
HeLiO вне форума Ответить с цитированием
Старый 18.10.2011, 11:27   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Cas01

есть вот такая задачка, вроде не очень сложная, но вот на СИ написать программу затрудняюсь, помогите пожалуйста с решением, вот условие задачи:
В массиве M[6*4] все числа различны. В каждой строке находится минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатать номер строки массива М, в которой расположено выбранное число.


Лучше сдай на C++, заодно и освобождение от зачёта получишь, а препод будет обходить тебя стороной :D

Код:
#include <iostream>
#include <locale>

#include <algorithm>
#include <boost/phoenix.hpp>

namespace phx = boost::phoenix;
using phx::arg_names::_1;

template <typename T, size_t Rows, size_t Cols>
size_t index(const T (&arr)[Rows][Cols])
{
	T v[ Rows ];
	return std::distance(v, std::max_element(v, std::transform(arr, arr + Rows, v, *phx::min_element(_1))));
}

int main()
{
	setlocale(LC_ALL, "");

	const int arr[6][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20},{21,22,23,24}};
	std::cout << index(arr) << std::endl;

	return 0;
}
Rififi вне форума Ответить с цитированием
Старый 23.10.2011, 15:02   #4
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от HeLiO Посмотреть сообщение
можно так:


Код:
#include "stdio.h"
#include "conio.h"

int M[6][4] = {{1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20},{21,22,23,24}};

int getMin (int line)
{
	int min = M[line][0];
	for (int i = 0; i < 4; i++)
	{
		if (M[line][i] < min)
			min = M[line][i]; 
	}
	return min;

}


void main (void)
{
	int lineNum = 0;
	int resMax = getMin(lineNum);
	for (int i = 0; i < 6; i++)
	{
		if (getMin(i) > resMax)
		{
			resMax = getMin(i);
			lineNum = i;
		}
	}
	printf("Our string num is: %i (%i) \n", lineNum + 1, lineNum);
	getch();
}
спасибо, но при запуске выдаёт ошибку, курсор ставится вот сюда:

for (int i = 0; i < 4; i++)

помогите исправить пожалуйста!!!
Cas01 вне форума Ответить с цитированием
Старый 23.10.2011, 16:51   #5
HeLiO
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 13
По умолчанию

Хм, странно.. Вообще название ошибки бы помогло. Ну, попробуйте так:

Код:
int getMin (int line)
{
        int i;
	int min = M[line][0];
	for (i = 0; i < 4; i++)
	{
		if (M[line][i] < min)
			min = M[line][i]; 
	}
	return min;

}
HeLiO вне форума Ответить с цитированием
Старый 23.10.2011, 17:05   #6
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Cas01 Посмотреть сообщение
спасибо, но при запуске выдаёт ошибку, курсор ставится вот сюда:

for (int i = 0; i < 4; i++)

помогите исправить пожалуйста!!!
В языке программирования С, если компилятор еще не поддерживает стандарт языка С99, нельзя объявлять переменную внутри предложения for. Поэтому везде, где в вашей программе используется подобная конструкция for с объявлением внутри нее переменной, следует ее изменить, поместив объявление переменной i в начало тела функции до первого выполняемого предложения, или в начало любого блока кода, в котором используется конструкция for. А в самом предложении с for писать просто

Код:
for ( i = 0 ; i < 4; i++ )
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 23.10.2011, 22:04   #7
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию

понял, исправил, этот блок проги проходит норм, но в след. такая же ерунда, а исправить не выходит, помогите плз и тут)вот где ошибка :

Код:
 void main (void)
{
	int lineNum = 0;
	int resMax = getMin(lineNum);
	for (INT i = 0; i < 6; i++)
	{
		if (getMin(i) > resMax)
		{
			resMax = getMin(i);
			lineNum = i;
		}
	}
	printf("Our string num is: %i (%i) \n", lineNum + 1, lineNum);
	getch();
}
Cas01 вне форума Ответить с цитированием
Старый 23.10.2011, 22:13   #8
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию

всё, спасиб, сделал сам!!!
Cas01 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухмерный массив С++ Arsenx777 Помощь студентам 1 03.10.2011 18:50
Двухмерный массив i.yakushev Помощь студентам 0 05.05.2011 18:58
Двухмерный массив. 666Pupsik666 Общие вопросы C/C++ 4 16.01.2011 12:27
двухмерный массив VB lunat Помощь студентам 0 08.12.2010 01:19
С# Двухмерный массив Dron17 Общие вопросы C/C++ 2 12.10.2010 10:58