Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Где ошибка? http://www.cyberforum.ru/cpp-beginners/thread974966.html
Подскажите пожалуйста где ошибка ? #include "stdafx.h" #include <iostream> #include <math.h> #include <iomanip> using namespace std; int _tmain() {
C++ Контроль ввода данных Здравствуйте! Меня интересует ваше мнение по организации этого вопроса. Предположим что у нас несколько полей ввода и в конце надо сохранить изменения. Чаще всего встречаются схемы: 1. при вводе... http://www.cyberforum.ru/cpp-beginners/thread974960.html
C++ Перевожу программу с Pascal, проверьте правильность перевода
Вот код на PAscal {Dan spisok iz n celih chisel a1, a2, ..., an. Naiti samuyu dlinnuyu neubivayushuyu posledovaelnost' elementov spiska} program prog1324; uses crt; type PList=^TList; ...
Другой способ удаления объекта из бинарника C++
Здравия желаю! Этот участок кода удаляет искомую структуру из файла, накладывая на неё хвост. В конце хвоста остается дублированная структура, которая удаляется уменьшением размера файла. Это не...
C++ Передача входного потока в дочерний процесс http://www.cyberforum.ru/cpp-beginners/thread974940.html
Воспользовался вот этим кодом, добавив в код процесса-клиента (дочернего) считывание строки с помощью getchar(). В результате получилось что консоль ожидает ввода, но ввести что-либо невозможно....
C++ Напишите программу, печатающую гистограмму появления различных введенных символов во входной строке 1) Напишите программу, печатающую гистограмму появления различных введенных символов во входной строке. подробнее

Показать сообщение отдельно
apowOw
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 21

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

11.10.2013, 21:37. Просмотров 467. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru