Ir ao conteúdo
  • Cadastre-se
cezarvaz

Passagem e retorno de matriz

Recommended Posts

Boa noite pessoal!
Estou tentando passar uma matriz do main para o calc.cpp e criei o calc.hpp mas não compila
Alguém manja este procedimento?
desde já agradeço!
seguem os códigos:

usei o dev C++
main.cpp
#include <iostream>
#include "calc.hpp"
using namespace std;

int main(){
    double **vetor;
    int lin = 3;
    int col = 8;
    for ( int i = 0; i < lin; i++ ){
        for ( int j = 0; j < col; j++ ){
            vetor[j] = 3;            
        }        
    }
    calc(vetor, lin,col);  
    
    for ( int i = 0; i < lin; i++ ){
        for ( int j = 0; j < col; j++ ){
            cout<<vetor[j]<<"\t";            
        }    
        cout<<endl;    
    }
}

calc.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>
using namespace std;
void calc (double **lista, int & linha, int & coluna) {     // recebe os agumentos
    for ( int i = 0; i < linha; i++ ){
        for ( int j = 0; j < coluna; j++ ){
            lista[j] *= 10;    
        }    
    }

}
calc.hpp
#ifndef CALC_H
#define CALC_H

void calc(double **lista, int & linha, int & coluna);         // protótipo da função

#endif //CALC_H
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite

Em C, este protótipo ficaria assim veja um exemplo:

void fnArray(int row, int col, int Arr[row][col]);

No seu caso assim:

void calc (int linha, int coluna, void* lista);

Teste em C++, pois em C eu garanto que funciona.:thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro que sim,

Maior parte já esta feito, pode dormir tranquilo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@cezarvaz

Prontinho!

C'11 File: Matriz e Header.zip 

print.png

C++ File: Matrizes e Headers.zip

@cezarvaz  O C++ file só é diferente na implementação de calc.cpp,

A função de Output (que gera os textos no prompt) também são comuns em C, C++: o printf( "" );

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauro eu rodo aqui no windows sevem com o dev c++ e dá uns erros de @win16?

você sabe o porque disso?

e o problema me parece ser no calc.cpp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@cezarvaz Não sei dizer o porque, eu copilei direto pelo prompt;

Vou estudar o erro aqui:thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@cezarvaz kkkkkkkkkk acontece o seguinte: Onde tem assim no arquivo calc.cpp:

int (*arr)[linha][coluna] = (static_cast<int (*)[linha][coluna]>(lista));

Coloque double nos int assim:

double (*arr)[linha][coluna] = (static_cast<double (*)[linha][coluna]>(lista));

veja que a conversão de dados é do genérico (void) para tipo primitivo double

no arquivo que postei eu fiz para int, substitua para double.

execute o comando abaixo para compilar os arquivos C++

onde cd é o caminho para os arquivos

 

promapt:

cd>mingw32-g++ main.cpp calc.cpp -o main.exe

print.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, cezarvaz disse:

Mauro eu rodo aqui no windows sevem com o dev c++ e dá uns erros de @win16?

você sabe o porque disso?

e o problema me parece ser no calc.cpp.

Outra coisa, este Dev C++ não é o melhor IDE

Recomendo o Code Block que é o melhor, se você for bem inciante recomendo um online, ou desative o auto completar.

Assim você vai aprender bem mais.

 

Aproposito já ia esquecendo este erro @win16 é por que o arquivo código não tem função main()

naturalmente por que calc.c é a implementação/ rotina/ ou ainda tarefa.

Compile como indiquei acima que o app vai funcionar.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria possível você mandar o código, pois você tá falando em .cpp e o anterior é .c!?

Abração!

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 horas atrás, Mauro Britivaldo disse:

@cezarvaz

Prontinho!

C'11 File: Matriz e Header.zip 

print.png

C++ File: Matrizes e Headers.zip

@cezarvaz  O C++ file só é diferente na implementação de calc.cpp,

A função de Output (que gera os textos no prompt) também são comuns em C, C++: o printf( "" );

C++ File: click no link

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

deu na trave de novo, olha na figura!

fot1.png

no codeblocks a mesma coisa será que é porque é windows 7 64 bits?

 

agora foi dos dois. Será que é problema com o win 7 64 bits/ no codeblocks dá a mesma coisa!

fot1.png

fot2.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por que não é um projeto, daí o IDE está compilando individualmente, 

Você tem que criar um projeto com os arquivos, ou compilar por linha de comando.

 

 

 

 

 

:tw_lol:

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, vou tentando, peraí!

Feiiiiiiiiiiiiiiiiiiiiiiiiiiiiiito!!!

Agora vou poder dormir!!!!

Valeu Mauro!!!

fot3.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estes erros -0.000000 é por que você ainda não trocou os int por double

Compartilhar este post


Link para o post
Compartilhar em outros sites

@cezarvaz na definição da função corrige

colocando:

double (*arr)[linha][coluna] = (static_cast<double (*)[linha][coluna]>(lista));

 

no lugar deste:

int (*arr)[linha][coluna] = (static_cast<int (*)[linha][coluna]>(lista));

:thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

:tw_smiley::tw_thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Vango!!! É que esta questão me deixou cansado e aí eu piso na bola!

Abração!! Obrigado pela ajuda!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, me deparei com um problema implantando o caso de passagem, na linha em evidencia, me parece faltar alguma coisa pois parece entrar em looping?

Desde já agradeço a ajuda!!!!

 

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include "ReadTable.hpp"

using namespace std;

void ReadTable(int linhas, int colunas, void* Reg) {
    
    double (*Dat)[linhas][colunas] = static_cast<double (*)[linhas][colunas]>(Reg);
    
    //leitura do arquivo de dados Data1.txt
    ifstream ArqIn("Warehouse/Data1.txt");
    
    //ArqOut de Gravação
    ofstream ArqOut;
    ArqOut.open("Warehouse/Report.txt");

    //Teste de IO
    if ((!ArqIn )){ 
        cerr << "ArqOut falhou! Erro de I/O" << "\n"<< std::endl;
        system("pause");
    }        
    //ArqOut<<linhas<<" "<<colunas<<"\n";        
    //Leitura do arquivo Data1.txt e gravação em matriz string
    string lineV;
    int col = 0;
    int lin = 0;    
    while( getline( ArqIn, lineV ) ){
        istringstream iss( lineV );
        string result;
        while( getline( iss, result, ' ' ) ){
            double dado = atof(result.c_str());
            (*Dat)[lin][col] = dado;
            cout<<(*Dat)[lin][col]<<"\t";
            col++;
        }
        cout<<endl;
    lin++;    
    col = 0;
    }
    
   //getch();
       
   //libera a memória
    //for(int i=0;i<lin;i++){delete Dat;} delete []Dat;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×