Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 21

Разбить на несколько функций

11.10.2013, 21:37. Показов 1609. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, подскажите пожалуйста, нужно разбить одну большую функцию, на несколько.
Вот исходные код с одной функцией:
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
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
 
 
 
int main(void)
{
 
int *x;
int i,l,a,b, n,s,p;
printf("vvedite razmer massiva:\n");
scanf("%d",&n);
x=new int [n];
for(int i=0;i<n;i++)
{
 
x[i]=rand()%12-rand()%12;
printf("element %d=%d\n",i,x[i]);
}
 
double max, sum, tmp;
int maxi, j;
printf("\nIshodniy massiv:\n");
for ( i = 0; i < n; ++i )
printf("x[%d] = %d\n", i, x[i]);
 
 
maxi = 0;
max = x[maxi];
for ( i = 1; i < n; ++i ){
if ( max < x[i] ){
maxi = i;
max = x[maxi];
}
}
printf("\nMaksimalniy po module element:\nx[%d] = %.d\t%.d\n", maxi, x[maxi], max); 
 
 
i = 0;
sum = 0.0;
while ( x[i] < 0 && i < n )
++i;
if ( i == n ){
printf("\nV massive net pologitelnih elementov\n");
goto THREE;
}
++i; 
while ( x[i] < 0 && i < n )
sum += x[i++];
if ( i == n ){
printf("\nV massive tolko odin pologitelniy element\n");
goto THREE;
}
printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %.d\n", sum);
 
 
THREE:
 
for ( j = n - 1; j >=0 && x[j] == 0.0; --j )
;
if ( j < 0 ){
printf("\nVse elementi v massive nulevie\n");
return 0;
}
for ( i = 0; i < j; ++i ){
while ( x[i] == 0 && i < j ){
tmp = x[i];
x[i] = x[j];
x[j--] = tmp;
}
}
 
printf("\nVse nuli v konce massiva\n");
for ( i = 0; i < n; ++i )
printf("x[%d] = %d\n", i, x[i]); 
 
 
getch ();
}
Такой вариант преподавателя не утраивает и я начал переделывать. Хотелось бы уточнить, как сделать, чтобы каждая функция обращалась к одному и тому же массиву, и что нужно будет написать в главной функции по выводу данных. Я делать начал, но понять так и не могу. Заранее спасибо. Вот мои старания по переделке.
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
 
 
int input()
{
int *x;
int i,n;
printf("vvedite razmer massiva:\n");
scanf("%d",&n);
x=new int [n];
for(int i=0;i<n;i++)
{
 
x[i]=rand()%12-rand()%12;
printf("element %d=%d\n",i,x[i]);
}
 
printf("\nIshodniy massiv:\n");
for ( i = 0; i < n; ++i )
printf("x[%d] = %d\n", i, x[i]);
return x[i],i,n;
}
 
 
 
 
double maximum ()//функция вычисления суммы
{
    int i,n,x;
    double max, sum, tmp;
    int maxi, j;
    n=input();//вводим переменную n
    x=input();
    printf("\n");//перенос строки
maxi = 0;
max = x[maxi];
for ( i = 1; i < n; ++i ){
if ( max < x[i] ){
maxi = i;
max = x[maxi];
}
}
printf("\nMaksimalniy po module element:\nx[%d] = %.d\t%.d\n", maxi, x[maxi], max);
    }
    return max;
}
 
double summa ()//функция вычисления суммы
{
    int n,x;
    double sum,u,y;
    n=input(n);//вводим переменную n
    x=input(x[i]);
    printf("\n");//перенос строки
 
    i = 0;
sum = 0.0;
while ( x[i] < 0 && i < n )
++i;
if ( i == n ){
printf("\nV massive net pologitelnih elementov\n");
goto THREE;
}
++i; 
while ( x[i] < 0 && i < n )
sum += x[i++];
if ( i == n ){
printf("\nV massive tolko odin pologitelniy element\n");
goto THREE;
}
printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %.d\n", sum);
    return sum;
}
 
int sort()
{
int x,n,i,j;
double tmp;
n=input(n);//вводим переменную n
    x=input(x[i]);
    printf("\n");//перенос строки
for ( j = n - 1; j >=0 && x[j] == 0.0; --j )
;
if ( j < 0 ){
printf("\nVse elementi v massive nulevie\n");
return 0;
}
for ( i = 0; i < j; ++i ){
while ( x[i] == 0 && i < j ){
tmp = x[i];
x[i] = x[j];
x[j--] = tmp;
}
}
 
printf("\nVse nuli v konce massiva\n");
for ( i = 0; i < n; ++i )
printf("x[%d] = %d\n", i, x[i]); 
}
 
int main(void)
{
 
int x,s,sort,max,n;
n=input(n);//вводим переменную n
    x=input(x[i]);
    printf("\n");//перенос строки
x=input(x[i]);
s=summa();
max=maximum();
 
 
getch ();
}
Добавлено через 1 час 56 минут
Так тоже попробовал, люди добрый - помогите пожалуйста

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
 
 
void Sort(double* x, int n)
{
    double tmp;
    int i, j;
    for ( j = n - 1; j >=0 && x[j] == 0.0; --j );
if ( j < 0 ){
printf("\nVse elementi v massive nulevie\n");
}
for ( i = 0; i < j; ++i ){
while ( x[i] == 0 && i < j ){
tmp = x[i];
x[i] = x[j];
x[j--] = tmp;
}
}
 
printf("\nVse nuli v konce massiva\n");
for ( i = 0; i < n; ++i )
printf("x[%d] = %d\n", i, x[i]); 
 
 
}
 
int input() //функция ввода данных
{
printf ("Vvedite znachenie n (ot 1 do 999) and press <ENTER>: "); //вывод на экран приглашения на ввод данных
char str[4],c;  //объявление символьных переменных
int pos=0;  //инициализация переменной количества вводимых символов
do //выполняем ввод данных
 {
  c = getch();  //считывание введённого символа без эхо-отображения
  if(c>='0'&&c<='9' && pos<3)  //если переменная соответствует диапазону 
                  //и не превышает разрешённое количество вводимых символов
   {
    str[pos++]=c; //двигаем позицию курсора на шаг вправо, и присваиваем введённое значение
    printf("%c",c); //то выводим его на экран
   }
  else if(c==0x08 && pos>0) //если введён <backspace>
   {
    pos--; //двигаем позицию курсора на шаг влево
    printf("%c %c",c,c);
   }
 } while(c!=0x0D); //ввод данных выполняется, пока не введён <enter>
str[pos]=0;
return atoi(str);  //преобразование символьной строки в число типа int и её возврат в основную функцию
}
 
void summa(double* x, int n)
{
    double sum;
    int i;
i = 0;
sum = 0.0;
while ( x[i] < 0 && i < n )
++i;
if ( i == n )
    {
    printf("\nV massive net pologitelnih elementov\n");
    }
++i; 
while ( x[i] < 0 && i < n )
sum += x[i++];
if ( i == n )
    {
    printf("\nV massive tolko odin pologitelniy element\n");
    }
printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %.d\n", sum);
 
}
 
void max(double* x, int n)
{
    double max;
int maxi;
max=0;
maxi = 0;
max = x[maxi];
for ( i = 1; i < n; ++i ){
if ( max < x[i] ){
maxi = i;
max = x[maxi];
}
}
printf("\nMaksimalniy po module element:\nx[%d] = %.d\t%.d\n", maxi, x[maxi], max); 
 
}
 
int main()
{
    double* x;
    int n, i;
    printf("Enter N: ");
    n=input();
    x= new double [n];
    for(i=0; i<n; ++i)
       scanf("%lf", &x[i]);
    summa(x,n);
    max(x,n);
    Sort(x, n);
    printf("Sorted array\n");
    for(i=0; i<n; ++i)
        printf("%f ", x[i]);
    printf("\n");
    free(x);
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2013, 21:37
Ответы с готовыми решениями:

Разбить программу на несколько функций
Как сделать эту программу в виде функций, сейчас она работает правильно. Программа ищет все локальные минимумы(элемент который меньше всех...

Помогите "разбить" программу на несколько функций
Есть готовая программа по матрицам, нужно &quot;разбить&quot; её на несколько функций (нахождение столбцов с равными элементами и их удаление и...

Разбить код на несколько файлов
Помогите разложить код по файлах. Rect.h Rect.cpp main.cpp #include &lt;iostream&gt; using namespace std; namespace cf{

5
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 113
11.10.2013, 23:17
к сожалению не видно функций, видно кучу условий, циклов и безусловных переходов, я даже не вижу одной большой функции, для начала, что должна делать программа?
0
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 3
11.10.2013, 23:25
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
//#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
 
 
 
 
void Sort(double* x, int n)
{
    double tmp;
    /*int i, j;
    for ( j = n - 1; j >=0 && x[j] == 0.0; --j );
    if ( j < 0 ){
        printf("\nVse elementi v massive nulevie\n");
    }
    for ( i = 0; i < j; ++i ){
        while ( x[i] == 0 && i < j ){
            tmp = x[i];
            x[i] = x[j];
            x[j--] = tmp;
        }
    }*/
 
    for(int i = 0; i < n; ++i)
    {
        for(int j = n-1; j>i; --j)
        {
            if(x[j - 1] < x[j])
            {
                tmp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = tmp;
            }
        }
    }
 
    //printf("\nVse nuli v konce massiva\n");
    //for (int i = 0; i < n; ++i )
    //  printf("x[%d] = %d\n", i, x[i]); 
 
 
}
 
int input() //функция ввода данных
{
    printf ("Vvedite znachenie n (ot 1 do 999) and press <ENTER>: "); //вывод на экран приглашения на ввод данных
    char str[4],c;  //объявление символьных переменных
    int pos=0;  //инициализация переменной количества вводимых символов
    do //выполняем ввод данных
    {
        c = getch();  //считывание введённого символа без эхо-отображения
        if(c>='0'&&c<='9' && pos<3)  //если переменная соответствует диапазону 
            //и не превышает разрешённое количество вводимых символов
        {
            str[pos++]=c; //двигаем позицию курсора на шаг вправо, и присваиваем введённое значение
            printf("%c",c); //то выводим его на экран
        }
        else if(c==0x08 && pos>0) //если введён <backspace>
        {
            pos--; //двигаем позицию курсора на шаг влево
            printf("%c %c",c,c);
        }
    } while(c!=0x0D); //ввод данных выполняется, пока не введён <enter>
    str[pos]=0;
    return atoi(str);  //преобразование символьной строки в число типа int и её возврат в основную функцию
}
 
void Summa(double* x, int n)
{
    double sum;
    int i;
    i = 0;
    sum = 0.0;
    int index1 = -1;
    int index2 = -1;
    for(int i = 0; i < n; ++i)
    {
        if(x[i] > 0)
        {
            index1 = i;
            break;          
        }
    }
 
    if(index1 >=0)
    {
        for(int i = index1 + 1; i < n; ++i)
        {
            if(x[i] > 0)
            {
                index2 = i;
                break;
            }
        }
    }
    
    if(index1 < 0 && index2 < 0)
    {
        printf("\nV massive net pologitelnih elementov\n");
    }
    else if(index1 >= 0 && index2 < 0 )
    {
        printf("\nV massive tolko odin pologitelniy element\n");
    }
 
    if(index2 > 0 )     
            n = index2;
        
    for(int i = index1+1; i < n; ++i)
    {       
        sum += x[i];        
    }
    
 
    //while ( x[i] < 0 && i < n )
    //  ++i;
    //if ( i == n )
    //{
    //  printf("\nV massive net pologitelnih elementov\n");
    //}
    //i = 0; 
    //while ( x[i] < 0 && i < n )
    //  sum += x[i++];
    //if ( i == n )
    //{
    //  printf("\nV massive tolko odin pologitelniy element\n");
    //}
 
    printf("\nIndex_left = %i", index1);
    printf("\nIndex_right = %i", index2);
    printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %f\n", sum);
 
}
 
void Max(double* x, int n)
{
    double max;
    int maxi = -1;
    //max=0;
    //maxi = 0;
    max = x[0];
    for ( int i = 0; i < n; ++i )
    {
        if(x[i] < 0)
            x[i] *= -1; // по модулю в условии
        if ( max < x[i] )
        {
            maxi = i;
            max = x[maxi];
        }
    }
    printf("\nMaksimalniy po module element:\nx[%d] = %f\n", maxi, max); 
 
}
 
int main()
{
    double* x;
    int n, i;
    printf("Enter N: ");
    n =input(); 
    printf("\n");
    x= new double [n];
    for(i=0; i<n; ++i)
    {
        printf("Enter digit: ");
        scanf("%lf", &x[i]);
    }
    Summa(x,n);
    Max(x,n);
 
    Sort(x, n);
    printf("Sorted array\n");
    for(i=0; i<n; ++i)
        printf("%f ", x[i]);
    printf("\n");
    free(x);
    return 0;
}
Добавлено через 1 минуту
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
//#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
 
 
 
 
void Sort(double* x, int n)
{
    double tmp;
    /*int i, j;
    for ( j = n - 1; j >=0 && x[j] == 0.0; --j );
    if ( j < 0 ){
        printf("\nVse elementi v massive nulevie\n");
    }
    for ( i = 0; i < j; ++i ){
        while ( x[i] == 0 && i < j ){
            tmp = x[i];
            x[i] = x[j];
            x[j--] = tmp;
        }
    }*/
 
    for(int i = 0; i < n; ++i)
    {
        for(int j = n-1; j>i; --j)
        {
            if(x[j - 1] < x[j])
            {
                tmp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = tmp;
            }
        }
    }
 
    //printf("\nVse nuli v konce massiva\n");
    //for (int i = 0; i < n; ++i )
    //  printf("x[%d] = %d\n", i, x[i]); 
 
 
}
 
int input() //функция ввода данных
{
    printf ("Vvedite znachenie n (ot 1 do 999) and press <ENTER>: "); //вывод на экран приглашения на ввод данных
    char str[4],c;  //объявление символьных переменных
    int pos=0;  //инициализация переменной количества вводимых символов
    do //выполняем ввод данных
    {
        c = getch();  //считывание введённого символа без эхо-отображения
        if(c>='0'&&c<='9' && pos<3)  //если переменная соответствует диапазону 
            //и не превышает разрешённое количество вводимых символов
        {
            str[pos++]=c; //двигаем позицию курсора на шаг вправо, и присваиваем введённое значение
            printf("%c",c); //то выводим его на экран
        }
        else if(c==0x08 && pos>0) //если введён <backspace>
        {
            pos--; //двигаем позицию курсора на шаг влево
            printf("%c %c",c,c);
        }
    } while(c!=0x0D); //ввод данных выполняется, пока не введён <enter>
    str[pos]=0;
    return atoi(str);  //преобразование символьной строки в число типа int и её возврат в основную функцию
}
 
void Summa(double* x, int n)
{
    double sum;
    int i;
    i = 0;
    sum = 0.0;
    int index1 = -1;
    int index2 = -1;
    for(int i = 0; i < n; ++i)
    {
        if(x[i] > 0)
        {
            index1 = i;
            break;          
        }
    }
 
    if(index1 >=0)
    {
        for(int i = index1 + 1; i < n; ++i)
        {
            if(x[i] > 0)
            {
                index2 = i;
                break;
            }
        }
    }
    
    if(index1 < 0 && index2 < 0)
    {
        printf("\nV massive net pologitelnih elementov\n");
    }
    else if(index1 >= 0 && index2 < 0 )
    {
        printf("\nV massive tolko odin pologitelniy element\n");
    }
 
    if(index2 > 0 )     
            n = index2;
        
    for(int i = index1+1; i < n; ++i)
    {       
        sum += x[i];        
    }
    
 
    //while ( x[i] < 0 && i < n )
    //  ++i;
    //if ( i == n )
    //{
    //  printf("\nV massive net pologitelnih elementov\n");
    //}
    //i = 0; 
    //while ( x[i] < 0 && i < n )
    //  sum += x[i++];
    //if ( i == n )
    //{
    //  printf("\nV massive tolko odin pologitelniy element\n");
    //}
 
    printf("\nIndex_left = %i", index1);
    printf("\nIndex_right = %i", index2);
    printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %f\n", sum);
 
}
 
void Max(double* x, int n)
{
    double max;
    int maxi = -1;
    //max=0;
    //maxi = 0;
    max = x[0];
    for ( int i = 0; i < n; ++i )
    {
        if(x[i] < 0)
            x[i] *= -1; // по модулю в условии
        if ( max < x[i] )
        {
            maxi = i;
            max = x[maxi];
        }
    }
    printf("\nMaksimalniy po module element:\nx[%d] = %f\n", maxi, max); 
 
}
 
int main()
{
    double* x;
    int n, i;
    printf("Enter N: ");
    n =input(); 
    printf("\n");
    x= new double [n];
    for(i=0; i<n; ++i)
    {
        printf("Enter digit: ");
        scanf("%lf", &x[i]);
    }
    Summa(x,n);
    Max(x,n);
 
    Sort(x, n);
    printf("Sorted array\n");
    for(i=0; i<n; ++i)
        printf("%f ", x[i]);
    printf("\n");
    free(x);
    return 0;
}
Добавлено через 1 минуту
могу предложить вот такой вариант...
0
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 21
11.10.2013, 23:55  [ТС]
Программа должна
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1.) максимальный по модулю элемент массива;
2.) сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.

Добавлено через 41 секунду
nalasco, у меня сейчас при запуске программа зациклилась на Enter Digit

Добавлено через 4 минуты
nalasco,
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
int main()
{
    double* x;
    int n, i;
 
    n =input(); 
    printf("\n");
    x= new double [n];
  for(int i=0;i<n;i++)
{
 
x[i]=rand()%12-rand()%12;
printf("element %d=%d\n",i,x[i]);
}
    Summa(x,n);
    Max(x,n);
 
    Sort(x, n);
    printf("Sorted array\n");
    for(i=0; i<n; ++i)
        printf("%f ", x[i]);
    printf("\n");
    free(x);
    return 0;
}
В главной функции кое что подкорректировал, просто массив у меня случайно задаётся

Добавлено через 1 минуту
сейчас машинный код завершается с 0
данные вроде какие то проскакивают, но ничего не выводит
в чем может дело быть?

Добавлено через 5 минут
Сейчас программный код такой
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
 
 
 
 
void Sort(double* x, int n)
{
    double tmp;
 
    for(int i = 0; i < n; ++i)
    {
        for(int j = n-1; j>i; --j)
        {
            if(x[j - 1] < x[j])
            {
                tmp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = tmp;
            }
        }
    }
 
}
 
int input() //функция ввода данных
{
    printf ("Vvedite znachenie n (ot 1 do 999) and press <ENTER>: "); //вывод на экран приглашения на ввод данных
    char str[4],c;  //объявление символьных переменных
    int pos=0;  //инициализация переменной количества вводимых символов
    do //выполняем ввод данных
    {
        c = getch();  //считывание введённого символа без эхо-отображения
        if(c>='0'&&c<='9' && pos<3)  //если переменная соответствует диапазону 
            //и не превышает разрешённое количество вводимых символов
        {
            str[pos++]=c; //двигаем позицию курсора на шаг вправо, и присваиваем введённое значение
            printf("%c",c); //то выводим его на экран
        }
        else if(c==0x08 && pos>0) //если введён <backspace>
        {
            pos--; //двигаем позицию курсора на шаг влево
            printf("%c %c",c,c);
        }
    } while(c!=0x0D); //ввод данных выполняется, пока не введён <enter>
    str[pos]=0;
    return atoi(str);  //преобразование символьной строки в число типа int и её возврат в основную функцию
}
 
void Summa(double* x, int n)
{
    double sum;
    int i;
    i = 0;
    sum = 0.0;
    int index1 = -1;
    int index2 = -1;
    for(int i = 0; i < n; ++i)
    {
        if(x[i] > 0)
        {
            index1 = i;
            break;          
        }
    }
 
    if(index1 >=0)
    {
        for(int i = index1 + 1; i < n; ++i)
        {
            if(x[i] > 0)
            {
                index2 = i;
                break;
            }
        }
    }
    
    if(index1 < 0 && index2 < 0)
    {
        printf("\nV massive net pologitelnih elementov\n");
    }
    else if(index1 >= 0 && index2 < 0 )
    {
        printf("\nV massive tolko odin pologitelniy element\n");
    }
 
    if(index2 > 0 )     
            n = index2;
        
    for(int i = index1+1; i < n; ++i)
    {       
        sum += x[i];        
    }
    
 
    printf("\nIndex_left = %i", index1);
    printf("\nIndex_right = %i", index2);
    printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %lf\n", sum);
 
}
 
void Max(double* x, int n)
{
    double max;
    int maxi = -1;
    max = x[0];
    for ( int i = 0; i < n; ++i )
    {
        if(x[i] < 0)
            x[i] *= -1; // по модулю в условии
        if ( max < x[i] )
        {
            maxi = i;
            max = x[maxi];
        }
    }
    printf("\nMaksimalniy po module element:\nx[%d] = %lf\n", maxi, max); 
 
}
 
int main()
{
    double* x;
    int n, i;
 
    n =input(); 
    printf("\n");
    x= new double [n];
  for(int i=0;i<n;i++)
{
 
x[i]=rand()%12-rand()%12;
printf("element %d=%lf\n",i,x[i]);
}
    Summa(x,n);
    Max(x,n);
    Sort(x, n);
    printf("Sorted array\n");
    for(i=0; i<n; ++i)
        printf("%lf ", x[i]);
    printf("\n");
    free(x);
    return 0;
}
Не выводит данные, соответствие с типами проверим
В чём может быть проблема?
0
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 3
15.10.2013, 01:11
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
 
 
 
 
void Sort(double* x, int n)
{
    double tmp;
 
    for(int i = 0; i < n; ++i)
    {
        for(int j = n-1; j>i; --j)
        {
            if(x[j - 1] < x[j])
            {
                tmp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = tmp;
            }
        }
    }
 
}
 
int input() //функция ввода данных
{
    printf ("Vvedite znachenie n (ot 1 do 999) and press <ENTER>: "); //вывод на экран приглашения на ввод данных
    char str[4],c;  //объявление символьных переменных
    int pos=0;  //инициализация переменной количества вводимых символов
    do //выполняем ввод данных
    {
        c = getch();  //считывание введённого символа без эхо-отображения
        if(c>='0'&&c<='9' && pos<3)  //если переменная соответствует диапазону 
            //и не превышает разрешённое количество вводимых символов
        {
            str[pos++]=c; //двигаем позицию курсора на шаг вправо, и присваиваем введённое значение
            printf("%c",c); //то выводим его на экран
        }
        else if(c==0x08 && pos>0) //если введён <backspace>
        {
            pos--; //двигаем позицию курсора на шаг влево
            printf("%c %c",c,c);
        }
    } while(c!=0x0D); //ввод данных выполняется, пока не введён <enter>
    str[pos]=0;
    return atoi(str);  //преобразование символьной строки в число типа int и её возврат в основную функцию
}
 
void Summa(double* x, int n)
{
    double sum;
    int i;
    i = 0;
    sum = 0.0;
    int index1 = -1;
    int index2 = -1;
    for(int i = 0; i < n; ++i)
    {
        if(x[i] >= 0)
        {
            index1 = i;
            break;          
        }
    }
 
    if(index1 >=0)
    {
        for(int i = index1 + 1; i < n; ++i)
        {
            if(x[i] >= 0)
            {
                index2 = i;
                break;
            }
        }
    }
    
    if(index1 < 0 && index2 < 0)
    {
        printf("\nV massive net pologitelnih elementov\n");
    }
    else if(index1 >= 0 && index2 < 0 )
    {
        printf("\nV massive tolko odin pologitelniy element\n");
    }
 
    if(index2 > 0 )     
            n = index2;
        
    for(int i = index1+1; i < n; ++i)
    {       
        sum += x[i];        
    }
    
 
    printf("\nIndex_left = %i", index1);
    printf("\nIndex_right = %i", index2);
    printf("\nSumma elementov mejdu pervim i vtorim pologitelnimi elmentami ravna %.2lf\n", sum);
 
}
 
void Max(double* x, int n)
{
    double max;
    int maxi = -1;
    max = x[0];
    for ( int i = 0; i < n; ++i )
    {
        if(x[i] < 0)
            x[i] *= -1; // по модулю в условии, эти изменения сохраняются для входного массива
        if ( max < x[i] )
        {
            maxi = i;
            max = x[maxi];
        }
    }
    printf("\nMaksimalniy po module element:\nx[%d] = %.2lf\n", maxi, max); 
 
}
 
int main()
{
    srand((unsigned int)time(NULL));
    double* x;
    int n, i;
 
    n =input(); 
    printf("\n");
    x= new double [n];
  for(int i=0;i<n;i++)
{
 
x[i]=rand()%12-rand()%12;
printf("element %d=%.2lf\n",i,x[i]);
}
    Summa(x,n);
    Max(x,n);
    Sort(x, n);
    printf("Sorted array\n");
    for(i=0; i<n; ++i)
        printf("%.2lf ", x[i]);
    printf("\n");
    free(x);
    return 0;
}
Добавлено через 10 минут
ошибок программа не выдает.
Добавлен генератор случайных чисел - программа работает корректно.
Выводит сумму элементов между первым и вторым положительными элементами массива, максимальный по модулю.
Судя по условию задачи, нужно отсортировать именно входящий массив. Тогда нужно изменить саму логику в поиске максимального элемента по модулю (чтобы не менялись значения входящего массива )
можно вот так

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Max(double* x, int n)
{
    double max;
    int maxi = -1;
    max = x[0];
    for ( int i = 0; i < n; ++i )
    {
      //  if(x[i] < 0)
      //      x[i] *= -1; // по модулю в условии, эти изменения сохраняются для входного массива
        if ( max < ((x[i] < 0) ?( x[i] * -1) : x[i]) )
        {
            maxi = i;
            max = x[maxi];
        }
    }
    printf("\nMaksimalniy po module element:\nx[%d] = %.2lf\n", maxi, max); 
 
}
дальше переместить все нули в конец массива, определив их колличество, и отсортировать только часть массива без нулей.
0
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 21
15.10.2013, 20:28  [ТС]
спасибо большое!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2013, 20:28
Помогаю со студенческими работами здесь

Thread разбить программу в несколько потоков
Всем привет! Народ, такая проблема, написала программу, теперь нужно её разбить на несколько потоков. Но вот беда, не умею пользоваться...

Как разбить код на несколько *.CPP*
Как разбить код на несколько *.CPP* Добрый вечер - при изучении языка С где то в литературе видемо упустил такую информацию и не где...

Реализовать несколько функций
Реализовать несколько функций с различным числом аргументов и типами значений,что возвращаются, можно выбрать предложенные или произвольные...

Добавить несколько функций
привет всем) вот есть код на С++ в консольном приложении VS 2008 - калькулятор с функциями сложения, вычитания, умножения и деления....

Несколько функций в одной программе
Проблема такая. Пишу программу, хочу, чтобы при выборе определенного номера (задания) программа переходила к этому заданию. Напечатал на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru