Форум программистов, компьютерный форум 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; подробнее

Показать сообщение отдельно
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 44
18.03.2013, 02:09  [ТС]     Передача массивов и параметров с одной функции в другую
Цитата Сообщение от DU Посмотреть сообщение
глобальные - это плохо. голые массивы - тоже. лучше вектора.
входные параметры передаются по значению или константной ссылке, выходные - по неконстантной ссылке или ко указателю. (если выходной параметр - указатель, то в функцию нужно отдавать указатель на указатель в общем лучше пользоваться ссылками)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void convert(const std::vector<int>& source, std::vector<int>& result)
{
   result = source; // ну тут конверсия - это простое копирование.
}
 
int main()
{
    std::vector<int> data;
    // тут заполняем вектор data
    std::vector<int> convertedData;
    convert(data, convertedData);
 
   // вот тут после такой конверсии вектора станут одинаковыми.
 
   return 0;
}
Вектора к сожалению тут не проконают, нужен динамический массив. Попробую использовать ссылку, спасибо=)

Цитата Сообщение от alsav22 Посмотреть сообщение
Вектор нет. И покажите, что у вас в функциях делается.

Добавлено через 7 минут
С tab и Gradient у вас непонятно, что это... Если это указатели на массивы указателей ("конвертор из вектора который мы определяем в предыдущей функции в массив указателей"), то тогда:
C++
1
2
double **Gradient
double **tab;
тут вся прога, к сожалению без комментариев, прошу прощения =) сил писать их нет пока что=) в общем тут файл, считываются данные с файла в вектор, определяется размер, далее идет конвертор, с вектора в динамический массив, и этот массив обрабатывается методом градиентов. получаем результирующую матрицу, которая так же записывается в файл. Каждая функция по отдельности работает. Компилирую, ошибок нет, но файл с результирующей матрицей пустой.

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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
 
using namespace std;
 
double* Gradient;
vector<double> VectorArray;
double* tab;
 
void ReadData(char*, vector<double>, int&, int&);
void ConvertVectorToDoubleArray(vector<double>, double*, int, int);
void WriteData(char*, double*, int, int);
int EdgeDetection(double*, double*, int, int);
 
int main()
{
    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);
}
 
void ReadData(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 WriteData(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;
}
 
 
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]);
    WriteData("EdgeResult.txt", G, raw, column);
    delete []GR;
    delete []GC;
    delete []InputArray;
    return 0;
}
 
Текущее время: 18:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru