Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel De Freitas

Problema com Edição de Matriz fora do main()

Recommended Posts

Então galera, eu tô numa dúvida extrema com o código abaixo. Eu começei a estudar ponteiros em C faz alguns dias e eu acredito que seja a solução pro meu problema, mas não sei como tratar o código.

 

O problema é o seguinte. Na função multiplicarMatrizes() eu não consigo acessar a matriz valoresC obviamente pq foi declarada dentro do main. Mas o problema é que eu não posso declara-la 'globalmente' fora do main devido ao fato de que eu preciso ler o numero de linhas/colunas de cada matriz no inicio do programa (não posso declara-las no código com um numero constante de linhas ou colunas).

 

Código:

#include<stdio.h>
#include<stdlib.h>

#define G 5

void lerMatrizes(int matrizX[][G], int matrizY[][G]);

void multiplicaMatrizes(int A[][G], int B[][G]);	

int linhasA, colunasA, linhasB, colunasB;

int main() {
	int i, j;

	printf("\nInforme a quantidade de linhas da matriz A : ");
	scanf("%d",&linhasA);
	
	printf("\nInforme a quantidade de colunas da matriz A : ");
	scanf("%d",&colunasA);
	
	printf("\nInforme a quantidade de linhas da matriz B : ");
	scanf("%d",&linhasB);
	
	printf("\nInforme a quantidade de colunas da matriz B : ");
	scanf("%d",&colunasB);
	
	int valoresA[linhasA][colunasA], valoresB[linhasB][colunasB], valoresC[colunasA][linhasB];

	lerMatrizes(valoresA, valoresB);
	
	if (colunasA == linhasB) {
		multiplicaMatrizes(valoresA, valoresB);
	} else {
		printf("\n\nNão é possivel multiplicar matrizes neste formato. O numero de colunasA tem que ser igual linhasB");
	}
	
	return 0;
}


void lerMatrizes(int matrizX[][G], int matrizY[][G]) {
	int i, j;
	
	// Gera Valores p Matriz1
	for(i=0; i<linhasA; i++) {
		for(j=0; j<colunasA; j++) {
			matrizX[i][j] = i+1 * j+1;
		}
	}
	
	// Gera Valores p Matriz2
	for(i=0; i<linhasB; i++) {
		for(j=0; j<colunasB; j++) {
			matrizY[i][j] = i+1 * j+1;
		}
	}	
}

void multiplicaMatrizes(int A[][G], int B[][G]) {
	int i, j, k, temp=0;
	
	for(i=0; i<colunasA; i++) {
        for(j=0; j<linhasB; j++) {
		    valoresC[i][j]=0;
		    
		    for(k=0; k<G; k++)
		    	temp += A[i][k] * B[k][j];
		    	
		    valoresC[i][j] = temp;
		    temp=0;
        }
    }

}
	

Eu fiz o código usando um numero constante de linhas/colunas, aí qndo fui altera-lo travei nesta parte aí. Não consegui também passar a matriz por parâmetro, a solução seria um ponteiro?

 

Agradeço desde já!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Sapinn
      Pessoal estou com um dúvida terrivel não consigo checar os paramentros passados pela url ele sempre pagar anterior o que fazer? 
      Vejam o codigo:: 
        <?php     class Rota     {         private $controlador = 'Paginas';         private $metodo = 'index';         private $parametros = [];         public function __construct()         {             $url = $this->url() ? $this->url() : [0];             if (file_exists('../app/Controllers/' . ucwords($url[0] . 'php'))) {                 $this->controlador = ucwords($url[0]);                 unset($url[0]);             }             require_once '../app/Controllers/' . $this->controlador . '.php';             $this->controlador = new $this->controlador;             if (isset($url[1])) {                 if (method_exists($this->controlador, $url[1])) {                     $this->metodo = $url[1];                     unset($url[1]);                 }             }             $this->parametros = $url ? array_values($url) : [];             call_user_func_array([$this->controlador, $this->metodo], $this->parametros);             var_dump($this);         }         private function url()         {             $url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL);             if (isset($url)) {                 $url = trim(rtrim($url, '/'));                 $url = explode('/', $url);                 return $url;             }         }     } Minha class Paginas:
      <?php class Paginas{              public function sobre($id){             echo $id."<hr>";         }     } O debug está me retornando:
       
      paginas
      _________________________________________________________________________________________________________________________________________________________________________________________
      object(Rota)#1 (3) { ["controlador":"Rota":private]=> object(Paginas)#2 (0) { } ["metodo":"Rota":private]=> string(5) "sobre" ["parametros":"Rota":private]=> array(1) { [0]=> string(7) "paginas" } }

      url usada: http://localhost/minha_pagina/paginas/sobre

      Ele não deveria gerar um erro e pedir para que eu passasse mais um paramentro na url? Ao invés disso ele só me retorna o método paginas o que fazer?
    • Por Pavolin9
      Bom dia, estou desenvolvendo um sistema bem simples de estoque onde os itens serao armazenados em uma matriz segue codigo:
          package main;          import java.io.Console;     import java.util.Arrays;     import java.util.Scanner;          public class IncluirItem{         public static void main(String[] args) {             String[][] itens = new String[2][5];             String[] campos = new String[7];             int opcao = 0;             int remover;             int verificar = 0;             int adcionar = 0;             int tamanho = 2;                          Scanner sc = new Scanner(System.in);                          campos [1] = "Nome";             campos [2] = "Codigo de barras";             campos [3] = "quantidade";             campos [4] = "validade";             campos [5] = "data de entrada";                          do {                 System.out.println("\n\n### Sistema de estoque - simplificado ###");                 System.out.println("=========================================");                 System.out.println("      |     1 - Adcionar itens   |");                 System.out.println("      |     2 - Excluir itens    |");                 System.out.println("      |     3 - Mostrar itens    |");                 System.out.println("      |     0 - Sair             |");                 System.out.println("=========================================\n");                                  System.out.println("Escolha uma opcao: ");                 opcao = sc.nextInt();                 System.out.print("\n");                                  switch (opcao) {                 case 1:                     System.out.println("Cadastro de itens: ");                     //Adciona itens                      for (int i = 0; i <2; i++) {                         System.out.println("Adcionar item? ");                         System.out.println("1 para sim \n2 para nao: ");                         adcionar = sc.nextInt();                         if (adcionar == 1) {                             System.out.printf("%d. item \n", (i+1));                             verificar = verificar + 1;                             for (int j=0; j < 5; j++) {                                     System.out.printf("%s ", campos[j+1]);                                 System.out.printf("= ", i,(j+1));                                 itens[i][j] = sc.next();                                                              }                             System.out.printf("\n");                         }                         else {                             break;                         }                     }                                              break;                 case 2:                     //Remove itens                     System.out.println("Exclusao de itens: ");                     if(verificar > 0) {                         for (int i = 0; i <2; i++) {                                 System.out.printf("%d. item \n", (i+1));                             System.out.printf("ID do produto= 00%d \n", (i+1));                             System.out.printf("\n");                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                     System.out.println("\nEscolha o numero do item a ser removido: \n");                     remover = sc.nextInt();                     for (int i = 0; i <2; i++) {                         if(remover == 2) {                         itens[i] = itens[i-1];                         }                     }                     break;                 case 3:                     //Mostra itens                     if(verificar > 0) {                                                      for (int i = 0; i <2; i++) {                                     if (verificar == 2) {                                 System.out.printf("%d. item \n", (i+1));                                 System.out.printf("ID do produto= 00%d \n", (i+1));                                 for (int j=0; j < 5; j++) {                                         System.out.printf("%s ", campos[j+1]);                                     System.out.printf("= %s \n", itens [i][j]);                                 }                                 System.out.printf("\n");                             }                             else {                                         itens = Arrays.copyOf(itens, tamanho - 1);                                         verificar = 0;                                         System.out.printf("%d. item \n", (i+1));                                         System.out.printf("ID do produto= 00%d \n", (i+1));                                         for (int j=0; j < 5; j++) {                                                 System.out.printf("%s ", campos[j+1]);                                             System.out.printf("= %s \n", itens [i][j]);                                         }                                         System.out.printf("\n");                                         break;                                 }                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                                          break;                 default:                     System.out.println("Opção Inválida!");                     break;                 }             } while(opcao != 0);         }     }  
      Minha duvida é a seguinte, eu quero excluir uma posicao da matriz, exemplo: registrei dois itens, na coluna um e coluna dois da matriz e gostaria de remover a coluna um da lista, como realizo essa função, e outra coisa, eu gostaria de quando eu inserisse pela segunda vez algum item a matriz começasse na proxima possicao vazia, atualmente se eu pedir para inserir um novo item a matriz começa da primeira posicao e assim apaga os elementos ja inseridos.
       
    • Por Josues
      Bom dia!
      Gostaria de uma auxilio sobre concatenação de números inteiros em uma matriz bidimensional,
      estou fazendo um trabalho da faculdade e me deparei com essa barreira.
      No programa deve conter duas matrizes de entrada e uma de matriz que vai receber os valores concatenados das duas.
      A matriz é 1 por 2
      L = 1 e C = 2
      no resultado que será mostrado é ex:
      matriz 1 [0][0]: 1
      matriz 1 [0][1]: 1
      Matriz 2 [0][0]: 1
      Matriz 2 [0][1]: 0
       
      Matriz Resultado:
      11            10
      11            10
       
      tem como fazer essa com catenação com inteiros? estou no segundo semestre da faculdade é e uma atividade avaliativa..
       
       
    • Por acneto.frc
      Boa tarde a todos!
      Estou trabalhando em uma aplicação Node-Express-Html-Bootsrap-Javascript-mysql, etc...
      Arquitetura MVC.
      Tenho um determinado formulário (document) que antes de renderizá-lo faço uma chamada a função sql da model e recebo como retorno um objeto sql (result).
      Ao renderizar o formulário passo o objeto como parâmetro para o html.
      Dentro do htm tenho acesso aos elementos do objeto os quais apresento em uma tabela.
      Depois disso preciso que uma função javascript seja executada mas não sei como fazer para que a função tenha acesso ao objeto.
      Anexo segue uma imagem como as fases de execução do programa
      Abraços a todos e obrigado!

    • Por joaquim_bezzera
      Estou fazendo um trabalho para a faculdade criando uma estrutura de cadastro de uma corrida. Já consegui fazer grande parte mas não consigo resolver esses pontos. Alguém saberia resolver?

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.