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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2010, 17:41   #1
Nice Plant
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 23
Смущение Массив.(Си)

В двумерном N * K массиве отсортировать элементы по возрастанию.
Подскажите как реализовать???
Nice Plant вне форума Ответить с цитированием
Старый 22.09.2010, 20:57   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
#include <stdlib.h>
...
int cmp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;
}
...
qsort(a, N * K, sizeof(a[0][0]), cmp);
Somebody вне форума Ответить с цитированием
Старый 23.09.2010, 22:35   #3
Nice Plant
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 23
По умолчанию

Это я и сам знаю, как реализовать без использования qsort???
Nice Plant вне форума Ответить с цитированием
Старый 24.09.2010, 13:18   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Можно почитать Википедию, можно поискать в Гугле, можно почитать книжку, можно отсортировать пузырьком, можно сделать свой qsort.
Код:
void qsort(void* a, size_t n, size_t s, int (*cmp)(const void *, const void *))
{
	void *l = a, *r = a + (n - 1) * s, *m = l + s * (n / 2);
	void* t = malloc(s);
	while (l <= r)
	{
		while (cmp(l, m) < 0)
			l += s;
		while (cmp(r, m) > 0)
			r -= s;
		if (l <= r)
		{
			memcpy(t, l, s);
			memcpy(l, r, s);
			memcpy(r, t, s);
			l += s;
			r -= s;
		}
	}
	free(t);
	if (l < a + (n - 1) * s)
		qsort(l, (a + (n - 1) * s - l) / s + 1, s, cmp);
	if (a < r)
		qsort(a, (r - a) / s + 1, s, cmp);
}
Somebody вне форума Ответить с цитированием
Старый 24.09.2010, 20:09   #5
Nice Plant
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 23
По умолчанию

Спасибо за помощь)))
Nice Plant вне форума Ответить с цитированием
Старый 03.10.2010, 20:42   #6
Nice Plant
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 23
По умолчанию

в чем загвоздка?? N(строк) выводит правильно, а вот M(столбцов) нет??


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void main()
{
int a[10][10], i, j, n,m;
srand(time(NULL));
printf ("VVedite N = ");
scanf ("%d", &n);
printf ("VVedite M = ");
scanf ("%d", &m);

{
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]=rand(5)+1;
}
printf ("ISHODNIY MASSIVE \n");
printf ("==================\n");
for (i=0; i<n; i++)
{for (j=0; j<m; j++)
printf ("%d", a[i][j]);
printf ("\n");
}
while(!kbhit())getch();
}
Nice Plant вне форума Ответить с цитированием
Старый 03.10.2010, 21:12   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

У функции rand() нет параметров.
А так всё нормально работает, что не так-то?
Somebody вне форума Ответить с цитированием
Старый 03.10.2010, 21:23   #8
Nice Plant
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 23
По умолчанию

компилировал на Visual C++ 2006

При вводе к примеру N=2 и M=3 выводит


2236597491
2234765748
а нужно

223
646
Nice Plant вне форума Ответить с цитированием
Старый 03.10.2010, 21:28   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
printf ("%d", a[i][j]);
Так здесь только "%d" - только число, они без пробелов и выводятся. Можно или с пробелами
"%d ",
или с заданным размером поля
"%5d".
Somebody вне форума Ответить с цитированием
Старый 03.10.2010, 21:30   #10
miNN@
 
Регистрация: 03.10.2010
Сообщений: 6
По умолчанию

Помогите плизззз....В одномерном массиве,состоящем из n целых элементов,вычислить:
1)номер максимального элемента массива;
2)произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половин-элементы,стоявшие в четных позициях. я до сюда дошла,а дальше не могу ошибки идут((....
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i, n, k, a[50];
cout <<"n="; cin >> n;
for(i=0; i<n; i++)
{
a[i]=rand()%21-10;
cout << a[i] << " ";
}
cout << endl;
// 1
k=0;
for (i=0; i<n; i++)
if (a[i]>a[k]) k=i;
cout << "k=" << k << endl;
// 2
i=0;
while (i<n && a[i]>=0) i++;
if (i<n)
{
int k1=i;
i=k1+1;
while (i<n && a[i]>=0) i++;
if (i<n)
{
int k2=i;
int p=1;
for (i=(k1+1);i<k2;i++) p*=a[i];
cout << "p=" << p;
}
else cout << "net vtorogo";
}
else cout << "net nuley";
getch();
return 0;
}
miNN@ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив , двухмерный массив Woxx Паскаль, Turbo Pascal, PascalABC.NET 0 10.09.2010 09:28
Массив в dll - как разместить массив в dll и как вызвать элемент этого массива по индексу? Кинельски Помощь студентам 0 23.05.2010 20:52
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06