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

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

Восстановить пароль Регистрация
 
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
24.02.2011, 17:42     Операции с функциями #1
На данном этапе написания программы, нужно ввести(либо сгенерировать) значения некоторых параметров конденсаторов ( используется функция 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;
}
Вот пример работы
Миниатюры
Операции с функциями  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2011, 17:42     Операции с функциями
Посмотрите здесь:

C++ Непонятки с функциями
Программа с функциями C++
C++ Работа с функциями
C++ Работа с функциями..!
Помощь с функциями C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
}
Vandris
 Аватар для Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 90
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;
}
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
Vandris
 Аватар для Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 90
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
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2011, 20:18     Операции с функциями
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Vandris
 Аватар для Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 90
24.02.2011, 20:18     Операции с функциями #7
будут еще вопросы, пишите, тут на них ответят
Yandex
Объявления
24.02.2011, 20:18     Операции с функциями
Ответ Создать тему
Опции темы

Текущее время: 00:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru