dgadelha / Portugol-Webstudio

IDE online para o Portugol
https://portugol.dev
GNU General Public License v3.0
259 stars 51 forks source link

Algoritmo documentado como EXEMPLO "Diagonal Principal" não está funcionando. #273

Open GabrielRCL opened 4 weeks ago

GabrielRCL commented 4 weeks ago

Descrição do problema

Ao clicar em "Abrir Exemplos" > "Vetores e Matrizes" > Diagonal Principal

o código que é aberto está com um problema na linha 70, a função preenche(caracter &matriz[][]) está recebendo um ponteiro duplo (ponteiro do ponteiro que aponta para o endereço de memoria que se inicia o array/matriz) e por isso não está funcionando corretamente o algoritmo.

para corrigir o problema é só remover o caractere &, para que não haja um ponteiro duplo, pois acredito que a variavel matriz[][] já é um ponteiro que aponta para o endereço de memoria que se inicia o array/matriz, dessa forma: função preenche(caracter matriz[][]) é a linha de comando correta

https://gyazo.com/2785141a02a935a8aac6966328473379

Código

/* CLIQUE NO SINAL DE "+", À ESQUERDA, PARA EXIBIR A DESCRIÇÃO DO EXEMPLO
 *  
 * Copyright (C) 2014 - UNIVALI - Universidade do Vale do Itajaí
 * 
 * Este arquivo de código fonte é livre para utilização, cópia e/ou modificação
 * desde que este cabeçalho, contendo os direitos autorais e a descrição do programa, 
 * seja mantido.
 * 
 * Se tiver dificuldade em compreender este exemplo, acesse as vídeoaulas do Portugol 
 * Studio para auxiliá-lo:
 * 
 * https://www.youtube.com/watch?v=K02TnB3IGnQ&list=PLb9yvNDCid3jQAEbNoPHtPR0SWwmRSM-t
 * 
 * Descrição:
 * 
 *  Este exemplo ilustra o uso das matrizes na linguagem Portugol criando uma matriz 
 *  e preenchendo sua diagonal principal.
 *  
 *  As matrizes nada mais são do que vetores de duas dimensões (bidimensionais). Em 
 *  outras  palavras, a matriz é um vetor aonde cada uma de suas posições (colunas) 
 *  armazena um outro vetor (linhas).
 *
 *   Exemplo de vetor:
 *   
 *   [1, 2, 3]
 *   
 *   Exemplo de matriz:
 *   
 *   [1][2][3]
 *   [4][5][6]
 *   [7][8][9]
 *  
 *  Na matemática, a diagonal principal de uma matriz é o conjunto dos elementos em que 
 *  a linha e a coluna do elemento são iguais. Assim, a diagonal principal parte do canto
 *  superior esquerdo (posição 0,0) e segue para a direita e para abaixo até encontrar o
 *  lado direito ou o lado inferior da matriz. No exemplo abaixo, a diagonal principal é
 *  representada pelo caracter '*':
 *  
 *  [*][ ][ ][ ]
 *  [ ][*][ ][ ]
 *  [ ][ ][*][ ]
 *  [ ][ ][ ][*]
 *  
 * Autores:
 * 
 *  Giordana Maria da Costa Valle
 *  Carlos Alexandre Krueger
 *  
 * Data: 01/06/2013
 */

programa
{
    inclua biblioteca Util --> u

    funcao inicio()
    {
        // Define as dimensões (linhas e colunas) da matriz
        const inteiro TAMANHO = 5

        // Cria a matriz
        caracter matriz[TAMANHO][TAMANHO] 

        preenche(matriz)
        exibe(matriz)
    }

    // Preenche a diagonal principal da matriz
    funcao preenche(caracter &matriz[][])
    {
        para (inteiro linha = 0; linha < u.numero_linhas(matriz); linha++)
        {
            para (inteiro coluna = 0; coluna < u.numero_colunas(matriz); coluna++)
            {
                se (linha == coluna)
                {
                    matriz[linha][coluna] = '*'
                }
                senao
                {
                    matriz[linha][coluna] = ' '
                }
            }
        }       
    }

    // Percorre e exibe a matriz
    funcao exibe(caracter matriz[][])
    {
        para (inteiro linha = 0; linha < u.numero_linhas(matriz); linha++)
        {
            para (inteiro coluna = 0; coluna < u.numero_colunas(matriz); coluna++)
            {
                escreva("[", matriz[linha][coluna], "]")
            }

            escreva("\n")
        }
    }
}

Comentários adicionais

na linha 70, troque funcao preenche(caracter &matriz[][]) por funcao preenche(caracter matriz[][]) para corrigir o problema