Ir ao conteúdo

Posts recomendados

Postado

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;

 

Postado

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

Postado

 

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.

Postado
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.

 

Postado

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 ? 

Postado

@elyastrid No caso, estaria perguntando o valor de cada vetor certo? Nesse caso é necessário. Mas seria bem interessante se você perguntasse ao usuário o tamanho do vetor, e depois os números correspondentes de cada vetor, pois no enunciado ele não especifica o tamanho dele

Postado

@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;
}

 

Postado

@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
Postado

@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...

Postado

@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]);

 

Postado

@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;
}

 

Postado

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
Postado

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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!