Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

funções com arquivo maze txt

Boa tarde estou com dúvida em c. tenho uma matriz com o tamnho l e c dentro do arquivo maze20x20.txt ao ler o arquivo o programa le seu tamnho e gera uma matriz l e c com caracteres. Quero criar uma função para ler o mapa maze20x20.txt , uma função para retornar o mapa , uma função que retorne o 'r 'e outra q retorne o ' p' como corrigir o código abaixo?

#include <iostream>
#include <iomanip>
#include  <fstream>
#include <stdlib.h>
#include <string>

using namespace std;

int main(void)
{
    char **m_ini; 
    int l,c;

     // declaro variavel file hadle para um txt
     ifstream txtFile;

     // abrindo o arquivo txt
     txtFile.open ("maze20x20.txt");

     // le o tamonho da matriz

    txtFile >> l >> c ;

    // aloco memoria 
    m_ini = (char **) malloc(l * sizeof(int*));//char

    for ( int nl = 0 ; nl<l; nl ++)
    {
        m_ini[nl] = (char *) malloc(c * sizeof(int));
    }

    // le os valores do arquivo e preenche
    for (int i=0;i<l;i++)
    {
        for(int j=0;j<c;j++)
        {
            txtFile >> m_ini[i][j];
        }
    }

    //   imprime o valor da matriz na tela 

    cout << " A matriz lida do arquivo tem tamanho: " << l << " x " << c;
    cout << " Conteudo da matriz inicial no arquivo: " << endl;

    for(int i=0;i<l;i++)
    {
        for (int j=0;j<c;j++)
        {
            cout << m_ini[i][j] << "";
        }
        cout  << endl;
    }

    cout << endl <<endl;

    printf("\n\n******************* Saida ********************* \n\n");

     for(int i=0;i<l;i++)
    {
        for (int j=0;j<c;j++){
            if (m_ini[i][j] == 'r')
            {
                printf ("\n Elemento R  [%i][%i] ", i, j);
            }
        }
    }

    // fazer do p tbm 

     for(int i=0;i<l;i++)
    {
        for (int j=0;j<c;j++){
            if (m_ini[i][j] == 'p')
             {
                 printf ("\n Elemento p [%i][%i] ", i, j);
            }
        }
    }

    for(int i=0;i<l;i++)
    {
        for (int j=0;j<c;j++){
            if (m_ini[i][j] == '#')
            {
                printf ("\n Elemento # [%i][%i] ", i, j);
            }
        }
    }
}
1 resposta
solução!

Oi Nicolle,

Para criar uma função você deve declará-la na seguinte estrutura:

tipo_de_retorno nome_da_funcao (parametros){
    codigo_da_funcao
}

Por exemplo, imagine que você tenha o seguinte código:

#include <iostream>
using namespace std;

int main (){
    int numero1=1, numero2=2, numero3=3;
    numero1 *= 2;
    numero1 += 10;

    numero2 *= 2;
    numero2 += 10;

    numero3 *= 2;
    numero3 += 10;

    cout << "numero1 = " << numero1 << "\n";
    cout << "numero2 = " << numero2 << "\n";
    cout << "numero3 = " << numero3;
    return 0;
}

Aqui obtenho a saída:

numero1 = 12
numero2 = 14
numero3 = 16

Só que o código está repetitivo. Como todo número quero fazer a multiplicação do valor por 2 e depois acrescentar 10. Podemos isolar isto numa função:

#include <iostream>
using namespace std;

int atualiza_numero(int numero){
    return numero * 2 + 10;
}

int main (){
    int numero1=1, numero2=2, numero3=3;

    numero1 = atualiza_numero(numero1);
    numero2 = atualiza_numero(numero2);
    numero3 = atualiza_numero(numero3);

    cout << "numero1 = " << numero1 << "\n";
    cout << "numero2 = " << numero2 << "\n";
    cout << "numero3 = " << numero3;
    return 0;
}

Aqui criei uma função que recebe a informação como parâmetro e retorna um valor que é guardado nas variáveis correspondentes. Perceba que como quero retornar um número inteiro, o tipo de retorno da função é int.

Se executar, tenho a mesma saída do código anterior:

numero1 = 12
numero2 = 14
numero3 = 16

Para você fazer isto no seu código é só aplicar a mesma ideia. Isolar o código de cada ação em uma função e retornar o valor para a variável do tipo da informação correspondente.

Tente aplicar a ideia no seu código.

OBS: Sempre que quiser postar um código, clique no botão { } inserir código logo acima do campo para digitar a mensagem que ele colocará 3 backticks (`) antes e depois desta forma:

```

insira seu código aqui

```

Com isso é só você colocar o código no meio que ele aparecerá formatado.

Abraço!