Legal, foi muito útil. Ótimo site, sempre uso para consultas.
27 de fevereiro de 2014 às 09:49
Anônimo disse...
Legal o blog, estou aprendendo muito. Tem algum jeito de eu passar uma matriz para uma função permitindo que o usuário determine as linhas e colunas da matriz?
Bom dia C progressivo. Minha dúvida é o seguinte: é regra ter que por colchetes vazio [] para linha e por um tamanho para a coluna? Porque caso eu tenha que fazer um algoritmo que o usuário determine a dimensão da matriz, logo, a dimensão que essa matriz recebeu é local (não sei nem se estou me expressando corretamente.), no seu caso, você criou uma constante, caso eu não venha criar uma constante, comoi eu posso resolver esse problema? Att.
17 de outubro de 2014 às 04:22
Anônimo disse...
como eu faço para retornar um vetor de uma função para a função main
2 de fevereiro de 2015 às 06:40
Anônimo disse...
O que eu acho:
Se um vetor é passado para uma função e alterado dentro dela e essas alterações são mantidas, para que retornar ele de uma função ?
Se for para atribuir o conteúdo dele à outro vetor basta após o uso da função e copiar com strcpy().
Muito bem explicado como sempre, parabéns mais uma vez ao site!! Agora, só um pequeno detalhe: No lugar de "matriz exige um paz de colchetes" não seria "matriz exige um PAR de colchetes"? Mais uma vez, muito obrigado pelo ótimo curso :)
Cara, se vc tiver passado o vetor por ponteiro e tiver usando sua funçao no vetor, so usar ele normalmente, pq vc so passo o endereço da memoria nao os valores do vetor, ent e so usar normal na linha de baixo.
thiaguinhopier@yahoo.com.br , o que vc procura ira encontrar em alocaçao dinamica, ja dependendo do seu problema e do dizer pra funçao vai usar uma matriz muito grande e usar so parte dele ;D
Estou achando ótimas todas as suas postagens no blog sobre c, muito boas mesmo! Vocês estão me ajudando muito.
muito obrigado Nicolas
ps. uma na página onde estou postando este comentário, no link http://www.cprogressivo.net/2013/03/Como-passar-vetores-arrays-e-Matrizes-vetores-multidimensionais-para-funcoes-emC.html abaixo do título Como passar matrizes (vetores multidimensionais) para funções, segundo parágrafo, segunda linha desse parágrafo, tem uma letrinha trocada, diz: "paz de colchetes[]", deveria dizer "par de colchetes[]". Esta é toda a contribuição que posso dar por hora... um pequeno detalhe, que ajude neste grandioso empreendimento de ensino.
Cara, eu tava indo muito bem, mas essa parte de vetores e matrizes em funções me bugou completamente. Se possível, explica detalhado os códigos, pra ficar mais fácil de entender. Eu paralisei nesse código: for(count=0 ; count<n ; count++) media += numeros[count];
Me deu a tela azul do da morte eu to travado nela.
Gostaria que as dimensões da matriz fossem definidas pelo usuário no inicio do programa. Somente consegui fazer o programa rodar definindo o numero de linhas e fixando o numero de coluna através do #define. Alguém sabe me explicar como fazer isto?
#include #include #define ROW 3 #define WIDTH 3
int createMatrix (int matrixImput [][WIDTH], int rowsInput, int widthInput );
int main() { setlocale(LC_ALL, "Portuguese"); int row, width;
// printf("\t Entre com as dimensões da matrix: [ ][ ]"); // printf("\n\t Quantidade de linhas: "); // scanf("%d", &row); row = ROW; width = WIDTH; // printf("\t Quantidade de colunas: "); // scanf("%d", &width);
O exemplo funcionou. MAS quando eu tento passar um array do tipo de uma classe que eu criei, por exemplo classe "Produto" o compilador não deixa enviar o objeto declarado como parametro. Ele diz que não é possível converter Produto* para Produto(*)[100], por exemplo. Não entendi essa "conversão" necessária. Procurei por tudo, dei até passos para trás no estudo pra tentar entender, mas eu estou quase desistindo. Todos os tutoriais falam a mesma coisa, mas pra mim simplesmente NÃO FUNCIONA.
1 de novembro de 2020 às 10:35
Agora que você já domina bem o uso das funções e dos
vetores em C, vamos unir esses dois conhecimentos e ensinar você como passar
vetores (unidimensionais, multidimensionais, matriz), ou arrays, para funções.
Como o curso C Progressivo vai mostrar, para programar em
C é bem comum passar vetores, e outras estruturas de dados, para funções.
Como você viu nos exemplos passados de nossa apostila de C, dá um certo
trabalhinho lidar com vetores.
E para o código não ficar
confuso e grande na main(),
costumamos colocar os códigos que operam vetores em funções.
Como se tornar um programador C e ter certificado
Baixe este conteúdo: Apostila C Progressivo
Como passar um vetor parar uma
função em C
Este tópico está separado do anterior, pois aqui temos
mais um detalhe que precisamos aprender sobre a passagem de matrizes para
funções.
Sabemos que matrizes multidimensionais são aqueles que
possuem duas ou mais dimensões.
Vimos também em nosso tutorial sobre matrizes (ou vetoresmultidimensionais) em C, que cada dimensão da matriz exige um paz de colchetes
[ ].
Pois bem, o detalhe para passar matriz para as funções é
que o primeiro par de colchetes pode sempre ir vazio, e os demais preenchidos.
Por exemplo, vamos supor que você criou um jogo da velha,
que é uma matriz 3x3, e uma função que checa se algum jogador ganhou o jogo
completando alguma linha.
Essa função teria o seguinte cabeçalho:
int checaLinha( int matriz[][3] )
Ou seja, não precisamos especificar o número de linhas
que a matriz tem, mas somente o número de colunas.
Exemplo de código: Como preencher, exibir uma matriz e
seu traço, passando a matriz para uma função em C
Crie um programa em C que peça para o usuário preencher
uma matriz 3x3, que exiba ela e o valor de seu traço em seguida. Use funções
para preencher a matriz, exibir e calcular o traço.
Esse aplicativo em C já foi totalmente resolvido como
exemplos, no artigo passado de nossa apostila de C.
O que vamos fazer aqui é criar três funções: uma para
preencher a matriz, outra pra exibir e uma que calcula o traço.
Note como a nossa função main() ficou bem limpa.
Esse é o ideal, é padrão C Progressivo!
include <stdio.h>
#define DIM 3
// Curso C Progressivo: www.cprogessivo.net
// O melhor curso de C, Online e gratuito !
// Artigos, apostilas, tutoriais e vídeo-aulas sobre
// a linguagem de programação C !
void preencher(int matriz[][DIM])
{
int linha,
coluna;
for(linha=0 ; linha < DIM ; linha++)
for(coluna=0 ; coluna < DIM ; coluna++)
{
printf("Entre com o elemento matriz[%d][%d]: ", linha+1, coluna+1);
scanf("%d", &matriz[linha][coluna]);
}
}
void exibir(int matriz[][DIM])
{
int linha,
coluna;
for(linha=0 ; linha < DIM ; linha++)
{
for(coluna=0 ; coluna < DIM ; coluna++)
printf("%3d ", matriz[linha][coluna]);
printf("\n");
}
}
int traco(int matriz[][DIM])
{
int count,
traco=0;
for(count=0 ; count < DIM ; count++)
traco += matriz[count][count];
return traco;
}
int main(void)
{
int matriz[DIM][DIM];
preencher(matriz);
exibir(matriz);
printf("\nTraco da matriz: %d\n", traco(matriz));
return 0;
}
postado por Programação Progressiva às 17:23 em 6 de mar. de 2013
15 Comentários
Fechar esta janela Ir para formulário de comentárioLegal, foi muito útil. Ótimo site, sempre uso para consultas.
27 de fevereiro de 2014 às 09:49
Legal o blog, estou aprendendo muito.
Tem algum jeito de eu passar uma matriz para uma função permitindo que o usuário determine as linhas e colunas da matriz?
26 de julho de 2014 às 12:13
Eu criei uma estrturada onde vc define a qde de linhas e colunas
#include
int main(){
int DIM;
printf("Digite o tamanho da matriz que deseja criar: "); scanf("%d",&DIM);
int matriz[DIM][DIM];
int linha, coluna;
for(linha = 0 ; linha < DIM ; linha++)
for(coluna = 0 ; coluna < DIM ; coluna++)
{
printf("Elemento [%d][%d]: ", linha+1, coluna+1);
scanf("%d", &matriz[linha][coluna]);
}
for(linha = 0 ; linha < DIM ; linha++)
{
for(coluna = 0 ; coluna < DIM ; coluna++)
printf("%4d", matriz[linha][coluna]);
printf("\n");
}
system("pause");
return 0;
}
23 de setembro de 2014 às 09:47
Bom dia C progressivo.
Minha dúvida é o seguinte: é regra ter que por colchetes vazio [] para linha e por um tamanho para a coluna?
Porque caso eu tenha que fazer um algoritmo que o usuário determine a dimensão da matriz, logo, a dimensão que essa matriz recebeu é local (não sei nem se estou me expressando corretamente.), no seu caso, você criou uma constante, caso eu não venha criar uma constante, comoi eu posso resolver esse problema? Att.
17 de outubro de 2014 às 04:22
como eu faço para retornar um vetor de uma função para a função main
2 de fevereiro de 2015 às 06:40
O que eu acho:
Se um vetor é passado para uma função e alterado dentro dela
e essas alterações são mantidas, para que retornar ele de uma
função ?
Se for para atribuir o conteúdo dele à outro vetor basta após
o uso da função e copiar com strcpy().
17 de setembro de 2015 às 07:14
Muito bem explicado como sempre, parabéns mais uma vez ao site!!
Agora, só um pequeno detalhe:
No lugar de "matriz exige um paz de colchetes" não seria "matriz exige um PAR de colchetes"?
Mais uma vez, muito obrigado pelo ótimo curso :)
15 de outubro de 2015 às 16:52
Cara, se vc tiver passado o vetor por ponteiro e tiver usando sua funçao no vetor, so usar ele normalmente, pq vc so passo o endereço da memoria nao os valores do vetor, ent e so usar normal na linha de baixo.
14 de setembro de 2016 às 10:42
thiaguinhopier@yahoo.com.br , o que vc procura ira encontrar em alocaçao dinamica, ja dependendo do seu problema e do dizer pra funçao vai usar uma matriz muito grande e usar so parte dele ;D
#so nao deixando o povo na vacuo. ashushu
14 de setembro de 2016 às 10:51
Estou achando ótimas todas as suas postagens no blog sobre c, muito boas mesmo!
Vocês estão me ajudando muito.
muito obrigado
Nicolas
ps. uma na página onde estou postando este comentário, no link http://www.cprogressivo.net/2013/03/Como-passar-vetores-arrays-e-Matrizes-vetores-multidimensionais-para-funcoes-emC.html
abaixo do título Como passar matrizes (vetores multidimensionais) para funções, segundo parágrafo, segunda linha desse parágrafo, tem uma letrinha trocada, diz: "paz de colchetes[]", deveria dizer "par de colchetes[]". Esta é toda a contribuição que posso dar por hora... um pequeno detalhe, que ajude neste grandioso empreendimento de ensino.
4 de abril de 2017 às 15:19
Cara, eu tava indo muito bem, mas essa parte de vetores e matrizes em funções me bugou completamente. Se possível, explica detalhado os códigos, pra ficar mais fácil de entender. Eu paralisei nesse código:
for(count=0 ; count<n ; count++)
media += numeros[count];
Me deu a tela azul do da morte eu to travado nela.
3 de junho de 2017 às 08:15
Muito bom!
25 de outubro de 2017 às 16:28
Gostaria que as dimensões da matriz fossem definidas pelo usuário no inicio do programa. Somente consegui fazer o programa rodar definindo o numero de linhas e fixando o numero de coluna através do #define.
Alguém sabe me explicar como fazer isto?
#include
#include
#define ROW 3
#define WIDTH 3
int createMatrix (int matrixImput [][WIDTH], int rowsInput, int widthInput );
int main()
{
setlocale(LC_ALL, "Portuguese");
int row, width;
// printf("\t Entre com as dimensões da matrix: [ ][ ]");
// printf("\n\t Quantidade de linhas: ");
// scanf("%d", &row);
row = ROW;
width = WIDTH;
// printf("\t Quantidade de colunas: ");
// scanf("%d", &width);
int matrix[row][width];
createMatrix (matrix, row, width );
printMatrix (matrix, row, width );
}
int createMatrix (int matrix [][WIDTH], int rowsInput, int widthInput )
{
int counter_row, counter_width;
for(counter_row = 0; counter_row < rowsInput; counter_row++)
{
printf("\n");
for (counter_width = 0; counter_width < widthInput; counter_width++)
{
printf("Entre com o elemento [%d][%d]: ", counter_row + 1, counter_width + 1 );
scanf("%d", &matrix[counter_row][counter_width]);
}
}
}
int printMatrix (int matrix [][WIDTH], int rowsInput, int widthInput)
{
int counter_row, counter_width, traco = 0;
for(counter_row = 0; counter_row < rowsInput; counter_row++)
{
printf("\n\t");
traco += matrix[counter_row][counter_row];
for (counter_width = 0; counter_width < widthInput; counter_width++)
printf("%4d ", matrix[counter_row][counter_width]);
}
printf("\n");
printf("\n \tO traço da Matrix é: %4d \n", traco);
}
29 de outubro de 2017 às 13:45
Boa tarde, como passo de uma função struct para uma matriz de inteiros no programa Scilab?
18 de dezembro de 2017 às 08:50
O exemplo funcionou. MAS quando eu tento passar um array do tipo de uma classe que eu criei, por exemplo classe "Produto" o compilador não deixa enviar o objeto declarado como parametro. Ele diz que não é possível converter Produto* para Produto(*)[100], por exemplo. Não entendi essa "conversão" necessária. Procurei por tudo, dei até passos para trás no estudo pra tentar entender, mas eu estou quase desistindo. Todos os tutoriais falam a mesma coisa, mas pra mim simplesmente NÃO FUNCIONA.
1 de novembro de 2020 às 10:35