Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
1

Дописать программу, найти второй минимум и максимум

20.03.2011, 16:47. Показов 2708. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста дописать программу на С!
Буду очень благодарна всем кто поможет.....

Дан вектор длинной n сформированный из вещественных случайных чисел.
а) Отсортировать его методом "пузырька".
б) найти второй минимум.
в) найти второй максимум.
г) отсортировать числа по возрастанию между вторым минимумом и вторым максимумом..

Вот мои наброски

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
        int i,j,n,k;
        int min,max;
        int sum,pr;
        int mas1[n];
        time_t t;
        srand((unsigned) time(&t));
         printf("\n Vvedite razmernoct vektora\n");
        scanf ("%d",&n);
        printf("\n Ishodn vector A \n");
        printf("\n ");
        for (i=0; i<n ;i++)
        {
                mas1[i]=rand()%20-10;
                printf(" %3d",mas1[i]);
               
        }
         k = 0;
        for ( i=1;i<(n-1);i++)
        {
                for (int j=0;j<(n-i);j++)
                {
                        if (mas1[j]>mas1[j+1])
                        {
                                k = mas1[j];
                                mas1[j] = mas1[j+1];
                                mas1[j+1]= k;
                        }
                }
}
 printf("\n ");
  printf("\n Vektor posle sortirovki\n");
  printf("\n ");
 for (i=0; i<n ;i++)
printf(" %3d", mas1[i]);
        printf("\n");
        system("PAUSE"); 
        return EXIT_SUCCESS;
}
Добавлено через 2 часа 49 минут
Помогите кто-нибудь!!!!!!!!!!!!!!!
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2011, 16:47
Ответы с готовыми решениями:

Найти минимум и максимум в массиве
Помогите в програме не хочет выводить минимальное и максимальное значение!!!!!!!! ...

Найти минимум и максимум в матрице
Господа программисты, очень нужна ваша помощь.Задачу сдавать завтра в 11 утра. Задана...

Найти максимум и минимум в массиве и сравнить их
Снова встрял на алгоритме:( Суть такая, наполняю одномерный массив числами, нахожу максимальное...

Найти минимум и максимум в массиве за n/2 сравнений
Как решить такую задачу,объясните пожалуйста. Никогда таким образом не решал и не знаю что за н/2...

12
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
20.03.2011, 16:54 2
C++
1
2
3
4
5
6
7
8
// min, max найдены.
int min_=max;
int max_=0;
for (int i=0; i<size; i++)
{
    if (min_<mas[i]) and (min_>min) then min_=mas[i];
    if (max_>mas[i]) and (max_<max) then max_=mas[i];
}
1
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
27.03.2011, 17:12  [ТС] 3
Ошибку выдает ((( then не принимает
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
27.03.2011, 17:17 4
Цитата Сообщение от MyRRka Посмотреть сообщение
then не принимает
Просто удали слово then(оно из паскаля).
1
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
27.03.2011, 17:33  [ТС] 5
Ну это понятно)))) и and удаляю. заменяю && , все равно фигня(((
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
27.03.2011, 20:18 6
Ой-ой, как это я мог)
0
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
28.03.2011, 14:21  [ТС] 7
Так как правильно то???(((
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
28.03.2011, 14:34 8
C++
1
2
3
4
5
6
7
8
// min, max найдены.
int min_=max;
int max_=0;
for (int i=0; i<size; i++)
{
    if ((min_<mas[i]) && (min_>min)) min_=mas[i];
    if ((max_>mas[i]) && (max_<max)) max_=mas[i];
}
Так.
0
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
28.03.2011, 14:42  [ТС] 9
Я так и писала((( не пойму где ошибка, может в выводе??? Посмотрите пожалуйста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
        int i,j,n,k;
        int min,min_,max, max_;
        int sum,pr;
        int mas[n];
        time_t t;
        srand((unsigned) time(&t));
         printf("\n Vvedite razmernoct vektora\n");
        scanf ("%d",&n);
        printf("\n Ishodn vector A \n");
        printf("\n ");
        for (i=0; i<n ;i++)
        {
                mas[i]=rand()%20-10;
                printf(" %3d",mas[i]);
               
        }
         k = 0;
        for ( i=1;i<(n-1);i++)
        {
                for (j=0;j<(n-i);j++)
                {
                        if (mas[j]>mas[j+1])
                        {
                                k = mas[j];
                                mas[j] = mas[j+1];
                                mas[j+1]= k;
                        }
                }
}
 printf("\n ");
  printf("\n Vektor posle sortirovki\n");
  printf("\n ");
 for (i=0; i<n ;i++)
printf(" %3d", mas[i]);
 
min_=0;
max_=0;
for ( i=0; i<n; i++)
{
    if (( min_ < mas[i]) && (min_> min) )
    min_=mas[i];
    
    if (( max_ > mas[i]) && (max_< max) )
    max_=mas[i];
 
}
printf("\n Vtoroi min %d", min_);
printf("\n Vtoroi max %d", max_);
 
 
 
        printf("max=%3d\n",max);
 
 
        printf("\n");
        system("PAUSE"); 
        return EXIT_SUCCESS;
}
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
28.03.2011, 14:50 10
Размер статического массива должен быть константой.
У вас два выхода:
- сделать массив динамическим (искать на эту тему по форуму)
- сделать массив заведомо большого размера, а после ввода, работать уже до n-ного элемента.
0
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
28.03.2011, 15:56  [ТС] 11
А это для чего? Не поняла...

Добавлено через 54 минуты
А если вот так???)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
        int i,j,n,k;
        int min,min_,max, max_, nmax, nmax_, nmin, nmin_;
        int sum,pr;
        int mas[n];
        time_t t;
        srand((unsigned) time(&t));
         printf("\n Vvedite razmernoct vektora\n");
        scanf ("%d",&n);
        printf("\n Ishodn vector A \n");
        printf("\n ");
        for (i=0; i<n ;i++)
        {
                mas[i]=rand()%20-10;
                printf(" %3d",mas[i]);
               
        }
         k = 0;
        for ( i=1;i<(n-1);i++)
        {
                for (j=0;j<(n-i);j++)
                {
                        if (mas[j]>mas[j+1])
                        {
                                k = mas[j];
                                mas[j] = mas[j+1];
                                mas[j+1]= k;
                        }
                }
}
 printf("\n ");
  printf("\n Vektor posle sortirovki\n");
  printf("\n ");
 for (i=0; i<n ;i++)
printf(" %3d", mas[i]);
 
 max=-30;
 max_=-30;
        for (i=0; i<n ;i++)
        {
                
                if (mas[i]>max)
                {
                        max=mas[i];
                    nmax=i;
        }
        }
        {
                mas[nmax]=-40;
                }
        
        for (i=0; i<n ;i++)
        {
            if (mas[i]>max_)
        {
                        max_=mas[i];
                    nmax_=i;
        }
        }
        for (i=0; i<n ;i++)
        {
                
                if (mas[i]<min)
                {
                        min=mas[i];
                    nmin=i;
        }
        }
        {
                mas[nmin]=40;
                }
        
        for (i=0; i<n ;i++)
        {
            if (mas[i]<min_)
        {
                        min_=mas[i];
                    nmin_=i;
        }
        }
 
printf("\n Vtoroi min %d", min_);
printf("\n Vtoroi max %d", max_);
 
 
 
      
 
 
        printf("\n");
        system("PAUSE"); 
        return EXIT_SUCCESS;
}
Почему минимум не находит второй?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
28.03.2011, 16:02 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Я не понял зачем два раза подряд сортировать массив, поэтому отсортировал в разные стороны.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
//int source[] = { -7, -7,  4,  4, -4,  4,  8,  1,  5,  2 };
 
int main()
{
    int i = 0, j = 0, buf = 0, size = 0, *data, *fmin, *fmax, *smax, *smin;
 
    printf ("Input size of array: ");
    scanf  ("%d", &size);
    
    srand ((unsigned) time(NULL));
    /* заполнение исходного массива случайными значениями */
    data = (int *) malloc (sizeof(int) * size);
    for (i = 0; i < size; ++i) 
        data[i] = rand() % 20 - 10;
 
    /* вывод содержимого */
    printf ("Content of the data array\n");
    for (i = 0; i < size; ++i)
        printf ("%2d ", data[i]);
    printf ("\n\n");
 
    /* сортировка */
    for (i = 0; i < size; ++i) {
        for (j = size - 1; j > i; --j) {
            if (data[j] > data[j - 1]) {
                buf = data[j - 1];
                data[j - 1] = data[j];
                data[j] = buf;
            }
        }
    }
 
    /* вывод содержимого */
    printf ("Content of the data array\n");
    for (i = 0; i < size; ++i)
        printf ("%2d ", data[i]);
    printf ("\n\n");
 
    /* поиск минимумов и максимумов */
    fmin = fmax = data;
    smin = smax = data + 1;
 
    for (i = 0; i < size; ++i) {
        if (data[i] > *fmax) {
            smax = fmax;
            fmax = &data[i];
        }
        else if (data[i] > *smax && data[i] < *fmax) 
            smax = &data[i];
        
        if (data[i] < *fmin) {
            smin = fmin;
            fmin = &data[i];
        }
        else if (data[i] < *smin && data[i] > *fmin)
            smin = &data[i];
    }
 
    printf ("first max = %3d, second max = %3d\n"
            "first min = %3d, second min = %3d\n\n",
            *fmax, *smax, *fmin, *smin);
 
    /* сортировка */
    //if ((smax - data) - (smin - data) < 0)
    //    printf ("can't sort data array because second min is locating more left than second max\n");
 
    for (i = smax - data; i <= smin - data; ++i) {
        for (j = smin - data; j > i; --j) {
            if (data[j] < data[j - 1]) {
                buf = data[j - 1];
                data[j - 1] = data[j];
                data[j] = buf;
            }
        }
    }
 
    /* вывод содержимого */
    printf ("Content of the data array\n");
    for (i = 0; i < size; ++i)
        printf ("%2d ", data[i]);
    printf ("\n\n");
 
    /* очистка памяти */
    free (data);
    return 0;
}
1
8 / 8 / 0
Регистрация: 18.04.2010
Сообщений: 39
28.03.2011, 17:19  [ТС] 13
Большое спасибо!!!
0
28.03.2011, 17:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2011, 17:19
Помогаю со студенческими работами здесь

Найти минимум и максимум заданной функции
можно ли сделать так чтобы прогамма находил и выдавала минимум и максимум заданной функции...

Найти максимум и минимум двух чисел
Подскажите как найти максимум и минимум двух чисел a и b. Значения для чисел нужно вводить с...

Найти среды введенных чисел минимум и максимум
Пожалуйста, напишите. не знаю как числа введенные в массив запихнуть. а если без массива в два...

Найти максимум/минимум во введенной последовательности (цикл while)
Здравствуйте.Пожалуйста, помогите написать программу с помощью цикла while: С клавиатуры вводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru