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

Передача массивов и параметров с одной функции в другую - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Конструктор копии http://www.cyberforum.ru/cpp-beginners/thread811420.html
Конструктор копии вызывается при: 1)явном создании копии 2)при передачи параметров в функцию (по значению) 3)при возвращении объекта из функции напиши пожалуйста примеры
C++ Подскажите отладить запись в файл и считывание с него Я написал программу, она работает с использованием fprintf() и fscanf(), но задание сделать с fwrite() и fread() - вот с ними у меня выводит бред в файл тоже записывает бред.. #include <stdio.h> #include <locale.h> //Чтоб Visual понимал русские символы #include <string.h> #include <conio.h> struct SchoolBoys{ //Определение структуры char num; char name; int SchoolNumber; http://www.cyberforum.ru/cpp-beginners/thread811411.html
C++ Вычислить сумму делителей некоторого числа СН
#include <stdlib.h> #include <iostream.h> #include <math.h> main () {long ch,d,sumdel; float c; clrscr(); ch=(1+rand()% 999); cout<<"generator random chesil vidal znachenie"<<ch<<endl; c=sqrt (ch);
operator char() или operator int() C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть вложенный класс Cref как бы имитирующий char. И от надыбал я там строчку: operator char() const {s.check(i); return s.read(i);}//выдает значение ну и не понял, что это он тут перегрузил, и кода этот оператор вызывается. И еще смотрел на перед задачку, так там...
C++ Задача на одномерный массив http://www.cyberforum.ru/cpp-beginners/thread811385.html
Дана задача: "Лесенка" Вова стоит перед лесенкой из N ступеней. На каждой из ступеней написаны произвольные целые числа. Первым шагом Вова может перейти на первую ступень или, перепрыгнув через первую, сразу оказаться на второй. Также он поступает и дальше, пока не достигнет N-ой ступени. Посчитаем сумму всех чисел, написанных на ступенях через которые прошел Вова. Требуется написать...
C++ написал программу, ошибка! Info :Compiling C:\BC5\BIN\zadacha 3.cpp Warn : zadacha 3.cpp(25,3):'c' is assigned a value that is never used вот такая ошибка вылетает не знаю что делать #include <conio.h> #include <iostream.h> #include <math.h> main () {int ch, d, kol, k, prost, n, c; clrscr(); cout<<"Zadaite chislo nachalo poiska: "; cin>>k; подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2013, 04:52     Передача массивов и параметров с одной функции в другую
Так работает:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <vector>
 
using namespace std;
 
void ReadData(const char*, vector<double>&, int&, int&);
void ConvertVectorToDoubleArray(vector<double>&, double*&, int, int);
int EdgeDetection(double*&, double*&, int, int);
void WriteData(const char*, double*&, int, int);
 
 
int main()
{
    double* Gradient;
    vector<double> VectorArray;
    double* tab;
    
    int raw=1;
    int column=0;
    
    ReadData("EdgeInput.txt", VectorArray, raw, column);
    ConvertVectorToDoubleArray(VectorArray, tab, raw, column);
    EdgeDetection(tab, Gradient, raw, column);
    WriteData("EdgeResult.txt", Gradient, raw, column);
 
    cin.get();
}
 
void ReadData(const char* filename, vector<double> &OutputVector, int& raw, int& column)
{
    ifstream EdgeInputData(filename);
    if (!EdgeInputData) 
        cerr << "Error! Can't open the input file.\n";
    double InterveningVariable=0;
    while (!EdgeInputData.eof())
    {
        EdgeInputData>>InterveningVariable;
        OutputVector.push_back(InterveningVariable);
        char c;
        EdgeInputData.get(c);
        if (c=='\n')
            raw++;
        column=OutputVector.size()/raw;
    }
    EdgeInputData.close();
}
 
 
void ConvertVectorToDoubleArray(vector<double> &InputVector, double* &OutputArray, int raw, int column)
{
    OutputArray=new double[raw*column];
    int i=0;
    int j=0;
    for (i=0; i<raw; i++)
        for (j=0; j<column; j++)
            OutputArray[i*column + j] = InputVector[i*column + j];
}
 
int EdgeDetection(double* &InputArray, double* &G, int raw, int column)
{
    int i=0;
    int j=0;
    double *GC;
    GC=new double[raw*column];
    for (i=0; i<raw; i++)
        for(j=0; j<column; j++)
        {
            if (j==column-1)
                GC[i*column+j] = InputArray[i*column+j] - InputArray[i*column+j-1];//The boundary
            else 
                GC[i*column+j] = InputArray[i*column+j] - InputArray[i*column+j+1];
        }
    /*Forming array inlude raw gradients*/
    double *GR;
    GR=new double[raw*column];
    for (j=0; j<column; j++)
        for(i=raw-1; i>=0; i--)
        {
            if (i==0)
                GR[i*column+j] = InputArray[i*column+j] - InputArray[(i+1)*column+j];//The boundary
            else
                GR[i*column+j] = InputArray[i*column+j] - InputArray[(i-1)*column+j];//The row gradient
                
        }
    /*The edge gradient and saving the data in file*/
    //double *G;
    G=new double[raw*column];
    for (i=0; i<raw; i++)
        for(j=0; j<column; j++)
            G[i*column+j] = abs(GC[i*column + j]) + abs(GR[i*column + j]);
    
    delete [] GR;
    delete [] GC;
    delete [] InputArray;
    
    return 0;
}
 
 
void WriteData(const char* filename, double* &matrix, int raw, int column)
{
    ofstream EdgeResultFile(filename); //Open a file for output
    if (!EdgeResultFile) 
        cerr << "Error! Can't open the output file.\n";
    int i=0;
    int j=0;
    for (i=0; i<raw; i++)
    {
        for(j=0; j<column; j++)
            EdgeResultFile<<matrix[i*column+j]<<" ";
        EdgeResultFile<<"\n";
    }
    EdgeResultFile.close(); 
    delete []matrix;
}


Добавлено через 34 минуты
Немного дополненный код (чтобы входной и выходной файлы были идентичны по формату: в конце строк нет пробелов и в конце последней строки нет символа новой строки):
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <vector>
 
using namespace std;
 
void ReadData(const char*, vector<double>&, int&, int&);
void ConvertVectorToDoubleArray(vector<double>&, double*&, int, int);
int EdgeDetection(double*&, double*&, int, int);
void WriteData(const char*, double*&, int, int);
 
 
int main()
{
    double* Gradient;
    vector<double> VectorArray;
    double* tab;
    
    int raw=0;
    int column=0;
    
    ReadData("EdgeInput.txt", VectorArray, raw, column);
    ConvertVectorToDoubleArray(VectorArray, tab, raw, column);
    EdgeDetection(tab, Gradient, raw, column);
    WriteData("EdgeResult.txt", Gradient, raw, column);
 
}
 
void ReadData(const char* filename, vector<double> &OutputVector, int& raw, int& column)
{
    ifstream EdgeInputData(filename);
    if (!EdgeInputData) 
        cerr << "Error! Can't open the input file.\n";
    double InterveningVariable=0;
    while (!EdgeInputData.eof())
    {
        EdgeInputData>>InterveningVariable;
        OutputVector.push_back(InterveningVariable);
        
        if (EdgeInputData.peek() =='\n' || EdgeInputData.peek() == EOF)
            raw++;
    }
    column = OutputVector.size()/raw;
    
    EdgeInputData.close();
}
 
 
void ConvertVectorToDoubleArray(vector<double> &InputVector, double* &OutputArray, int raw, int column)
{
    OutputArray=new double[raw*column];
    int i=0;
    int j=0;
    for (i=0; i<raw; i++)
        for (j=0; j<column; j++)
            OutputArray[i*column + j] = InputVector[i*column + j];
}
 
int EdgeDetection(double* &InputArray, double* &G, int raw, int column)
{
    int i=0;
    int j=0;
    double *GC;
    GC=new double[raw*column];
    for (i=0; i<raw; i++)
        for(j=0; j<column; j++)
        {
            if (j==column-1)
                GC[i*column+j] = InputArray[i*column+j] - InputArray[i*column+j-1];//The boundary
            else 
                GC[i*column+j] = InputArray[i*column+j] - InputArray[i*column+j+1];
        }
    /*Forming array inlude raw gradients*/
    double *GR;
    GR=new double[raw*column];
    for (j=0; j<column; j++)
        for(i=raw-1; i>=0; i--)
        {
            if (i==0)
                GR[i*column+j] = InputArray[i*column+j] - InputArray[(i+1)*column+j];//The boundary
            else
                GR[i*column+j] = InputArray[i*column+j] - InputArray[(i-1)*column+j];//The row gradient
                
        }
    /*The edge gradient and saving the data in file*/
    G=new double[raw*column];
    for (i=0; i<raw; i++)
        for(j=0; j<column; j++)
            G[i*column+j] = abs(GC[i*column + j]) + abs(GR[i*column + j]);
    
    delete [] GR;
    delete [] GC;
    delete [] InputArray;
    
    return 0;
}
 
 
void WriteData(const char* filename, double* &matrix, int raw, int column)
{
    ofstream EdgeResultFile(filename); //Open a file for output
    if (!EdgeResultFile) 
        cerr << "Error! Can't open the output file.\n";
    int i=0;
    int j=0;
    for (i=0; i<raw; i++)
    {
        for(j=0; j<column; j++)
        {
            EdgeResultFile << matrix[i*column+j];
            if (j < column - 1) EdgeResultFile << " ";
        }
        if (i < raw - 1) EdgeResultFile << "\n";
    }
    EdgeResultFile.close(); 
    
    delete []matrix;
}
 
Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru