Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Последовательность чисел

Ответить
Настройки темы
C/C++ - Последовательность чисел

Аватара для denver-312

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите пожалуйста!
Есть программа, которая реализует работу с последовательностью чисел. Вводим 10 чисел - она формирует
их по возростанию. Но нужно ещё, кроме этого составить новую последовательность, выкинув из неё
самое минимальное и самое максимальное число. Как это сделать?


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void main(void)
{
int n[10];
int i;
float min, max;
float*a;
printf ("\n 10:");
scanf("%d" , &n);
a=(float*)calloc(n,sizeof(float));

for(i=0; i<n;i++)
{
scanf("%f" ,&a[i]);
}
min=a[0]; max=a[0];
for(i=1; i<n;i++)
}
if(min>a[i]) min=a[i];
if(max<a[i]) max=a[i];
}
printf ("min=%.1f" ,min);
printf ("max=%1f" ,max);
getch ();
free (a);
}


Заранее спасибо!

Отправлено: 11:10, 28-12-2007

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


программа выполняет несколько иную задачу

Отправлено: 18:33, 28-12-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для 5pliT

Новый участник


Сообщения: 21
Благодарности: 9

Профиль | Отправить PM | Цитировать


Что-то чепуха написана у вас в коде
Делается это просто в два шага:
1. Сортируется.
2. Убирается первый и последний элементы.

Код: Выделить весь код
#include <stdio.h>
#include <conio.h>
#define N 10

void sort(int in[], int a=0, int b=N){
     int i,j,mode;
     if (a>=b) return;
     for (i=a,j=b,mode=1;i<j;mode>0?j--:i++)
          if (in[i] > in[j]) {
             in[i]^=in[j]^=in[i]^=in[j];
             mode=-mode;
          }
     sort(in,a,i-1); 
     sort(in,i+1,b);
}

int main() {
      int i,*x=new int[N];
      for (i=0;i<N;i++)  scanf("%d",&x[i]);
      sort(x); //сортируем
      for (i=1;i<N-1;i++) { //убираем первый и последний элементы
          x[i-1]=x[i];
          printf("%d ",x[i-1]);
      }
      getch();
      return 0;   
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:59, 31-12-2007 | #3


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


5pliT,
Цитата 5pliT:
in[i]^=in[j]^=in[i]^=in[j]; »
Можешь объяснить что делает этот оператор?!

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 17:56, 31-12-2007 | #4


Аватара для 5pliT

Новый участник


Сообщения: 21
Благодарности: 9

Профиль | Отправить PM | Цитировать


Это алгоритм обмена значений переменных.
Примерно тоже самое:
int temp=in[i];
in[i]=in[j];
in[j]=temp;
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:10, 01-01-2008 | #5


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата 5pliT:
int temp »
Прошу прощения за назойливость, но я не понял, какая из переменных выступает в роли - temp? Вроде ж две переменные
Код: Выделить весь код
in[i] ^=  in[j]
Можешь подробнее объяснить?!
Принцип пузырьковой сортировки

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 01-01-2008 в 18:11. Причина: Добавил вопрос


Отправлено: 18:09, 01-01-2008 | #6


Аватара для 5pliT

Новый участник


Сообщения: 21
Благодарности: 9

Профиль | Отправить PM | Цитировать


Здесь нет третей переменной, поэтому я и использовал этот алгоритм.
Можно расписать его как последовательность операций:
in[i]=in[i]^in[j];
in[j]=in[j]^in[i];
in[i]=in[i]^in[j];
^ - это xor (математики называют эту операцию "исключающее ИЛИ" или "сумма по модулю 2" или "кольцевая сумма")
0^0=0
0^1=1
1^0=1
1^1=0

например a=5,b=7;
a=101
b=111
a=a xor b
a=101 xor 111=010=2
b=b xor a
b=111 xor 010=101=5=a (первоначальное)
a=a xor b
a=010 xor 101=111=7=b (первоначальное)


Алгоритм пузырьковой сортировки заключается в последовательном (начиная с разных концов массива) сравнении всех элементов друг с другом. Если нужная последовательность не сохраняется, то элементы меняются местами.

Здесь я использовал рекурсивный алгоритм быстрой сортировки. Он заключается в последовательном выборе элемента (обычно который называют медианой или опорным элементом). Затем элементы упорядочиваются относительно него, тоесть все меньшие в одну сторону, все большие в другую. Затем для каждой из частей (левой и правой) рекурсивно запускается тотже алгоритм. Тоесть опять выбирается медиана и массив разделяется на две части. Алгоритм этот достаточно быстрый и запись его на Си очень локанична.

Последний раз редактировалось 5pliT, 02-01-2008 в 07:57. Причина: Добавлено по алгоритму обмена, исправлены ошибки

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:48, 02-01-2008 | #7


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


5pliT,
Я почему спрашивал, просто эту операцию ещё не изучал
Цитата 5pliT:
^ - это xor »
Огромнейшее Спасибо, что подробно объяснил, и отнёсся с пониманием!

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 20:54, 02-01-2008 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Последовательность чисел

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Assm - Сложение двух чисел Rebel666 Программирование и базы данных 8 22-04-2012 17:30
Генератор случайных чисел Murrey Хочу все знать 3 22-08-2006 13:00
сортировка чисел slaine Вебмастеру 12 18-02-2006 20:17
Генерирование случайны чисел в С++ Belka007 Программирование и базы данных 12 23-11-2003 22:19




 
Переход