Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Последовательность чисел


Автор: denver312 28.12.2007, 10:21
Помогите пожалуйста!
Есть программа, которая реализует работу с последовательностью чисел. Вводим 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);
}


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


 ! 
archimed7592
Пользуйся тэгом code или кнопкой "Код"!

Автор: archimed7592 28.12.2007, 12:48
Цитата(denver312 @  28.12.2007,  10:21 Найти цитируемый пост)
Но нужно ещё, кроме этого составить новую последовательность, выкинув из неё 
самое минимальное и самое максимальное число. Как это сделать?

Выкинуть из отсортированной последовательности первый(т.е. минимальный) и последний(т.е. максимальный) элементы.

Автор: denver312 28.12.2007, 12:58
Цитата(archimed7592 @ 28.12.2007,  12:48)
Цитата(denver312 @  28.12.2007,  10:21 Найти цитируемый пост)
Но нужно ещё, кроме этого составить новую последовательность, выкинув из неё 
самое минимальное и самое максимальное число. Как это сделать?

Выкинуть из отсортированной последовательности первый(т.е. минимальный) и последний(т.е. максимальный) элементы.

Спасибо, я знаю, но не знаю как это сделать smile 

Автор: archimed7592 28.12.2007, 13:11
Цитата(denver312 @  28.12.2007,  12:58 Найти цитируемый пост)
Спасибо, я знаю, но не знаю как это сделать smile  

Если формируешь новую последовательность, то начинать копировать со второго элемента(с индексом 1) и заканчивать предпоследним(с индексом n - 2).
Если хочешь изменить существующую последовательность, то переместить все элементы на 1 "влево", после чего укоротить последовательность на 2.

Автор: denver312 28.12.2007, 14:29
Цитата(archimed7592 @ 28.12.2007,  13:11)
Цитата(denver312 @  28.12.2007,  12:58 Найти цитируемый пост)
Спасибо, я знаю, но не знаю как это сделать smile  

Если формируешь новую последовательность, то начинать копировать со второго элемента(с индексом 1) и заканчивать предпоследним(с индексом n - 2).
Если хочешь изменить существующую последовательность, то переместить все элементы на 1 "влево", после чего укоротить последовательность на 2.

Если хочешь изменить существующую последовательность, то переместить все элементы на 1 "влево", после чего укоротить последовательность на 2.

А что значит "переместить все элементы на 1 "влево", после чего укоротить последовательность на 2"? Как это понять?

Автор: archimed7592 28.12.2007, 14:33
Цитата(denver312 @  28.12.2007,  14:29 Найти цитируемый пост)
переместить все элементы на 1 "влево"

Элемент с индексом 1 переместить в ячейку с индексом 0.
Элемент с индексом 2 переместить в ячейку с индексом 1.
Элемент с индексом 3 переместить в ячейку с индексом 2.
...
Элемент с индексом n-2 переместить в ячейку с индексом n-3.
Элемент с индексом n-1 переместить в ячейку с индексом n-2.

Цитата(denver312 @  28.12.2007,  14:29 Найти цитируемый пост)
укоротить последовательность на 2"?

Зависит от того, как ты идентифицируешь длину последовательности в дальнейшем коде.

Автор: denver312 30.12.2007, 12:53
 Не понимаю как это прописать в коде. Ведь у меня max и min число могут находится в разных местах.  

Автор: GrayCardinal 30.12.2007, 13:09
Код

int c = 0;
float *b; 

for (i = 0; i < n; ++i) {
 if (a[i] == min) continue;
 if (a[i] == max) continue;
 b[c] = a[i];
 ++c;
}

Да и b надо инитить как a ...

Добавлено через 5 минут и 10 секунд
Да, ещё
int n[10];
наверно всё-таки просто int n ?

Автор: denver312 30.12.2007, 13:46
Код

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #define g 10
void main(void)
{
int n[10];
int i;
int c=0;
float min, max;
float*a;
printf ("\n Введите элемент массива неболее 10:");
scanf("%d" , &n);
a=(float*)calloc(g,sizeof(float));

for(i=0; i<g;i++)
{
scanf("%f" ,&a[i]);
}
min=a[0]; max=a[0];
for(i=1; i<g;i++)
}
if(min>a[i]) min=a[i];
if(max<a[i]) max=a[i];
} 
printf (" Минимальный элемент min=%.1f" ,min);
printf (" Максимальный элемент max=%1f" ,max);
for (i=0;i<n;i++)
{ 
if(a[i]==min);
if(a[i]==max);
a[c]=a[i];
c++;
printf (" Новая последовательность")
getch ();
free (a);
}


Ничего не получается


 ! 
archimed7592
Автор проигнорировал мою рекомендацию пользоваться тегом code и в вознаграждение получает читательский билет на выходные.
С наступающим!

Автор: GrayCardinal 30.12.2007, 13:59
denver312, 
Ну, значит бегом с чайком к тому кто код писал smile

Автор: JackYF 30.12.2007, 14:03
denver312, пользуйся тегом "код", пожалуйста.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)