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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2010, 17:51   #1
sproject
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 11
По умолчанию Славание двух массивов и их сортировка с использование функций!

Почему выскакивает ошибки при сортировки конечного массива?

Код:
#include <stdio.h>
#include <conio.h>

int A[5],B[5],C[10],i,n,j;
void sort (int *t, int k)
{
for (i=0;i<k;i++)
for (j=i+1;j<k;j++)
	if (*(t+1)>*(t+j))
{n=*(t+i);*(t+i)=*(t+j);*(t+j)=n;}
}
void main()
{	 
for(i=0;i<6;i++)
{
	printf ("A[%d]= ",i);
	scanf ("%d",& A[i]);
}
for(i=0;i<6;i++)
{
	printf ("B[%d]= ",i);
	scanf ("%d",& B[i]);
}
sort (&A[0],5);
sort (&B[0],5);
for(i=0;i<6;i++)
{
	C[i]=A[i];
	C[i+6]=B[i];
}
sort (&C[0],10)
for(i=0;i<10;i++);
printf (" %d", C[i]);

	getche();
}

Последний раз редактировалось Stilet; 15.04.2010 в 07:56.
sproject вне форума Ответить с цитированием
Старый 14.04.2010, 18:40   #2
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Первое:
Код:
for(i=0;i<6;i++)
{
C[i]=A[i];
C[i+6]=B[i];
}
Выход за границы массива

Второе:
Код:
sort (&C[0],10)
for(i=0;i<10;i++);
Нехватка точки с запятой после вызова функции. И присутствие их после for

Просто между прочим
Код:
sort (&A[0],5);
можно заменить на
Код:
sort(A, 5);
этот кусок
Код:
	sort (&A[0],5);
	sort (&B[0],5);
абсолютно бесполезен, если вам нужен только третий массив в итоге.

И еще немного - сортировка у вас не правильная, но с этим вы, я уверен, справитесь легко.
Tirendus вне форума Ответить с цитированием
Старый 14.04.2010, 18:51   #3
sproject
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 11
По умолчанию

А как правильно сортировать! Я уже пол дня мучаюсь, не пойму как сделать!
sproject вне форума Ответить с цитированием
Старый 14.04.2010, 18:56   #4
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

http://programmersforum.ru/showthread.php?t=92394

в этой теме мой последний пост, к которому прикреплен архив с уроками по c/c++, там же есть все эти сортировки, типа пузырька, выборок, шейкера, быстрой и тому подобного, запускайте "запуск_оболочки.hta", в одной из первых 10 тем оно точно есть, каждая тема разбита на подразделы, там легко ориентироваться. Это если нужна полезная информация + ваша сортировка. Если нужна просто сортировка - напишите в поиске тут "сорировка выборками", а лучше "быстрая сортировка".
Tirendus вне форума Ответить с цитированием
Старый 14.04.2010, 23:41   #5
sproject
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 11
По умолчанию

Привет ещё раз! Документ действительно полезный буду по нему учиться! Ну не могу чё то я сделать эту програму! Можешь помочь?Или кто нибудь помогите доделать!
sproject вне форума Ответить с цитированием
Старый 15.04.2010, 02:33   #6
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Все, что осталось тут "доделать" - это сортировку, а это довольно простой процес - спер шаблон из уроков, поменял в нём имена переменных - всё готово. Не думаю, что такой пустяк - проблема для человека, который умеет оперировать указателями и знает что такое функции в общем. Без собственных усилий ты ничего не добьешься.
Tirendus вне форума Ответить с цитированием
Старый 15.04.2010, 08:44   #7
sproject
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 11
По умолчанию

вот щас программа работает! Только она работает! мне нужно сделать через функцию! Объявляю функцию ошибкт выдаёт!

Код:
#include <stdio.h>
#include <conio.h>

void main()
{	 
int A[5],B[5],C[10],i,n,j;
for(i=0;i<6;i++)
{
	printf ("A[%d]= ",i);
	scanf ("%d",& A[i]);
}
for(i=0;i<6;i++)
{
	printf ("B[%d]= ",i);
	scanf ("%d",& B[i]);
}
for(i=0;i<5;i++)
for(j=i+1;j<6;j++)
{
	if(A[i]>A[j])
{n=A[i];A[i]=A[j];A[j]=n;}
	if(B[i]>B[j])
{n=B[i];B[i]=B[j];B[j]=n;}
}
for(i=0;i<6;i++)
{
	C[i]=A[i];
	C[i+6]=B[i];
}
for(i=0;i<10;i++)
for(j=i+1;j<11;j++)
	if(C[i]>C[j])
{n=C[i];C[i]=C[j];C[j]=n;}
for(i=0;i<11;i++)
printf (" %d", C[i]);

	getche();
}

Последний раз редактировалось Stilet; 15.04.2010 в 08:47.
sproject вне форума Ответить с цитированием
Старый 15.04.2010, 12:28   #8
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Если функцию объявляешь после того main, то нужно перед main указать её прототип. Например функция выглядит вот так
Код:
void sort(int *arr, int size) {
//---- some code
}
То прототип для неё нужно указать такой
Код:
void sort(int *arr, int size);
В куче -
Код:
void sort(int *arr, int size);
void main {
// - code
}

void sort(int *arr, int size) {
// - code
}
Это делается, чтобы компилятор знал, что в этом коде вообще существует такая функция.

И еще по теме, с этим кодом у тебя ничего правильно работать не будет

Все массивы индексируются, начиная нуля, тоесть, массив A[5] имеет такую структуру A[0], A[1], A[2], A[3], A[4] - и это пять элементов.

Цикл
Код:
for(i=0;i<6;i++)
Сделает 6 проходов 0, 1, 2, 3, 4, 5 - и это шесть индексов, скрипт выходит за рамки массива.

Это даже базовым уровнем тяжело назвать... учи матчасть. =\
Tirendus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двух массивов одновременно antoha73 Общие вопросы Delphi 12 04.01.2010 23:14
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
использование массивов! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 2 22.12.2008 11:02
Выбрать из двух массивов совпадение. *Иван* Microsoft Office Excel 7 22.11.2007 21:10