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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.05.2009, 19:39   #1
maxlav
 
Регистрация: 03.05.2009
Сообщений: 6
По умолчанию Пару вопросов по массивам

Доброго времени суток, форумчане!

Имеется несколько вопросов по массивам.
1. Условие задачи: В данной действительной матрице размерности M х N поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что эти элементы единственные.
Код:
#include <stdio.h>
#include <math.h>
int main(void){
	int i, j, m[10][10], M, N, max, min, s_max, s_min, p;
	printf ("Введите количество строк (M):\n");
	scanf("%d",&M);
	printf("Введите количество столбцов (N):\n");
	scanf("%d",&N);
	for (i=0; i<M; i++){
		printf("Введите %d строку:\n", i+1);
		for (j=0; j<N; j++)
			scanf("%d", &m[i][j]);
	}
	max=m[0][0]; s_max=0;
	for(i=0; i<M; i++)
		for(j=0; j<N; j++)
			if(m[i][j]>max){
				max=m[i][j]; s_max=m[i];
			}
	min=m[0][0]; s_min=0;
	for(i=0; i<M; i++)
		for(j=0; j<N; j++)
			if(m[i][j]<min){
				min=m[i][j]; s_min=m[i][j];
			}
	printf("Исходная матрица:\n");
	for(i=0; i<M; i++){
		for(j=0; j<N; j++)
			printf("%d ", m[i][j]);
			printf("\n");
	}
	p=0;
	p=max;
	max=min;
	min=p;
	printf("\n");
	for(i=0; i<M; i++){
		for(j=0; j<N; j++)
			printf("%d", m[i][j]);
			printf("\n");
	}
	printf("max = %d (%d)\n", max, s_max);
	printf("min = %d (%d)\n", min, s_min);
	return 0;
}
Цветом я выделил фрагмент - догадку (хотя она не верна). Если я правильно понял, то нужно строку с большим элементом присвоить какой-либо переменной, аналогично с меньшим, затем поменять их местами?
Вопрос 1: как записать строку в переменную?

Вопрос 2: имеется одномерный массив из отрицательных, положительных и нулевых элементов, расположенных в хаотическом порядке. Необходимо сформировать второй массив с этими же элементами, расположенными в порядке возрастания. Нет, не так выразился - записать сначала отрицательные, затем нулевые, и после положительные элементы, НО, последовательность отрицательных и положительных элементов не менять.
Из этого сделано:
Код:
#include <stdio.h>
#define MASS 10
int main (void){
	int a[MASS], b[10], i, p, o, n;
	for(i=0; i<MASS; i++){
		printf("Введите элемент массива m[%d]:", i);
		scanf("%d", &a[i]);
	}
	printf("Введенный массив:\n");
	for(i=0; i<MASS; i++){
		printf("%d ", a[i]);
	}
	p=0; o=0; n=0;
	for(i=0; i<MASS; i++){
		if (a[i]>0) p=p+1;
		if (a[i]<0) o=o+1;
		if (a[i]==0) n=n+1;
	}
	putchar('\n');
	printf("pol # = %d\n", p);
	printf("otr # = %d\n", o);
	printf("nul # = %d\n", n);
	return 0;
}
Поначалу думал с дополнительными массивами, идея такая: объявляю массив для отрицательных чисел, нахожу в исходном отрицательные элементы - записываю в него. Аналогично с нулевыми и положительными, затем собраю 3 массива в один. но получилась бредятина, которая выдавала ошибку в инициализации.

Postscriptum: я полностью понимаю модератора и других адекватных пользователей в вопросе о халяве, и не прошу решать за меня задачи, я прошу помочь человеку, который нуждается в вашей помощи.

Спасибо за понимание
maxlav вне форума
Старый 24.05.2009, 19:52   #2
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Цитата:
как записать строку в переменную?
Зачем? Можна хранить в переменной номер строки.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума
Старый 24.05.2009, 19:53   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Если я правильно понял, то нужно строку с большим элементом присвоить какой-либо переменной, аналогично с меньшим, затем поменять их местами?
Не нужно. Ищите максимум и запоминаете его индексы (достаточно только номер строки). Аналогично с минимумом.
В итоге имеем номера строк, которые нужно поменять местами. Допустим, это maxI и minI.
Теперь меняем местами поэлементно:
Код:
for(j=0; j<N; j++)
 {
 tmp = m[maxI][j];
 m[maxI][j] = m[minI][j];
 m[minI][j] = tmp;
 }
----------------------------
По второй. Можно легко сделать в 3 прохода:
Код:
#include <stdio.h>
#include <conio.h>
#define MASS 10

int main (void){
int a[MASS], b[MASS], i,j;
	for(i=0; i<MASS; i++)
 {
	printf("Введите элемент массива m[%d]:", i);
	scanf("%d", &a[i]);
	}
	printf("Введенный массив:\n");
	for(i=0; i<MASS; i++){
		printf("%d ", a[i]);
	}
	printf("\n");

	j=0;
	for(i=0; i<MASS; i++)
	 if(a[i]<0) b[j++] = a[i]; // заносим отрицательные элементы
	for(i=0; i<MASS; i++)
            if(a[i]==0) b[j++] = a[i];  // нулевые
           for(i=0; i<MASS; i++)
            if(a[i]>0) b[j++] = a[i]; // положительные

	printf("New massiv: \n");
	for(i=0; i<MASS; i++)
	 printf("%d ",b[i]);

	getch();
	return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 24.05.2009, 21:14   #4
maxlav
 
Регистрация: 03.05.2009
Сообщений: 6
По умолчанию

Sazary, SunKnight, спасибо за помощь!
maxlav вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пару вопросов по масивам в паскале и С++ Lorden Помощь студентам 10 06.02.2009 20:50
Пару вопросов по MS Visual C++ 2005 zi0n Visual C++ 8 15.11.2008 18:59
Пару вопросов о DynamicSkinForm Relrin Компоненты Delphi 6 22.04.2008 04:03
Срочно пару вопросов fruTT Общие вопросы Delphi 8 30.10.2007 22:14