Operações com matrizes [RESOLVIDO]

1. Operações com matrizes [RESOLVIDO]

Gustavo Boff
GustavoBDR

(usa Ubuntu)

Enviado em 10/02/2016 - 16:00h

Boa tarde,

Estou com uma dúvida quanto a soma de colunas em matrizes.






--> Pelo que eu sei, para somar valores inteiros de colunas, a matriz deve ser "int":
int v_matriz[0][9];
No exemplo a matriz tem apenas uma linha e 10 colunas.

--> Depois atribuí valores as colunas:
puts("Digite um numero:");
scanf("%d",v_matriz);

// Aqui ele já se perde...

--> Depois, teria que fazer uma operação com um valor específico da matriz:
v_soma = (v_matriz[0][2]) + 1;

--> Por fim o resultado:
printf("result: %d",v_soma);

-----------------------------------------------------------------------------------
Código completo:

#include <stdio.h>

int main (){
int v_matriz[0][9];
int v_soma;

puts("Digite um numero:");
scanf("%d",v_matriz);

v_soma = (v_matriz[0][2]) + 1;
printf("Result: %d",v_soma);

return(0);
}
--------------------------------------------------------
Outro exemplo que não deu certo, usando string:
int main (){

char v_string[1][9];
int v_soma;
puts("Digite 9 numeros");
scanf("%s",v_string);

printf("O numero digitado foi: %s\n", v_string);

printf("Posicao 2: %c \n\n",v_string[0][2]);

v_soma = v_string[0][2]+1;

printf("result 0: %d",v_soma);
}


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/02/2016 - 23:51h

GustavoBDR escreveu:

--> Pelo que eu sei, para somar valores inteiros de colunas, a matriz deve ser "int":
int v_matriz[0][9];
No exemplo a matriz tem apenas uma linha e 10 colunas.


Não. Isso que você escreveu é simplesmente um erro lógico (ainda que não seja de sintaxe).

Quando você declara um array, você tem de dizer a quantidade de elementos. Quando você diz que uma das dimensões da sua matriz tem zero elementos, concorda que alguma coisa não faz sentido? Para que serve uma matriz com zero linhas?

Não confunda a faixa sobre a qual os índices podem variar com o tamanho declarado. Se você quer um array com um elemento inteiro, deve declará-lo como “int array[1]”. Na hora de usá-lo é que você deve se lembrar que o primeiro elemento é sempre o que tem índice zero. No nosso caso, como a quantidade máxima de índices possíveis é 1, o primeiro índice possível é também o último. Se fosse um array de cinco elementos, sendo o primeiro índice igual a 0, o índice máximo seria 4. Pode contar para conferir: o conjunto de índices possíveis, {0, 1, 2, 3, 4}, tem ou não tem cinco elementos?

--> Depois atribuí valores as colunas:
puts("Digite um numero:");
scanf("%d",v_matriz);

// Aqui ele já se perde...


Tem mesmo de se perder, não? Você declarou uma matriz com tamanho zero (0×9=0)! A sintaxe da linguagem permite isso -- embora logicamente não faça sentido -- mas o padrão diz que qualquer tentativa de usar um array de tamanho zero tem comportamento indefinido (undefined behavior, ou “UB”). UB é sempre uma incógnita: pode parecer que funciona, pode corromper a memória associada a outra variável, pode crashar o programa, pode não acontecer rigorosamente nada... Por isso mesmo, você é que não pode usar um negócio desses.

Corrija sua declaração. Se você quer uma matriz de uma linha por dez colunas com elementos inteiros, tem de dizer o seguinte.

int v_matriz[1][10]; 


Outro erro é que você colocou v_matriz como destino da leitura do valor inteiro via scanf(). Como você usou a conversão %d, o argumento seguinte deveria ser um ponteiro para inteiro. Entretanto, o tipo de v_matriz, tomado como expressão, é “ponteiro para array de inteiros com 9 elementos”.

Para dizer como consertar, eu teria primeiro de entender o que você quis fazer. Pelo comentário que você fez na postagem, parece até que você esperava que fosse criado espaço para a sua matriz que inicialmente tinha tamanho zero. É isso?

De todo modo, com scanf() você terá de ter tantas conversões quantos forem os elementos que você quiser ler. Ou então você chama scanf() várias vezes seguidas, lendo um elemento de cada vez.

---

Tente consertar pelo menos os pontos que eu já indiquei, e depois volte a perguntar. Realmente, olhando seu código, não consegui entender o que você realmente queria.

3. Obrigado!

Gustavo Boff
GustavoBDR

(usa Ubuntu)

Enviado em 13/02/2016 - 10:00h

Com a resposta que enviaste já pude dar continuidade ao desenvolvimento, muito obrigado!
Assim que concluir irei postar no tópico.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts