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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2010, 10:29   #1
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию сортировка одномерного массива

необходимо целочисленный массив А отсортировать по возрастанию. Причём отсортировать только те его эллементы, который входят в промежуток [a...b]. Всё прекрасно, токон выдаёт ошибку, а я не могу её убрать. Ошибка
error C2599: 'main' : local functions are not supported
Код пишу в visual studio c++. Вот сам код проги
Код:
#include <iostream.h> 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void output (int massiv[], int count) {
int i;
for (i=0; i,count; i++) {   
cout << int(massiv[i]) <<" ";
cout << endl;
}
}
void gen (int k, int a, int b, int x[]) {  
int i;
srand(time(NULL)*1000);   
for (i=0; i<k; i++) {                 
x[i]=(rand()*1.0/(RAND_MAX)*(b-a)+a);  
}
}
void sort (int x[], int n, int a, int b) {
for (int i=0; i<n-1; ++i) {
int tmp=0; 
for (int j=(i+1); j<n; ++j) 
if ((x[i]>x[j]) && (x[i]>=a) && (x[i]<=b) && (x[j]>=a) && (x[j]<=b)) {  
tmp =x[i];
x[i]=x[j];
x[j]=tmp;
}
}
void main() {
const n=10;   
int massiv[n];
int a, b, i;
gen(n, -100, 100, massiv);  
output (massiv, n);   
cout << "введите a: "; 
cin >> a;
cout << "введите b: "; 
cin >> b;

sort (massiv, n);  
output (massiv, n);   
}
}

Последний раз редактировалось Stilet; 26.08.2010 в 11:36.
imperceptible4462 вне форума Ответить с цитированием
Старый 26.08.2010, 10:40   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

в visual свой main создается
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 26.08.2010, 11:11   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Лишняя закрывающая скобка в конце
p51x вне форума Ответить с цитированием
Старый 26.08.2010, 19:32   #4
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию

тогда такой вопрос. Вот код программы:
Код:
#include <iostream.h> 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void output (int massiv[], int count) {
int i;
for (i=0; i<count; i++) {   
cout << int(massiv[i]) << "  ";
}
}
void gen (int k, int a, int b, int x[]) {  
int i;
srand(time(NULL)*1000);   
for (i=0; i<k; i++) {                 
x[i]=(rand()*1.0/(RAND_MAX)*(b-a)+a); 
}
}
void sort (int x[], int n, int a, int b) {
for (int i=0; i<n-1; ++i) {
int tmp=0; 
for (int j=(i+1); j<n; ++j) 
if ((x[i]>x[j]) && (x[i]>=a) && (x[i]<=b) && (x[j]>=a) && (x[j]<=b)) {   
tmp =x[i];
x[i]=x[j];
x[j]=tmp;
}
}
}
void main() {
const n=10;   
int massiv[n];
int a, b, i;
gen(n, -100, 100, massiv);  
output (massiv, n);   
cout << "введите a: "; 
cin >> a;
cout << "введите b: "; 
cin >> b;

sort (massiv, n, a, b);  
output (massiv, n);   
}

как сделать, чтобы отсортировался массив по возрастанию на промежутке [a...b]? А то он мне тот же выводит

Последний раз редактировалось Stilet; 27.08.2010 в 08:58.
imperceptible4462 вне форума Ответить с цитированием
Старый 27.08.2010, 09:05   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Код:
setlocale(LC_ALL,"Russian");
gen(n, -100, 100, massiv);
Это чоб на русском выводило
Код:
void sort (int x[], int n, int a, int b) {
 b=(b>n)?n:b;
 for (int i=a; i<b; ++i) {
	int tmp=0; 
	for (int j=a; j<b; ++j) if (x[i]>x[j]) {  tmp =x[i];x[i]=x[j];x[j]=tmp;	}
 }
}
А это ответ на твой вопрос о пределах сортировки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2010, 07:15   #6
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию

товарищи, помогите, не сортирут он...просто выводит старый массив...уже по-всякому перепробывала
imperceptible4462 вне форума Ответить с цитированием
Старый 07.09.2010, 08:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Вот результат с теми поправками что я указал:
Цитата:
-6 73 84 83 -66 -78 5 -77 12 67

введите a: 0
введите b: 10
84 83 73 67 12 5 -6 -66 -77 -78
Для продолжения нажмите любую клавишу . . .
Учитывая что а=0 а в=10 при вводе, т.е. сортирить весь массив
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2010, 08:20   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

imperceptible4462, я, к своему стыду и сожалению, совсем не знаю C
Поэтому совет дам общеобразовательный

Вам для себя надо решить, что же Вам собственно надо сделать.
код (c) Stilet из поста #5 делает следующее
пусть дан массив 12 10 9 2 17 5 6 7
и а = 3, b= 6, т.о. [3..6]
автор решил, что нужно отстортировать элементы массива от элемента с номером (индексом) 3 до элемента с номером (индексом) 6
12 10 9 2 17 5 6 7
после сортировки получаем массив:
12 10 2 5 9 17 5 6 7

Я лично считаю, что задача подразумевает ДРУГОЕ, отсортировать все числа, величина которых попадает в диапазон [a..b]
Но в этом случае решите, где должен располагаться отсортированный участок (он может быть либо в начале массива, либо в конце)
Например, для того же массива: 12 10 9 2 17 5 6 7
если a= 5, b = 10
Что получится? (приведите массив после сортировки)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2010, 08:36   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Я лично считаю, что задача подразумевает ДРУГОЕ
Твои идеи - мои Nine inch nails, дружище
Если автору нужно такое несчастье то вот таблэтка:
Код:
void sort2 (int x[], int n, int a, int b) {
 b=(b>n)?n:b;
 int tmp2=0;
 for (int i=0; i<10; ++i) {
	int tmp=0; 
	for (int j=0; j<10; ++j) 
		if ((x[j]>=a)&&(x[j]<=b)) {
			if (x[tmp2]>x[j]) {  
				tmp =x[i];x[i]=x[j];x[j]=tmp;	
		    }
			tmp2=j;
		}
 }
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2010, 09:27   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Stilet
Твои идеи - мои Nine inch nails, дружище


Цитата:
Сообщение от Stilet
Если автору нужно такое несчастье то вот таблэтка:
Оригинально. я такой вариант даже не предположил - все числа, не попадающие в диапазон, остаются на своих местах, а числа, попадающие в диапазон, сортируются в тех ячейках, где они находились!
Не уверен, что автор топика (и, главное, его преподаватель) достойно оценит решение, но мне лично понравилось: просто и эффективно решается именно поставленная в ТЗ задача!
Браво, коллега!

Последний раз редактировалось Serge_Bliznykov; 07.09.2010 в 09:29.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка одномерного массива Гамбит Помощь студентам 2 02.11.2009 00:28
Сортировка одномерного массива laponka Помощь студентам 7 14.09.2009 09:00
Сортировка одномерного массива введенного с клавиатуры по возрастанию sande Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 18.01.2009 20:31
Сортировка одномерного массива (ASM & C) voron Помощь студентам 0 02.12.2007 13:41