Ir ao conteúdo

Posts recomendados

Postado

Oi pessoal!

Estou com uma dúvida que à primeira vista achava simples, mas vamos lá...

Estou tentando passar um array para um header de forma que ele calcule alguma coisa

e traga o array calculado de volta modificando o original.

Preciso fazer também com array dinamico.

Fiz uma montagem simples para não tomar muito o tempo de vocês:

Qualquer ideia será bem vinda!!!!

no cout<<vet<<' '; não deveria sair os elementos multiplicados????

//calc.hpp

#define CALC_H
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>
using namespace std;
void calc (int lista[], int elementos)         // recebe os agumentos
{
    for(int i=0; i<elementos; i++)
        cout<<lista*10<<' ';
}
#endif
 
passa.cpp
#include <iostream>
#include "calc.hpp"
void passa (int lista[], int elementos);         // protótipo da função
int main()
{
    int vet[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};         // declaração e inicialização
    
    calc(vet,10);  
    
    for(int i=0; i<10; i++)
        cout<<vet<<' ';
}
 
 

 

Postado

Não entendi muito bem. Tentando ser mais específico o que não consegui foi passar a matriz do main para o header e no header fazer um cálculo e retornar a matriz para o main já modificada e no main mostrar ela.

Espero que ajude!

C++Bib.rar

Postado

Boa tarde todos,

Retomei o meu hobby, estou aprendendo C;

o arquivo H (terminação .h) deve conter apenas declarações ou até mesmo variáveis, algumas externas (apontam pra fora do escopo).

Em C, a implementação de H file fica C file ou O file de mesmo nome. Por exemplo: hello.h que só tem nomes para programar, como se fosse um guia de ferramentas disponíveis, já em  hello.c ou hello.o  tem todas as rotinas ocultas no caso de hello.o principalmente.

Resumindo:

  hello.h - é um monte de nomes sem nada, um mapa.
  hello.c ou hello.o - é onde está a implementação/ rotinas/ tarefas/ programa.

 

Entendi que a função calc não está fazendo tarefa nenhum... porém a tarefa pouco importa você quer usar uma função que esteja fora do escopo do arquivo atual, de maneira oculta, sem visualizar sua implementação, é sobre isso o exercício? 

Postado

Se eu não uso o calc.hpp para fazer isso que tipo de extensão eu uso para conseguir .bib? 

O que quero é transferir a matriz para uma função externa(.hpp ou .bib) e depois retornála de volta. a matriz sai de passa.cpp e por passagem de parametro vai para calc.hpp. calc.hpp retorna a matriz depois de um calculo para passa.cpp e exibe a matriz agora modificada no cálculo.

 

Postado

Boa tarde @cezarvaz

Em C, usamos *.c para arquivos de código, e usamos *.h para aquivos de cabeçarios.

Já no C++ usa se *.cpp para arquivos de código, e usas e *.hpp para arquivos de cabeçario.

 

Então como exemplo disto em C tenho:

 

Arquivo square.h (header) 

/** @file square.h @author Mauro Britivaldo @date 13 de Jul 2017 */
#ifndef SQUARTE_H_INCLUDED
#define SQUARTE_H_INCLUDED

  extern int Data; /**< Link externo para o número **/
  /**
    @brief  Função elava número inteiro ao quadrado
    @param  Número interio com valor maior que 1
    @return Número quadrado
  */
  void fnSquare(int* iNumeroInteiro);

#endif // SQUARTE_H_INCLUDED

 

Arquivo Código (*.c) de implementar square.h

/** @file square.c implementação *.h @date 7/13/2016 */

int Data; /**< Valor anterior a potencia */
/**
  @brief  Função elava número inteiro ao quadrado
  definição da função declarada no arquivo *.c
*/
void fnSquare(int* n)
{
  Data = *n; // Atribuindo o valor antes da potência
  *n = (*n) * (*n);

  return;
}

 

Arquivo main.c usando função fnSquare 

#include <stdio.h>
#include "square.h" // fnSquare

int main()
{
  int iNumber;
    printf( "Entre com numero inteiro: " );
    scanf( "%d", &iNumber );

    fnSquarte(&iNumber);  // Fazendo a potencia de 2.
    printf("%d^2 e igual: %d\nDone\n\n", Data, iNumber );

    return 0;
}

:thumbsup:

Postado

Como poucas mudanças, você pode adaptar para qualquer tipo de objeto.

Por exemplo:

extern int Data; pode virar extern int Data[3][3]; mesmo para int Data

e para resolver os quadrados, um loop percorrendo o ponteiro por exemplo:

for(i = 0; i < 9; i++)

  *(n + i) = *(n + i) * (*(n + i));

Resolve, já que se associamos o ponteiro de um matriz a um ponteiro pode percorre como vetor.

Postado

Para copilar abra um novo projeto no Code::Blocks (Recomendo) 

Ou través do comando: >square> gcc main.c square.c -o square.o

Para windows comando>square> gcc main.c square.c -o square.exe 

23 minutos atrás, cezarvaz disse:

Ainda tá nebuloso...não tá compilando não terias um exemplo com matrizes!?

Squart.rar

kkkk sim, mas taria te dando a resposta, tentei ensinar um pouco do que sei, se não consegui então a resposta também não vou dar kkk

:tw_joy:

Postado

Pessoal, consegui resolver!

Obrigado pelas dicas!!!!

segue a resposta, se servir para alguém beleza!

Arquivo Main:

#include <stdio.h>
#include <iostream>
#include "inicializa_gx.hpp"
using namespace std;
int main()
{
    // uma matriz de 5 x 8 comun
    float **matriz = new float*[3];
    int lin=5;
    int col = 8;
    for(int i = 0; i < lin; i++)
    {
        matriz = new float[8];
    }

    for(int i = 0; i < lin; i++)
    {
        for(int j = 0; j < col; j++)
        {
            matriz[j]=5; 
            cout<<matriz[j]<<" ";
        }
        cout<<endl;
    }    
    
    // seta os valores dela por referência
    inicializa_gx(matriz,lin,col);

    // loop pra verificar os resultados
    for(int i = 0; i < lin; i++)
    {
        for(int j = 0; j < col; j++)
        {
            // teste dos valores em cada casa
            cout<<matriz[j]<<" ";
        }
        cout<<endl;
    }

    // espera alguem teclar algo 
    scanf("%c");

    return 0;
}

Arquivo inicializa_gx.hpp

void inicializa_gx(float **g, int& l, int& c)
{
    for(int i = 0; i < l; i++)
    {
        for(int j = 0; j < c; j++)
        {
            g[j] = g[j]*10.0f; // calcula
        }
    }
}

 

Postado

Vangodp, Abração você sempre tem um jeito didático e efetivo de explicar.

Muito obrigado!!!!

Não querendo abusar da tua paciência, como eu poderia então implementar o programinha acima

de forma correta? com a matriz dinâmica e tudo. e quando eu uso o destrutor nela?

Se puderes contribuir, agradeço imensamente.

 

Abração!!!!

Postado

Obrigado!!!

Mas ao compilar os códigos no Main dá os erros da figura

testei no CodeBlocks e no Dev C++.

O que será isso? 

 

erro.png

ambos erros nos arquivos .cpp!!!

//main.cpp

#include <iostream>
#include "calc.hpp"
using namespace std;


int main(){
    int vet[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};         // declaração e inicialização
    
    calc(vet, 10);  
    
    for(int i=0; i<10; i++)
        cout<<vet<<' ';

}

 

calc.hpp

#ifndef CALC_H
#define CALC_H

void calc(int lista[], int elementos);         // protótipo da função

#endif //CALC_H

 

calc.cpp

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

}

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!