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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2014, 23:25   #1
Kirillgr
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 25
По умолчанию Дан массив размерностью M*N. В каждой строке, где первый элемент больше всех остальных, увеличить все элементы на 10. (С)

Здравствуйте. Условие задачи:
Дан массив размерностью M*N. В каждой строке, где первый элемент больше всех остальных, увеличить все элементы на 10.
Вот сама программа:
Код:
#include <stdio.h>
#include <conio.h>
#pragma hdrstop
int a[10][10];
int vvod();
void ras(int);
void vyvod(int,int);
void main()
{int k,m,n;
 k=vvod();
 ras(k);
 vyvod(n,m);
 getch();
 }
 int vvod()
 {int i,j,m,n;
 printf("Razmernost:\n");
 scanf("%d %d",&n,&m);
 printf("Elementy massiva:\n");
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 scanf("%d",&a[i][j]);
 return n;
 }
 void ras(int m)
 {int i,j,g,r;
 for(i=0;i<m;i++)
 {g=0;
 for(j=1;j<m;j++)
 {if(a[i][0]>a[i][j])
 ;
 else
 {g=1;
 break;
 }
 }
 if(g==0)
 for(r=0;r<m;r++)
 a[i][r]=a[i][r]+10;
 }
 }
 void vyvod(int n,int m)
 {int i,j;
 printf("\n");
 for(i=0;i<n;i++)
 {for(j=0;j<m;j++)
 {printf("%d ",a[i][j]);
 }
 printf("\n");
 }
 }
Проблема в том, что компилятор условие задачи как бы выполняет, но он выводит в строчку 256 чисел с увеличенными элементами, с нулями и числами 4202648, 1 и 33637852. А он должен вывести матрицу с полученным результатом без всяких нулей. Помогите разобраться, в чем проблема?

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

Большая просьба выделите свой код тегами (ярлык #)
Самое первое, что бросается в глаза, откуда ваши функции знают, чему равны n и m?
На сколько я вижу, эти переменные не инициализированы.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 01.02.2014 в 23:37.
Bugrimov вне форума Ответить с цитированием
Старый 01.02.2014, 23:41   #3
Kirillgr
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 25
По умолчанию

Подскажите, как сделать насчет инициализации переменных?

Последний раз редактировалось Kirillgr; 01.02.2014 в 23:44.
Kirillgr вне форума Ответить с цитированием
Старый 01.02.2014, 23:43   #4
Kirillgr
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 25
По умолчанию

Вот результат:
Безымянный.jpg

Последний раз редактировалось Kirillgr; 01.02.2014 в 23:53.
Kirillgr вне форума Ответить с цитированием
Старый 02.02.2014, 22:10   #5
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

я не понимаю как у тебя компилятор выдал такое.Мой компилятор меня сразу послал,т.к. в твоей программе неинициализированная переменная m передается в функцию vyvod в виде параметра,как ты можешь ее задавать параметром функции vyvod если она у тебя не инициализирована?

p.s. переменная n и m в функции vvod не относятся к переменным n и m объявленными в теле main это разные переменные,в разных областях видимости.
n и m в функции vvod являются автоматическими переменными они уничтожаются при завершении вызова функции vvod и переменные в теле main n и m так и остались неинициализированными(у них область видимости функция main, а не функция vvod, а в функции main ты их не инициализировал)
Эта ошибка у тебя возникла скорей всего из-за большого количества переменных и из-за плохого стиля программирования(некоторые фигурные скобки плохо поставил,хоть и ты плохо копировал код сюда,убрав тем самым отступы,но все равно видно что фигурные скобки криво расставлены - это мое мнение)
А может ты просто плохо знаешь области видимости переменных(глобальных статических локальных). Про это почитай

все правильно сделал кстати=) кроме переменных n и m

твоя исправленная версия программы - я сделал переменные n и m глобальными и таким образом решил твою проблему с неинициализированными переменными

p.s. в функции vvod extern означает что переменные объявлены не в этой функции а в другом месте(в моем случае они объявлены вне функций т.е. у них файловая область видимости, у переменной n и m)

Код:
#include <stdio.h>
#include <conio.h>
#pragma hdrstop
int a[10][10];
int vvod();
int n=0;
int m=0;
void ras(int);
void vyvod(int,int);
void main()
{
	int k=0;
	k=vvod(); 
	ras(k);
	vyvod(n,m);
}
 int vvod()
{
	int i,j;
	extern int m,n;
	printf("Razmernost:\n");
	scanf("%d %d",&n,&m);
	printf("Elementy massiva:\n");
	for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	scanf("%d",&a[i][j]);
	return n;
 }
void ras(int m)
{
int i,j,g,r;
	for(i=0;i<m;i++)
	{
	g=0;
		for(j=1;j<m;j++)
		{
			if(a[i][0]>a[i][j]);
			else
			{
			g=1;
			break;
			}
		}
	if(g==0)
	for(r=0;r<m;r++)
	a[i][r]=a[i][r]+10;
	}
}
void vyvod(int n,int m)
{
int i,j;
printf("\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
		printf("%d ",a[i][j]);
		}
	printf("\n");
	}
}

Последний раз редактировалось alekopoko; 02.02.2014 в 22:13.
alekopoko вне форума Ответить с цитированием
Старый 02.02.2014, 22:19   #6
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

ааааа..все дошло...у меня компилятор visual studio ,а у тебя borland studio,вот почему он тебе вывел что-то, а меня сразу послал
Переходи на visual studio))))
Будет сразу посылать, а не путать и выводить куча нуликов))
p.s. не хотел оскорбить компилятор borland studio =)
alekopoko вне форума Ответить с цитированием
Старый 02.02.2014, 22:25   #7
Kirillgr
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 25
По умолчанию

Огромное спасибо, все заработало! А другой, к сожалению, нельзя, нам велят на этом работать =(
Kirillgr вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В каждой строке поменять первый и наибольший элемент местами vlad1kT Помощь студентам 0 16.06.2013 10:51
Дан указатель P1 на первый элемент непустого двусвязного списка Продублировать в списке все элементы с нечетными значениями S.I.D. Паскаль, Turbo Pascal, PascalABC.NET 0 23.01.2013 19:08
Обработка матриц.В каждой строке матрицы найти первый минимальный и первый максимальный элементы и поменя ride013 Помощь студентам 4 20.04.2011 13:14
Первый нечетный элемент каждой строки удвоить (предполагается, что в каждой строке есть нечетный элемент Галина002 Помощь студентам 1 18.03.2009 06:30
найти минимальный элемент в каждой строке матрицы и записать все минимальные элементы в отдельный массив W_P Помощь студентам 6 28.12.2007 00:24