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

Создать функцию с параметром - C++

Восстановить пароль Регистрация
 
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 13:18     Создать функцию с параметром #1
Вот код. Там a,b,x,N, InFile глобальные переменные. мне нужно разбить прогу на модули. для этого глобальные нужно запихнуть в функцию с параметром. как это сделать?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2010, 13:18     Создать функцию с параметром
Посмотрите здесь:

нужно функцию с параметром создать C++
как в конструкторе класса передать параметром указатель на функцию? C++
C++ Написать функцию PrnStruct() с одним параметром типа TMyStruct, выводящую на печать значения полей структуры.
C++ Создать программу,которая находит минимальное из 3х чисел. Для нахождения минимального числа создать функцию
создать функцию, параметром которой является одномерный массив и его размерность C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
28.12.2010, 13:22     Создать функцию с параметром #2
Цитата Сообщение от Anarchy Посмотреть сообщение
Вот код.
где??????
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 13:23  [ТС]     Создать функцию с параметром #3
#include <stdio.h>
#include <process.h>


void cls(){
for(int i=0; i<25; i++) printf("\n");
}
void allocmatrix(){
//allocate memory for matrixes
float **a, *b, *x;
int N;
int i,j;
x = new float[N];
b = new float[N];
a = new float*[N];
if(x==NULL || b==NULL || a==NULL){
printf("\nNot enough memory to allocate for %d equations.\n", N);
exit(-1);
}
for(i=0; i<N; i++){
a[i] = new float[N];
if(a[i]==NULL){
printf("\nNot enough memory to allocate for %d equations.\n", N);
}
}
for(i=0; i<N; i++){
for(j=0; j<N; j++){
a[i][j]=0;
}
b[i]=0;
x[i]=0;
}
}
void count_num_lines(){
//count number of lines in input file - number of equations

int N;


FILE* InFile=NULL;
int nelf=0; //non empty line flag
do{
nelf = 0;
while(fgetc(InFile)!='\n' && !feof(InFile)) nelf=1;
if(nelf) N++;
}while(!feof(InFile));
}
void diagonal(){
float **a, *b;
int N;


int i, j, k;
float temp=0;
for(i=0; i<N; i++){
if(a[i][i]==0){
for(j=0; j<N; j++){
if(j==i) continue;
if(a[j][i] !=0 && a[i][j]!=0){
for(k=0; k<N; k++){
temp = a[j][k];
a[j][k] = a[i][k];
a[i][k] = temp;
}
temp = b[j];
b[j] = b[i];
b[i] = temp;
break;
}
}
}
}
}
void freematrix(){
//free memory for matrixes
float **a, *b, *x;
int N;

int i;
for(i=0; i<N; i++){
delete [] a[i];
}
delete [] a;
delete [] b;
delete [] x;
}
void printmatrix(){
//print matrix "a"
float **a, *b;
int N;
int i=0,j=0;
printf("\n");
for(i=0; i<N; i++){
for(j=0; j<N; j++){
printf(" %+.2f*X%d", a[i][j], j);
}
printf(" =%.2f\n", b[i]);
}
}
void printresult(){
int N;
float *x;
int i=0;
printf("\n");
printf("Result\n");
for(i=0; i<N; i++){
printf("X%d = %.2f\n", i, x[i]);
}
}
void readmatrix(){
float **a, *b;
int N;
FILE* InFile=NULL;
int i=0,j=0;
//read matrixes a and b from input file
for(i=0; i<N; i++){
for(j=0; j<N; j++){
fscanf(InFile, "%f", &a[i][j]);
}
fscanf(InFile, "%f", &b[i]);
}
}
void testsolve(){
float **a, *b, *x;
int N;
//test that ax=b
int i=0,j=0;
printf("\n");
for(i=0; i<N; i++){
float s = 0;
for(j=0; j<N; j++){
s += a[i][j]*x[j];
}
printf("%.2f\t%.2f\n", s, b[i]);
}
}
void main(){
float **a, *b, *x;
int N;
FILE* InFile=NULL;

int i=0,j=0, k=0;
cls();
do{

InFile = fopen("test.txt", "rt");
}while(InFile==NULL);
count_num_lines();
allocmatrix();
rewind(InFile);
//read data from file
readmatrix();
//check if there are 0 on main diagonal and exchange rows in that case
diagonal();
fclose(InFile);
printmatrix();
//process rows
for(k=0; k<N; k++){
for(i=k+1; i<N; i++){
if(a[k][k]==0){
printf("\nSolution is not exist.\n");
return;
}
float M = a[i][k] / a[k][k];
for(j=k; j<N; j++){
a[i][j] -= M * a[k][j];
}
b[i] -= M*b[k];
}
}
printmatrix();
for(i=N-1; i>=0; i--){
float s = 0;
for(j = i; j<N; j++){
s = s+a[i][j]*x[j];
}
x[i] = (b[i] - s) / a[i][i];
}

InFile = fopen("test.txt", "rt");
readmatrix();
fclose(InFile);
printmatrix();
testsolve();
printresult();
freematrix();
}

Добавлено через 30 секунд
RUSya82 комп тупит, не привязался файл
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
28.12.2010, 13:40     Создать функцию с параметром #4
а теги форматирования не пробовали. Ни отступов, ничего. Код нечитаем
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 13:47  [ТС]     Создать функцию с параметром #5
вот сама прога на visual C
Вложения
Тип файла: rar Gauss.rar (224.6 Кб, 7 просмотров)
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
28.12.2010, 14:13     Создать функцию с параметром #6
Цитата Сообщение от Anarchy Посмотреть сообщение
запихнуть в функцию с параметром.
Так просто объявите их в главной функции и передайте нужный параметр в функцию, по ссылке или по значению.
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 14:26  [ТС]     Создать функцию с параметром #7
А можно пример? Просто я слаб в С, и для наглядности пример не помешал бы)
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
28.12.2010, 14:32     Создать функцию с параметром #8
Вычисление определителя:
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
 
void input(float A[][16], int& n);//функция ввода матрицы,вводит с клавиатуры значения членов матрицы
//выводит полученную матрицу на экран.порядок матрицы не более 10.
double opr(float A[][16], int n);//вычисляет определитель матрицы
double dopoln(float A[][16], int l, int n);//вычисляет алгебраическое дополнение, вызывается в функции определителя
 
int main()
{
 clrscr();
 int n;
 float A[16][16];
 double op;
 input (A, n);
 op = opr(A, n);
 cout.setf(ios::fixed);//вывод данных в формате с фиксированной запятой
 cout.setf(ios::showpoint);//все числа выводятся с десятичным разделителем
 cout.precision(5);//выводится 5 знаков после запятой
 cout << " opredelitel' matritsy raven " << op << endl;
 getch();
 return 0;
}
void input(float A[][16], int& n)
{
 int i, j;//управляющие переменные,i-строки,j-столбцы
 do
 {
 cout << "VVedite poryadok matritsy, 0<n<10 \n";
 cin >> n;
 if ((n<0)||(n>15))
 cout << "ERROR!!!\n";
 }while ((n<0)||(n>15));//цикл запрашивает у пользователя порядок матрицы,если n<0,или n>10,то выводится сообщение об ошибке
 cout << "VVedite elementy matritsy po strokam \n";
 for (i=1;i<=n;i++)//цикл заполнения строк
 {
  for (j=1;j <=n; j++)//цикл заполнения столбцов
  {
  cout << "A[" << i << "][" << j << "] = ";
  cin >> A[i][j];
  }
  cout << endl;
 }
 cout << "vy vveli matritsy :\n";
 for (i=1;i<=n;i++)//вывод полученной матрицы на экран
 {
  for (j=1;j<=n;j++)
  cout << setw(5) << A[i][j];
  cout << endl;
 }
}
 
double opr(float A[][16], int n)
 
{
 int j;
  double op;
 if (n>3)//если порядок матрицы больше 3,то определитель вычисляется через алгебраическое дополнение
 {
  for (j=1;j<=n;j++)//определитель вычисляется по первой строке
  op += A[1][j] * dopoln(A,j,n);
  return (op);
 }
 else if (n==3)//если определитель равен 3,то вычисляется методом треугольника
 op = A[1][1] * A[2][2] * A[3][3] + A[1][2]*A[2][3]*A[3][1] + A[1][3] * A[2][1] * A[3][2] - A[1][2] * A[2][1] * A[3][3] - A[1][1] * A[2][3] * A[3][2] - A[1][3] * A[2][2] * A[3][1];
 else if (n==2)//а если двум,то просто крест-накрест
 op = A[1][1] * A[2][2] - A[1][2] * A[2][1];
 else if (n==1)//ну а если 1,то естественно...
 op = A[1][1];
 return (op);
 
}
 
 
 double dopoln(float A[][16], int l, int n)
 
{
 int i, j;
  float X[16][16];
 double d;
 for (i=1;i<n;i++)//цикл нахождения минора матрицы,по первой строке.Х[10][10]- минор матрицы
 {
     for (j=1;j<n;j++)
   {
    if (j<l)
    X[i][j] = A[i+1][j];
    else
    X[i][j] = A[i+1][j+1];
   }
 }
   d = opr(X, n-1);
  return ( pow((-1), 1+l) * d);
}
правда это С++, но передача параметров от С тут не отличается
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 21:56  [ТС]     Создать функцию с параметром #9
Спасибо

Добавлено через 7 часов 23 минуты
а как для файла писать параметр? и нужно ли в вызове указатель писать?
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
28.12.2010, 22:12     Создать функцию с параметром #10
Цитата Сообщение от Anarchy Посмотреть сообщение
а как для файла писать параметр? и нужно ли в вызове указатель писать?
Не проще в качестве параметра в функцию передавать имя файла, а там открывать поток.

Добавлено через 10 секунд
Цитата Сообщение от Anarchy Посмотреть сообщение
а как для файла писать параметр? и нужно ли в вызове указатель писать?
Не проще в качестве параметра в функцию передавать имя файла, а там открывать поток.
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 22:25  [ТС]     Создать функцию с параметром #11
В прототипе например
C
1
void allocmatrix(test.txt)
а в прототипе уже
C
1
2
FILE* InFile=NULL
void allocmatrix(test.txt)
?
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
28.12.2010, 23:33     Создать функцию с параметром #12
C++
1
2
3
4
5
6
7
void allocmatrix(test.txt)
{
    FILE* InFile;
    InFile = fopen(test.txt, w);
    ...
    fclose();
}
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
29.12.2010, 03:56  [ТС]     Создать функцию с параметром #13
мне компилятор выдает ошибку error C2061: syntax error : identifier 'test' в прототипе

Добавлено через 15 минут
мне компилятор выдает ошибку error C2061: syntax error : identifier 'test' в прототипе
KEKCoGEN
Модератор
 Аватар для KEKCoGEN
1712 / 1590 / 386
Регистрация: 28.12.2010
Сообщений: 6,489
29.12.2010, 06:41     Создать функцию с параметром #14
C++
1
2
3
4
5
6
7
 void allocmatrix(char* fname)
{
    FILE* InFile;
    InFile = fopen(fname, w);
    ...
    fclose();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 07:03     Создать функцию с параметром
Еще ссылки по теме:

C++ Можно ли сделать функцию с параметром
C++ Создать функцию, параметром которой является одномерный массив
Создать папку, название которой является первым параметром команды C++

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

Или воспользуйтесь поиском по форуму:
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
29.12.2010, 07:03     Создать функцию с параметром #15
void allocmatrix(test.txt)
Да, я че то запарился.
KEKCoGEN, правильно написал
Yandex
Объявления
29.12.2010, 07:03     Создать функцию с параметром
Ответ Создать тему
Опции темы

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