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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
#1

Операции с функциями - C++

24.02.2011, 17:42. Просмотров 483. Ответов 6
Метки нет (Все метки)

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

Ошибок при компиляции нет, однако при выполнении программа выдает странные результаты

Вот текст:
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
#include <iostream>
#include <stdlib.h>
#include <iomanip.h>
#include <time.h>
 
char* Rus(const char* text);
using namespace std;
 
const int jc0=5; //5%
const int jcst=3;//3%
const int Tmax=125;//125* С
const int Tmin=-25;//25* C
const float deltaL=0.01;//10 в -2 степени
const int K3=3;//просто 3
 
double vvodnachdannix(int n);//ввод данных
void vivodnachdannix(double vvodnachdannix());//вывод данных на экран
 
int main()
{
setlocale(0,"Rus");
int n;
 
cout<<"Введите кол-во Конденсаторов:"<<endl;
cin>>n;
vvodnachdannix(n);
return 0;
}
 
double vvodnachdannix(int n)
{
srand(time(0));
//Обьявление массивов и указателей на них
double C[n];//50...5000 пФ
double *CPtr=C;
 
int jc[n];// 5...15 %
int *jcPtr=jc;
 
double Urab[n];//5...60 В
double *UrabPtr=Urab;
 
double Kf[n];// 1...5
double *KfPtr=Kf;
 
int i;
 
for(i=0;i<n;i++)
{
C[i]=50+(rand()%4950);
cout<<"Сгенерированное значение С="<<C<<"  пФ"<<endl;
}
for(i=0;i<n;i++)
{
cout<<"Считанное значение Jc из файла:"<<endl;
//пока не знаю как реализовать,использую в кач-ве заглушки
//ввод с клавиатуры массива, потом надо заменить
cin>>jc[i];
}
for(i=0;i<n;i++)
{
Urab[i]=(5+(rand()%56));
cout<<"Сгенерированное значение Urab="<<Urab<<"  B"<<endl;
}
for(i=0;i<n;i++)
{
cout<<"Введите "<<i+1<<" значение Кф"<<" из "<<n<<" : "<<endl;
cin>>Kf[i];
}
 
return 0;
}
 
 
void vivodnachdannix(double vvodnachdannix(int n),int n)
{
int i;
double *C[n];
int *jc[n];
double *Urab[n];
double *Kf[n];
 
cout<<setw(15)<<"C, пФ"<<setw(15)<<"Jc,%"<<setw(15)<<"Urab, B"<<setw(15)<<"Kф"<<endl;
for(i=0;i<n;i++)
cout<<setw(15)<<C[i]<<setw(15)<<jc[i]<<setw(15)<<Urab[i]<<setw(15)<<Kf[i]<<endl;
}
Вот пример работы
0
Миниатюры
Операции с функциями  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2011, 17:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Операции с функциями (C++):

Почему в с++ бинарные операции должны перегружаться внешними функциями? - C++
почему в с++ бинарные операции должны перегружаться внешними функциями?

Перегрузить операции сравнения комплексных чисел и операции потокового вывода - C++
Создать класс комплексное число. Перегрузить операции сравнения комплексных чисел! =, ==,&gt;, &lt;,&gt; =, &lt;= И операции потокового ввода-вывода. ...

Битовые операции и операции смещения языка С - C++
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

Заменить операции ifstream на операции fprintf - C++
Собственно как и написано в заголовке заменить операции ifstream на fprintf со всеми вытекающими(типо getline) необходимо мне. Помогите...

Записать логические выражения, используя условные операторы, операции отношений и логические операции - C++
Записать логические выражения, используя условные операторы, операции отношений и логические операции алгоритмического языка ...

Калькулятор с функциями - C++
Задали написать калькулятор,действия объединить функции,прописать ошибку при делении на 0,пока не нажму клавишу,программа не...

6
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
24.02.2011, 19:15  [ТС] #2
вверх

Добавлено через 17 минут
кое-что исправил, ошибка в 26 строке(не понятно, где)
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
#include <iostream>
#include <stdlib.h>
#include <iomanip.h>
#include <time.h>
 
char* Rus(const char* text);
using namespace std;
 
const int jc0=5; //5%
const int jcst=3;//3%
const int Tmax=125;//125* С
const int Tmin=-25;//25* C
const float deltaL=0.01;//10 в -2 степени
const int K3=3;//просто 3
 
double vvodnachdannix(int n);//ввод данных
void vivodnachdannix(double vvodnachdannix(),int n);//вывод данных на экран
 
int main()
{
setlocale(0,"Rus");
int n;
 
cout<<"Введите кол-во Конденсаторов:"<<endl;
cin>>n;
vivodnachdannix( double vvodnachdannix(int n) );
return 0;
}
 
double vvodnachdannix(int n)
{
srand(time(0));
//Обьявление массивов и указателей на них
double C[n];//50...5000 пФ
double *CPtr=C;
 
int jc[n];// 5...15 %
int *jcPtr=jc;
 
double Urab[n];//5...60 В
double *UrabPtr=Urab;
 
double Kf[n];// 1...5
double *KfPtr=Kf;
 
int i;
 
for(i=0;i<n;i++)//заполняем С
{
C[i]=50+(rand()%4950);
cout<<"Сгенерированное значение С="<<C<<"  пФ"<<endl;
}
 
for(i=0;i<n;i++)//заполняем jc
{
cout<<"Считанное значение Jc из файла:"<<endl;
//пока не знаю как реализовать,использую в кач-ве заглушки
//ввод с клавиатуры массива, потом надо заменить
cin>>jc[i];
}
 
for(i=0;i<n;i++)//заполняем Urab
{
Urab[i]=(5+(rand()%56));
cout<<"Сгенерированное значение Urab="<<Urab<<"  B"<<endl;
}
 
for(i=0;i<n;i++)//заполняем Kf
{
cout<<"Введите "<<i+1<<" значение Кф"<<" из "<<n<<" : "<<endl;
cin>>Kf[i];
}
 
return 0;
}
 
 
void vivodnachdannix(double vvodnachdannix(int n),int n)
{
int i;
double *C[n];
int *jc[n];
double *Urab[n];
double *Kf[n];
 
cout<<setw(15)<<"C, пФ"<<setw(15)<<"Jc,%"<<setw(15)<<"Urab, B"<<setw(15)<<"Kф"<<endl;
 
for(i=0;i<n;i++)
{
cout<<setw(15)<<C[i]<<setw(15)<<jc[i]<<setw(15)<<Urab[i]<<setw(15)<<Kf[i]<<endl;
}
}
0
Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 94
24.02.2011, 19:22 #3
исправил все, также в комментариях написал где ошибки
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
/*определитесь с языком... у С++ хедеры без .h*/
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
 
//char* Rus(const char* text);
using namespace std;
 
/*Зачем объявлять переменные, если их не использовать?)*/
//const int jc0=5; //5%
//const int jcst=3;//3%
//const int Tmax=125;//125* С
//const int Tmin=-25;//25* C
//const float deltaL=0.01;//10 в -2 степени
//const int K3=3;//просто 3
 
void vvodnachdannix(double*, double*, double*, int*, int);//ввод данных
/*...Это что такое?? функция принимает функцию????!!!*/
//void vivodnachdannix(double vvodnachdannix());//вывод данных на экран
void vivodnachdannix(double*, double*, double*, int*, int); //теперь эта функция работает =)
 
int main()
{
    setlocale(0,"Rus");
    int n, *jc;
    cout << "Введите кол-во Конденсаторов:"<<endl;
    cin >> n;
    double *C = new double[n], *Urab = new double[n], *Kf = new double[n];
    jc = new int [n];
    vvodnachdannix(C, Urab, Kf, jc, n);
    vivodnachdannix(C, Urab, Kf, jc, n);
    return 0;
}
 
void vvodnachdannix(double *c, double *u, double *k, int *j, int n)
//double vvodnachdannix(int n);//ввод данных
{
    srand(static_cast<unsigned>(time(NULL)));
//Обьявление массивов и указателей на них
/*Так динамические массивы нельзя объявлять,
да и все равно по выходу из функции массивы уничтожаться =) */
    //double C[n];//50...5000 пФ
    //double *CPtr=C;
 
    //int jc[n];// 5...15 %
    //int *jcPtr=jc;
 
    //double Urab[n];//5...60 В
    //double *UrabPtr=Urab;
 
    //double Kf[n];// 1...5
    //double *KfPtr=Kf;
 
    //int i;
 
    for (int i = 0; i < n; i++)
    {
        c[i]=50+(rand()%4950);
        /*Тут выводит адрес 1го элемента, а не сгенерированное значение*/
        //cout<<"Сгенерированное значение С="<<C<<"  пФ"<<endl;
        cout<<"Сгенерированное значение С="<<c[i]<<"  пФ"<<endl;
    }
    for (int i = 0; i < n; i++)
    {
        cout << "Считанное значение Jc из файла:"<<endl;
//пока не знаю как реализовать,использую в кач-ве заглушки
/*
из файла очень легко считывать
надо дописать
#include <fstream>
....
 
ofstream out("ваш файл, с раcширением");
int *arr, n;
out << n; //пусть первое число в файле - количество чисел в файле
arr = new int[n];
for (size_t i = 0; i < n; i++)
    out << arr[i];  //теперь содержимое файла будет в массиве
....
 
*/
//ввод с клавиатуры массива, потом надо заменить
        cin >> j[i];
    }
    for (int i = 0; i < n; i++)
    {
        u[i]=(5+(rand()%56));
        /*Ошибка идентична верхней*/
        cout << "Сгенерированное значение Urab=" << u[i] << "  B" << endl;
    }
    for(int i = 0; i < n; i++)
    {
        cout << "Введите " << i+1 << " значение Кф" << " из " << n << " : " << endl;
        cin >> k[i];
    }
/*Зачем функции что то возвращать? она же только вводит элементы в массив, ничего не считает*/
    //return 0;
}
 
//void vivodnachdannix(double vvodnachdannix(int n),int n)
void vivodnachdannix(double *c, double *u, double *k, int *j, int n)
{
    //int i;
    /*Вы вводили одномерные массивы, а выводить хотите матрицы, нехорошо =)*/
    //double *C[n];
    //int *jc[n];
    //double *Urab[n];
    //double *Kf[n];
 
    cout << setw(15) << "C, пФ" << setw(15) << "Jc,%" << setw(15) << "Urab, B" << setw(15) << "Kф" << endl;
    for (int i = 0; i < n; i++)
        cout << setw(15) << c[i] << setw(15) << j[i] << setw(15) << u[i] << setw(15) << k[i] << endl;
}
1
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
24.02.2011, 19:54  [ТС] #4
[QUOTE=Vandris;1397836]
C++
1
2
3
4
5
6
7
/*Зачем объявлять переменные, если их не использовать?)*/
//const int jc0=5; //5%
//const int jcst=3;//3%
//const int Tmax=125;//125* С
//const int Tmin=-25;//25* C
//const float deltaL=0.01;//10 в -2 степени
//const int K3=3;//просто 3
это только начало программы, эти числа будут использоваться в дальнейших расчётах
C++
1
2
3
4
5
/*определитесь с языком... у С++ хедеры без .h*/
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
нам преподаватель сказал, что надо писать с .h , я так и пишу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
из файла очень легко считывать
надо дописать
#include <fstream>
....
 
ofstream out("ваш файл, с раcширением");
int *arr, n;
out << n; //пусть первое число в файле - количество чисел в файле
arr = new int[n];
for (size_t i = 0; i < n; i++)
    out << arr[i];  //теперь содержимое файла будет в массиве
....
 
*/
мы это пока не учили, так что пока поставил ручной ввод.

Добавлено через 26 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < n; i++)
    {
ofstream out("kurs.txt");
int *jc, n;
out << n; //пусть первое число в файле - количество чисел в файле
jc = new int[n];
for (size_t i = 0; i < n; i++)
    out << jc[i];  //теперь содержимое файла будет в массиве
 
for (size_t i = 0; i < n; i++)
    out << jc[i];  
cout << "Считанное значение Jc из файла:"<<jc[i]<<endl;
    }
считывание выглядит так?
P.S. содержимое файла выглядит примерно так
2
4
3
5
2
4
... и т.д., зависит от n
0
Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 94
24.02.2011, 20:01 #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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(0,"Rus");
    ifstream out("kurs.txt");
    int *jc, n;
    out >> n; //пусть первое число в файле - количество чисел в файле
    jc = new int[n];
    for (size_t i = 0; i < n; i++)
        out >> jc[i];  //теперь содержимое файла будет в массиве
 
    for (size_t i = 0; i < n; i++)
    {
        out >> jc[i];
        cout << "Считанное значение Jc из файла:" << jc[i] << endl;
    }
/*По хорошему надо бы еще освободить память из под массива, но раз тут программа и заканчивается...*/
    return 0;
}
тестировал на таком содержимом файла:
10
1 2 3 4 5 6 7 8 9 10
1
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
24.02.2011, 20:14  [ТС] #6
собрал все в кучу, вот что получилось:
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
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
#include <fstream>
 
using namespace std;
 
const int jc0=5; //5%
const int jcst=3;//3%
const int Tmax=125;//125* С
const int Tmin=-25;//25* C
const float deltaL=0.01;//10 в -2 степени
const int K3=3;//просто 3
 
void vvodnachdannix(double*, double*, double*, int*, int);
void vivodnachdannix(double*, double*, double*, int*, int); 
 
int main()
{
    setlocale(0,"Rus");
    int n;
    cout << "Введите кол-во Конденсаторов:"<<endl;
    cin >> n;
    double *C = new double[n], *Urab = new double[n], *Kf = new double[n];
   int *jc = new int [n];
    vvodnachdannix(C, Urab, Kf, jc, n);
    vivodnachdannix(C, Urab, Kf, jc, n);
    return 0;
}
 
void vvodnachdannix(double *c, double *urab, double *kf, int *jc, int n)
 
{
    srand(static_cast<unsigned>(time(NULL)));
    int i;
 
    for (int i = 0; i < n; i++)
    {
        c[i]=50+(rand()%4950);
        cout<<"Сгенерированное значение С="<<c[i]<<"  пФ"<<endl;
    }
    
    ifstream out("kurs.txt");
 
    out >> n; 
 
    for (size_t i = 0; i < n; i++)
        out >> jc[i];  
 
    for (size_t i = 0; i < n; i++)
    {
        out >> jc[i];
        cout << "Считанное значение Jc из файла:" << jc[i] << endl;
    }
 
    
    for (int i = 0; i < n; i++)
    {
        urab[i]=(5+(rand()%56));
        cout << "Сгенерированное значение Urab=" << urab[i] << "  B" << endl;
    }
    for(int i = 0; i < n; i++)
    {
        cout << "Введите " << i+1 << " значение Кф" << " из " << n << " : ";
        cin >> kf[i];
    }
}
 
 
void vivodnachdannix(double *c, double *urab, double *kf, int *jc, int n)
{
    cout<<"\n\n";
    cout<<"Начальные значения:";
    cout<<"\n\n";
    cout<< setw(15) << "C, пФ" << setw(15) << "Jc,%" << setw(15) << "Urab, B" << setw(15) << "Kф" << endl;
    cout<<"\n\n";
    for (int i = 0; i < n; i++)
        cout << setw(15) << c[i] << setw(15) << kf[i] << setw(15) << urab[i] << setw(15) << kf[i] << endl;
}
Пару раз протестировал, вроде бы все правильно.
Буду писать дальше, спасибо большое, Vandris
0
Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 94
24.02.2011, 20:18 #7
будут еще вопросы, пишите, тут на них ответят
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2011, 20:18
Привет! Вот еще темы с ответами:

Хэлп с функциями - C++
1.Написать функцию, которая умножает поэлементно 2 массива. Параметрами функции должны быть оба массива и массив, в который записывается...

Работа с функциями - C++
Народ, объясните мне пожалуйста почему в функциях countX передаются вот такие данные vir1 = countX ( x1*x1, x2, M_PI_2); ...

Работа с функциями - C++
Пожалуйста помогите с прогой !))) *Задан массив А(20). Определить знакопеременную сумму а1*–*а2*+*а3*–*а4*+*…. Прогу я сделал с...

Работа с функциями - C++
Помогите кто может с программой! Очень нужно, для будущего авиации))) Вычислить сумму значений функций Z=f(u,t) Z=f(sinX+cosY, X+Y) +...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
24.02.2011, 20:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru