Informática, perguntado por viniciusredchil, 1 ano atrás

Crie uma função em C que receba um vetor de 20 números float e ordene-o de forma decrescente obedecendo as seguinte regra:

Não é permitido a criação de variáveis locais, utilização de variaveis globais ou alguma forma de alocação extra de memória além do vetor float de 20 casas recebida (De entrada).


bokomoko: Isso vai ser interessante. Qual escola propös esse exercício ?
viniciusredchil: Podem fazer com menos casas. 4 é o suficiente.
bokomoko: Vinicius, a técnica é bem interessante. você que a desenvolveu ou foi algum professor ? Qual é a escola ?
viniciusredchil: Tive 1 período de aulas em C na UFU. Boa parte do código eu que desenvolvi, mas a técnica de troca de valores sem utilizar auxiliar eu vi uma vez na internet e achei interessante usar.
bokomoko: gostou do repli.it ?
viniciusredchil: Acho que sim, tenho que usar ele mais

Soluções para a tarefa

Respondido por CleidianaReis
2
Olá!

Veja o código comentado a seguir:

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

float vetor[20];  //declaracao vetor 20 posicoes  
int i, j; //variaveis auxiliares
//Obs: Todas variaveis globalmente como exigido no problema 

void desce(){

if(vetor[0] < vetor[1]){ //compara a posicao com a proxima se eh menor

vetor[0] = vetor[0]+vetor[1];vetor[1] = vetor[0]-vetor[1];vetor[0] = vetor[0]-vetor[1];

}   if(vetor[1] < vetor[2]){ //compara a posicao com a proxima se eh menor

vetor[1] = vetor[1]+vetor[2];vetor[2] = vetor[1]-vetor[2];vetor[1] = vetor[1]-vetor[2];

} if(vetor[2] < vetor[3]){ //compara a posicao com a proxima se eh menor

vetor[2] = vetor[2]+vetor[3];vetor[3] = vetor[2]-vetor[3];vetor[2] = vetor[2]-vetor[3];

} if(vetor[0] < vetor[1]){ //compara a posicao com a proxima se eh menor

vetor[0] = vetor[0]+vetor[1];vetor[1] = vetor[0]-vetor[1];vetor[0] = vetor[0]-vetor[1];

}   if(vetor[1] < vetor[2]){ //compara a posicao com a proxima se eh menor

vetor[1] = vetor[1]+vetor[2];vetor[2] = vetor[1]-vetor[2];vetor[1] = vetor[1]-vetor[2];

} if(vetor[2] < vetor[3]){ //compara a posicao com a proxima se eh menor

vetor[2] = vetor[2]+vetor[3];vetor[3] = vetor[2]-vetor[3];vetor[2] = vetor[2]-vetor[3];

} if(vetor[0] < vetor[1]){ //compara a posicao com a proxima se eh menor

vetor[0] = vetor[0]+vetor[1];vetor[1] = vetor[0]-vetor[1];vetor[0] = vetor[0]-vetor[1];

}   if(vetor[1] < vetor[2]){ //compara a posicao com a proxima se eh menor

vetor[1] = vetor[1]+vetor[2];vetor[2] = vetor[1]-vetor[2];vetor[1] = vetor[1]-vetor[2];

} if(vetor[2] < vetor[3]){ //compara a posicao com a proxima se eh menor

vetor[2] = vetor[2]+vetor[3];vetor[3] = vetor[2]-vetor[3];vetor[2] = vetor[2]-vetor[3];

} if(vetor[0] < vetor[1]){ //compara a posicao com a proxima se eh menor

vetor[0] = vetor[0]+vetor[1];vetor[1] = vetor[0]-vetor[1];vetor[0] = vetor[0]-vetor[1];

}   if(vetor[1] < vetor[2]){ //compara a posicao com a proxima se eh menor

vetor[1] = vetor[1]+vetor[2];vetor[2] = vetor[1]-vetor[2];vetor[1] = vetor[1]-vetor[2];

}
if(vetor[2] < vetor[3]){ //compara a posicao com a proxima se eh menor

vetor[2] = vetor[2]+vetor[3];vetor[3] = vetor[2]-vetor[3];vetor[2] = vetor[2]-vetor[3]; }

}

main(){       

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

scanf("%f", &vetor[i]); //leitura do vetor

}
desce();//funcao ordenacao decrescente

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

printf("%.2f ",vetor[i]);//print vetor ordenado

}
printf("\n");

}

Me desculpe pela identação não consigo responder para ficar certinho!

viniciusredchil: Está quase, falta apenas retirar a variável auxiliar vet da função.
CleidianaReis: Atualizei denovo, usei as operações aritméticas! Desculpe pela má identação
viniciusredchil: Obrigado! O código está certíssimo agora.
bokomoko: Deveras interessante, mas qual a aplicação ? Perdoe-me se pareço o estraga prazer ao assistir a primeira demonstração de Alexander Grahan Bell
viniciusredchil: Geralmente, variáveis locais e globais consumem muita memória ram, quando aplicadas em um Arduino, por exemplo, por isso nesses casos é interessante que se aloque uma quantidade mínima principalmente, para programas muito extensos e complexos
bokomoko: esse argumento não convence. O código ficou MMMMMMUUUUUUITO maior do que o espaço que 2 ou 3 variáveis locais ocuparia
viniciusredchil: É diferente as duas memórias...
viniciusredchil: Tem um limite para a quantidade de variáveis
bokomoko: ok, tem um limite, mas não é de 3 ou 4. E a memória é uma só ok ?
bokomoko: perdão, as memórias são diferentes de fato.
Respondido por cauapereiracastrosjj
0

Resposta:

Explicação:

include <stdio.h>

#include <stdlib.h>

float vetor[20]; //declaracao vetor 20 posicoes

int i, j; //variaveis auxiliares

//Obs: Todas variaveis globalmente como exigido no problema

void desce(){

if(vetor[0] < vetor[1]){ //compara a posicao com a proxima se eh menor

vetor[0] = vetor[0]+vetor[1];vetor[1] = vetor[0]-vetor[1];vetor[0] = vetor[0]-vetor[1];

} if(vetor[1] < vetor[2]){ //compara a posicao com a proxima se eh menor

vetor[1] = vetor[1]+vetor[2];vetor[2] = vetor[1]-vetor[2];vetor[1] = vetor[1]-vetor[2];

} if(vetor[2] < vetor[3]){ //compara a posicao com a proxima se eh menor

vetor[2] = vetor[2]+vetor[3];vetor[3] = vetor[2]-vetor[3];vetor[2] = vetor[2]-vetor[3];

Perguntas interessantes