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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2013, 13:11   #1
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию Двумерный массив (поиск максимального элемента в каждом столбце)

Здравствуйте. Необходимо написать программу, которая считывает двумерный массив, выводит его на экран, а затем ищет в каждом столбце первого массива, максимальный элемент и заносит его в одномерный массив и выводит на экран. Вот что у меня получилось нашаманить:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 30

int main(){
  int mas[N][N],mac[N],max,p,m,k,o;
  printf("Vvedite razmer matrici K x K:\n");
  scanf("%i",&k); //вводим количество элементов массива
  printf("Vvedite elementi massiva\n");
  /*Вбиваем в массив последовательность чисел*/
  for(p=0;p<k;p++)
    for(m=0;m<k;m++)
    scanf("%i",&mas[p][m]);
  //Вывод массива на экран
    for(p=0;p<k;p++){
    for(m=0;m<k;m++)
    printf("%i  ",mas[p][m]);
    printf ("\n");
    }
    //поиск максимального элемента в каждом столбце

 for(o=0,m=0;m<k;m++,o++)
 {
 max=mas[p][m];
 for(p=0;p<k;p++)
 {
     if(mas[p][m]>max)
     max=mas[p][m];
 }
 mac[o]=max;
 }
  /* вывод результата*/
  for (o=0; o<k; o++){
printf("%i " , mac[o]);
}
  getch();
  return 0;
}
Программа не работает, пишет что конфликт типа для max. Помогите пожалуйста, не могу разобраться
UPD: Разобрался с ошибками, но вот программа все равно пока не работает как надо. Не правильно ищет максимальные значения

Последний раз редактировалось abstractionhawk; 21.06.2013 в 13:33.
abstractionhawk вне форума Ответить с цитированием
Старый 21.06.2013, 15:32   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Вот вам пример.
На мой взгляд слишком много ненужных переменных в вашем коде.
Я старался написать по понятней ...
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
#define N 30

int main()    {
	int mas[N][N];
	int mac[N];	
	int max;	// Буфер максимального элемента
	int i, j;	// Счетчики
	
	setlocale(LC_ALL, "russian"); 	// Руссификация консоли
	
	// Заполнение массива случайными числами и печать его на экран
	srand((unsigned)time(NULL));
	
	printf("\n Массив:\n *******\n");
	for(i = 0; i < N; i++)
	{
		for(j = 0; j < N; j++)
		{
			mas[i][j] = 1+rand()%99;
			printf(" %3d", mas[i][j]);
		}
		printf("\n");
	}
	
	// Подсчет наибольшего значение в каждом столбике
	for(j = 0; j < N; j++)
	{
		max = 0;
		for(i = 0; i < N; i++)
		{
			if(mas[j][i] > max)
				max = mas[j][i];
		}
		mac[j] = max;
	}
	
	// Вывод результата
	printf("\n\n РЕЗУЛЬТАТ:\n");
	for(i = 0; i < N; i++)
		printf(" %3d", mac[i]);
		
	printf("\n");
	system("pause");
return 0;
}
Если будут вопросы спрашивайте...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 21.06.2013 в 15:34.
Bugrimov вне форума Ответить с цитированием
Старый 21.06.2013, 15:39   #3
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Учитывая мои жалкие познания в СИ, вы предоставили мне хорошую базу для размышлений )))) С программой своими силами уже справился и сделал чтобы она работала. Но вот новая проблема, необходимо все это через функции сделать, а у меня что-то снова не получается. Если кто-то может либо хорошую статью о функция скинуть, либо помочь с этой программой, чтобы она через функции работала

Программу уже сделал сам, она работает как надо. Но не получается сделать так, чтобы она работала через функции. Т.е. реализовать ввод матрицы, вывод и т.п. через отдельные функции. Вот код программы:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 30

int main(){
int mas[N][N],mac[N],max,p,m,k,o;
printf("Vvedite razmer matrici K x K:\n");
scanf("%i",&k); //вводим количество элементов массива
printf("Vvedite elementi massiva\n");
/*Вбиваем в массив последовательность чисел*/
for(p=0;p<k;p++)
for(m=0;m<k;m++)
scanf("%i",&mas[p][m]);
//Вывод массива на экран
for(p=0;p<k;p++){
for(m=0;m<k;m++)
printf("%i ",mas[p][m]);
printf ("\n");
}
//поиск максимального элемента в каждом столбце

for(o=0,m=0;m<k;m++,o++)
{
max=mas[0][m];
for(p=0;p<k;p++)
{
if(mas[p][m]>max)
max=mas[p][m];
}
mac[o]=max;
}
/* вывод результата*/
for (o=0; o<k; o++){
printf("%d " , mac[o]);
}
getch();
return 0;
}

Последний раз редактировалось Stilet; 23.06.2013 в 14:20.
abstractionhawk вне форума Ответить с цитированием
Старый 23.06.2013, 12:44   #4
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Ф-ия вывода матрицы
Код:
#include <stdio.h>
#define N 10
#define M 10

void vivod(int A[N][M])//функция вывода матрицы
{
int i, j;
printf("Матрица A имеет вид:\n");//вывод матрицы A
	for(i = 0;i < N;i++)
	{
		for(j = 0;j < M;j++)
		{
		printf("%5d |",A[i][j]);
		}
	printf("\n");
	}
}
И её вызов
Код:
vivod(mas);
Ф-ия ввода матрицы
Код:
#include <stdio.h>
#define N 10
#define M 10

void vvod(int A[N][M])//функция ввода матрицы
{
int i, j;
	for(i = 0;i < N;i++)
	{
		for(j = 0;j < M;j++)
		{
		scanf("%d",&A[i][j]);
		}
	}
}
И её вызов
Код:
vvod(mas);
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.

Последний раз редактировалось Че Гевара; 23.06.2013 в 12:54.
Че Гевара вне форума Ответить с цитированием
Старый 23.06.2013, 12:51   #5
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Че Гевара Посмотреть сообщение
Ф-ия вывода матрицы
Код:
#include <stdio.h>
#define N 10
#define M 10

void vivod(int A[N][M])//функция вывода матрицы
{
int i, j;
printf("Матрица A имеет вид:\n");//вывод матрицы A
	for(i = 0;i < N;i++)
	{
		for(j = 0;j < M;j++)
		{
		printf("%5d |",A[i][j]);
		}
	printf("\n");
	}
}
И её вызов
Код:
vivod(mas);
Спасибо большое, почти сам уже справился, но вы меня опередили =)
abstractionhawk вне форума Ответить с цитированием
Старый 24.06.2013, 12:10   #6
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Блин фигня какая-то. То, что написал Че Гевара это только ввод и вывод, а нужно и код который формирует новый массив тоже был в отдельной функции. Чего-то я сильно запутался и ничего работать не хочет =(
abstractionhawk вне форума Ответить с цитированием
Старый 24.06.2013, 13:17   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я сильно запутался
Выкладывай код, на котором запутался )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.06.2013, 14:09   #8
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Да точно по такому же принципу пихаете куски кода в ф-ии.
Код:
void form_mac(int mas[N][M], int mac[N], int k)
{
   //поиск максимального элемента в каждом столбце
 int o, p, m, max;
 for(o=0,m=0;m<k;m++,o++)
 {
 max=mas[p][m];
 for(p=0;p<k;p++)
 {
     if(mas[p][m]>max)
     max=mas[p][m];
 }
 mac[o]=max;
 }
}
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.

Последний раз редактировалось Че Гевара; 24.06.2013 в 14:26.
Че Гевара вне форума Ответить с цитированием
Старый 24.06.2013, 14:13   #9
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Че Гевара скажите, а кокое значение массива присваивается max?
Код:
max=mas[p][m];
Вы проверяли код?
Это первое, что режет глаз...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 24.06.2013 в 14:17.
Bugrimov вне форума Ответить с цитированием
Старый 24.06.2013, 14:23   #10
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Че Гевара скажите, а кокое значение массива присваивается max?
Код:
max=mas[p][m];
Вы проверяли код?
Это первое, что режет глаз...
я всего лишь перенёс в функцию тот код, который был предоставлен ТС, на логику я его не проверял, так как из этого сообщения
Цитата:
Программу уже сделал сам, она работает как надо. Но не получается сделать так, чтобы она работала через функции. Т.е. реализовать ввод матрицы, вывод и т.п. через отдельные функции. Вот код программы:
Код:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 30

int main(){
int mas[N][N],mac[N],max,p,m,k,o;
printf("Vvedite razmer matrici K x K:\n");
scanf("%i",&k); //вводим количество элементов массива
printf("Vvedite elementi massiva\n");
/*Вбиваем в массив последовательность чисел*/
for(p=0;p<k;p++)
for(m=0;m<k;m++)
scanf("%i",&mas[p][m]);
//Вывод массива на экран
for(p=0;p<k;p++){
for(m=0;m<k;m++)
printf("%i ",mas[p][m]);
printf ("\n");
}
//поиск максимального элемента в каждом столбце

for(o=0,m=0;m<k;m++,o++)
{
max=mas[0][m];
for(p=0;p<k;p++)
{
if(mas[p][m]>max)
max=mas[p][m];
}
mac[o]=max;
}
/* вывод результата*/
for (o=0; o<k; o++){
printf("%d " , mac[o]);
}
getch();
return 0;
}
мне стало известно, что всё работает, и нужно всего лишь разбить на функции
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать массив: в каждом столбце поменять местами максимальный и первый элементы AFI Паскаль, Turbo Pascal, PascalABC.NET 5 17.05.2013 05:40
Дан двумерный массив. В каждой строке замените знак максимального по модулю элемента на противоположный. Ann2807 Помощь студентам 2 11.03.2013 19:42
Дан двумерный массив. Найти сумму и количество элементов в каждом столбце, положительных и лежащих вне главной диагонали Alexbmgn Помощь студентам 1 25.12.2011 22:21
Поиск максимального значения в каждом столбце Mikl___ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.11.2011 05:57
[Delphi] В матрице обнулить все элементы, расположенные после максимального в каждом столбце Volodyajke Помощь студентам 5 17.11.2011 23:52