Ir ao conteúdo
  • Cadastre-se

C Exercícios de Vetor e Matriz


elyastrid

Posts recomendados

Gostaria de saber se estou no caminho certo na resolução dessas duas questões ?

1- Crie um programa que copie para um vetor os elementos de outro em ordem crescente.

2- Faça um algoritmo que crie uma matriz identidade onde o usuário deve informar a ordem da matriz.

 

Meus códigos:

Código do Exercício 1

#include "stdio.h"
#include "stdlib.h"

int main () {
	int vet1 [5];
	int vet2 [5];
	int maior, menor;
	
for (i=0; i<=4;i++);
scanf ("%d", vet1[i]); // lê os dados

maior=0; // assume que o maior valor está na primeira posição 
for (i=0; i<=4;i++);
if vet1[i] > vet1 [maior];
maior= i;   // acha a posição do maior

for (j=0;j<=4;j++);
{
	menor=0;
	for (i=0;i<=4;i++);
	if vet1[i] < vet1 [menor];
	menor= i;
	
	vet2 [j] = vet1 [menor];
	vet1 [menor] = vet1 [maior];
}
 for (i=0; i<=4; i++);
 printf ("%d \n", vet2 [i]); // imprime os dados


return 0;
}

Código do 2:

#include "stdlib.h"
#include "stdio.h"

int main () {
	int linhas;
	int colunas;
	int l;
	int c;
	int matriz;
	
	
	
	
printf ("Informe o numero de linhas:");
scanf ("%d",&linhas);
printf ("Informe o numero de colunas:");
scanf ("%d", &colunas);


for (l=0,l<linhas;l++); {
	for (c=0;c<colunas;c++) {
		matriz [l] [c] = 0;
	}
}

return 0;

 

Link para o comentário
Compartilhar em outros sites

Sou iniciante em C, mas vou tentar dizer o que eu vi, que no caso foi nada, eu não vi problemas em geral, apenas errinhos bobos ou de redundância. Você está sim no caminho certo, mas a segunda está incompleta, e pelo que você disse, ainda não terminou, certo?
 

3 horas atrás, elyastrid disse:

int vet1 [5]; int vet2 [5]; int maior, menor;

Nesse caso aqui, daria pra deixar tudo na mesma linha, para poder economizar linhas no programa, não há necessidade de se colocar cada declaração em uma linha. Também faltou declarar o "i" como inteiro

 

3 horas atrás, elyastrid disse:

scanf ("%d", vet1[i]); // lê os dados

Aqui faltou o "&", não acho que você teria errado algo tão bobo, ainda mais considerando que no segundo exercício você lembrou de colocar.

 

3 horas atrás, elyastrid disse:

for (i=0; i<=4;i++); if vet1[i] > vet1 [maior];

Nesse caso, você pode apenas colocar que o "i" será igual a um, (i = 1; i <= 4; i++), pois a primeira checagem sempre será falsa já que estará comparando o mesmo número, assim economiza processamento.

 

3 horas atrás, elyastrid disse:

menor=0; for (i=0;i<=4;i++); if vet1[i] < vet1 [menor]; menor= i;

Mesma coisa do caso acima, porém nesse, você pode deixar "i=1" devido a declaração do "menor = 0", que sempre irá ocorrer no loop quando se reiniciar, então se caso o menor for o vet1[0], o vet1[menor] dará falso em todas as situações, assim sem ter a necessidade de fazer a checagem com o vet1[0]. Você pode também colocar o "menor = 0" fora do loop e permanecer com "i = 0" no for. 

 

3 horas atrás, elyastrid disse:

int main () { int linhas; int colunas; int l; int c; int matriz;

Mesma coisa do primeiro caso, apenas colocar tudo na primeira linha para economizar memória. 

 

 

3 horas atrás, elyastrid disse:

printf ("Informe o numero de linhas:"); scanf ("%d",&linhas);

 Eu não sei se você já aprendeu, mas é possível utilizar acentos no programa, apenas acessando a biblioteca locale, a partir do comando #include "locale.h", e colocando dentro do int main.

 

3 horas atrás, elyastrid disse:

for (l=0,l<linhas;l++); {

Também ficou faltando o ponto e virgula (;) aqui, mas acho que foi o mesmo caso do "&".

 

E a última coisa, foi que ficou faltando fechar  o "int main ()" no segundo código, acredito que esses erros no "&" e pra fechar o int main vieram quando você copiou o código para o site.

 

Uma dica, sempre indente seus códigos, mantém ele mais bonito e legível (não que o seu não esteja), e procure também não gastar linhas desnecessárias. Essas são coisas que eu faço sempre, mas apenas observo no código dos outros.

 

Um abraço e bons estudos.

adicionado 19 minutos depois

A propósito, você precisar declarar a variável "matriz" como uma matriz

Link para o comentário
Compartilhar em outros sites

 

for (i=0; i<=4;i++);

Não coloque ";" após o for, caso contrário o código que vem depois vais se executado fora do laço.

 


 

No segundo problema, uma matriz identidade tem que ter o número de linhas e colunas iguais. Então, ao invés de ler colunas e linhas, diga "Informe a ordem da matriz":

printf ("Informe a ordem da matriz:");
scanf ("%d",&n);

E a variável matriz deve ser um array:

int matriz[n][n];

Por fim, no laço coloque uma lógica para verificar se a linha é igual a coluna.

if (l == c) matriz[l][c] = 1; else matriz[l][c]=0;

Tente terminar, imprimindo o array matriz. Se ainda tiver dúvida, poste novamente aqui.

Link para o comentário
Compartilhar em outros sites

14 horas atrás, Flávio Pedroza disse:

Não coloque ";" após o for, caso contrário o código que vem depois vais se executado fora do laço.

@Flávio Pedroza, por eu ser um iniciante, achei que isso era normal e até certo, mas no meu caso eu ainda prefiro utilizar as chaves, ao meu ver fica bem mais organizado (por saber quando começa e termina o loop, condição, etc) e ser melhor visualmente.

 

Link para o comentário
Compartilhar em outros sites

Ajustei o código conforme o que você pontuou. O código compilou, mas ele retorna com valor 0.

#include "stdlib.h"
#include "stdio.h"

int main () {
	int linhas, colunas,l, c,n ;
	int matriz[n][n];

	
	
printf ("Informe a ordem da matriz:");
scanf ("%d",&n);


for (l=0;l<linhas;l++); {
	for (c=0;c<colunas;c++) {
		matriz [n] [n] = 0;
		if (l == c) matriz[l][c] = 1; else matriz[l][c]=0;

	}
}
printf ("%d", matriz [n] [n]);
return 0;

}

 

adicionado 2 minutos depois

@Sahrutar No primeiro exercício, é necessário pedir pro usuário 4 vezes para informar os elementos do vetor ou não ? 

Link para o comentário
Compartilhar em outros sites

@Sahrutar Defini o tamanho do vetor como 5. Entretanto, ele não está colocando os números em ordem crescente...

#include "stdio.h"
#include "stdlib.h"

int main () {
	int vet1 [5];
	int vet2 [5], maior, menor, i,j, matriz;
	
printf ("Informe o primeiro valor:");
scanf ("%d", &vet1);
printf ("Informe o segundo valor:");
scanf ("%d", &vet1);
printf("Informe o terceiro valor:");
scanf ("%d", &vet1);
printf ("Informe o quarto valor:");
scanf ("%d", &vet1);
printf ("Informe o quinto valor:");
	
for (i=0; i<=4;i++);
scanf ("%d", &vet1[i]); // lê os dados

maior=0; // assume que o maior valor está na primeira posição 
for (i=1; i<=4;i++);
if (vet1[i] > vet1 [maior]);
maior= i;   // acha a posição do maior

for (j=0;j<=4;j++);
{
	menor=0;
	for (i=1;i<=4;i++)
	if (vet1[i] < vet1 [menor]);
	menor= i;
	
	vet2 [j] = vet1 [menor];
	vet1 [menor] = vet1 [maior];
}
 for (i=0; i<=4; i++)
 printf ("%d \n", vet2 [i]); // imprime os dados


return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@elyastrid Sobre a segunda questão, tem alguns pontos aqui. 

 

3 horas atrás, elyastrid disse:

int matriz[n][n];

A matriz deve ser declarada após perguntar o tamanho dela, essa foi a forma que encontrei de se fazer uma matriz dinâmica, então ficaria dessa forma

int main () {
int l, c, n;

printf ("Informe o numero de linhas: ");
scanf ("%d", &n);

int matriz[n][n];

 

3 horas atrás, elyastrid disse:

for (l=0;l<linhas;l++); { for (c=0;c<colunas;c++) {

Essa aqui possui alguns erros, vamos ao primeiro, a variável "linhas" e "colunas" não é mais utilizada, então, você deve colocar a variável "n", pois é ele que é o tamanho máximo da matriz.

 

3 horas atrás, elyastrid disse:

matriz [n] [n] = 0;

Esse matriz[n][n] = 0 não tem absolutamente nenhum uso, então pode ser apagado.

 

3 horas atrás, elyastrid disse:

printf ("%d", matriz [n] [n]);

Está faltando um loop aqui, pois da forma que você fez, ele sempre irá imprimir a matriz[n][n], podendo ser matriz[3][3], matriz[7][7], etc. Irá imprimir somente um. Então faça o seguinte:

 

for (l = 0; l < n; l++){
	for (c = 0;c < n; c++) {
    printf ("| %d |", matriz[l][c]); // As "|" servem para deixar mais organizado
	}
    printf ("\n"); //Irá deixar mais organizado, dará um espaço a cada n colunas.
}

Detalhe, você no caso quer imprimir matriz[l][c] e não matriz[n][n], pois o *n* nunca irá mudar a não ser que você peça novamente.

adicionado 5 minutos depois
1 hora atrás, elyastrid disse:

printf ("Informe o primeiro valor:"); scanf ("%d", &vet1); printf ("Informe o segundo valor:"); scanf ("%d", &vet1); printf("Informe o terceiro valor:"); scanf ("%d", &vet1); printf ("Informe o quarto valor:"); scanf ("%d", &vet1); printf ("Informe o quinto valor:");


printf ("Informe o primeiro valor:"); 
scanf ("%d", &vet1[0]); 
printf ("Informe o segundo valor:"); 
scanf ("%d", &vet1[1]); 
printf("Informe o terceiro valor:"); 
scanf ("%d", &vet1[2]); 
printf ("Informe o quarto valor:"); 
scanf ("%d", &vet1[3]); 
printf ("Informe o quinto valor:"); 
scanf ("%d", &vet1[4]);

 

Mil perdões, eu acho que não havia entendido o que você queria dizer, no caso no começo você ja estava perguntando todos os vetores igual no seu primeiro código. E bom, caso você quisesse fazer dessa forma, o correto seria como está acima, porém você pode deixar da outra forma que economiza linhas e é bem mais prático.

for (i=0; i<=4;i++){
scanf ("%d", &vet1[i]);} // lê os dados

 

adicionado 9 minutos depois

Se quiser fazer algo dinâmico, onde pergunta o número do vetor a cada pergunta, faça algo semelhante a isso

 

for (i=0; i<=4;i++){
printf ("Diga o valor do vetor %d -> ", i+1);
scanf ("%d", &vet1[i]);} // lê os dados

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Sahrutar O segundo exercício consegui concluir com o que me apontou. Agora, referente ao primeiro, coloquei essa parte

1 hora atrás, Sahrutar disse:

for (i=0; i<=4;i++){ printf ("Diga o valor do vetor %d -> ", i+1); scanf ("%d", vet1);} // lê os dados

Entretanto, ele só pede o valor uma única vez e não me retorna nada...

Link para o comentário
Compartilhar em outros sites

@elyastrid Bom, primeiramente, eu esqueci o "&" no meu exemplo, mil perdões, se não me engano, dessa forma, ele armazena como localização. Você também esqueceu de colocar o "i" entre colchetes depois do vet1, pois da forma que você colocou, ele irá armazenar na variável vet1. Porém o que primordialmente faz esse erro acontecer é a falta do "&"

Ao invés de ser 

36 minutos atrás, elyastrid disse:

scanf ("%d", vet1)

 

será

scanf ("%d", &vet1[i]);

 

Link para o comentário
Compartilhar em outros sites

@Sahrutar Claro.

#include "stdio.h"
#include "stdlib.h"

int main () {
	int vet1 [5];
	int vet2 [5], maior, menor, i,j, matriz;
	
for (i=0; i<=4;i++){
printf ("Diga o valor do vetor %d -> ", i+1);
scanf ("%d", &vet1[i]);} // lê os dados
	
maior=0; // assume que o maior valor está na primeira posição 
for (i=1; i<=4;i++);
if (vet1[i] > vet1 [maior]);
maior= i;   // acha a posição do maior

for (j=0;j<=4;j++);
{
	menor=0;
	for (i=1;i<=4;i++)
	if (vet1[i] < vet1 [menor]);
	menor= i;
	
	vet2 [j] = vet1 [menor];
	vet1 [menor] = vet1 [maior];
}
 for (i=0; i<=4; i++)
 printf ("%d \n", vet2 [i]); // imprime os dados


return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Como você ainda está começando a aprender C é melhor que sempre use { e } após comandos de controle de fluxo do programa, como for, if, while, etc, mesmo que dentro das chaves só exista 1 comando... E nunca vai ; no final da linha desses comandos (existem alguns poucos casos em que colocar ; nessas linhas é uma opção, e você ainda não chegou no ponto de usar isso, e não será o caso em lugar algum nesse exercício).

 

(Mais pra frente quando já tiver mais prática poderá omitir as chaves quando houver apenas 1 comando, mas primeiro tem que aprender a fazer sempre com chaves. Alguns programadores até preferem sempre usar chaves para manter a consistência do código.)

 

Ok, segue seu código com modificações, fiz apenas essas correções de sintaxe da linguagem C, colocando { e } nos devidos lugares (e removendo os ; onde não deveriam existir), mas não alterei o restante da lógica do seu programa:

 

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

int main () {
    int vet1[5];
    int vet2[5], maior, menor, i,j, matriz;
	
    for (i=0; i<=4;i++){
        printf ("Diga o valor do vetor %d -> ", i+1);
        scanf ("%d", &vet1[i]); // lê os dados
    }
    	
    maior=0; // assume que o maior valor está na primeira posição 
    for (i=1; i<=4;i++){
        if (vet1[i] > vet1[maior]){
            maior= i;   // acha a posição do maior
        }
    }
    
    for (j=0;j<=4;j++){
    	menor=0;
    	for (i=1;i<=4;i++){
    	    if (vet1[i] < vet1[menor]){
    	        menor= i;
    	    }
    	}
    	
    	vet2[j] = vet1[menor];
    	vet1[menor] = vet1[maior];
    }
    
    for (i=0; i<=4; i++){
         printf ("%d \n", vet2[i]); // imprime os dados
    }
    
    return 0;
}

 

É importante você entender essa parte, note também que fica fácil entender o fluxo dos comandos com todas as chaves { } e com o código bem indentado.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Tente fazer o seguinte, todo lugar que tem o for, ao invés de usar ponto e virgula (;), você usará chaves( {} ).

 

1 hora atrás, elyastrid disse:

for (i=0; i<=4;i++){ printf ("Diga o valor do vetor %d -> ", i+1); scanf ("%d", &vet1[i]);} // lê os dados

Irá fazer igual aqui.

 

 

 

adicionado 4 minutos depois

Exatamente como o @isrnick fez, substitua todo ponto e virgula em um loop ou declaração por chaves, além de ficar mais fácil de entender, irá te permitir não ter esse tipo de problema no seu código.

 

Acerca dessa questão, é interessante você perguntar ao usuário o tamanho do vetor já que a questão em sí não especifica. 

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!