Ir para o conteúdo
jOrGe.mRNh

Problema com Algoritmo de Ordenação

Mensagens Recomendadas

jOrGe.mRNh    0
jOrGe.mRNh

Boas pessoal,

Mais uma vez recorro à vossa ajuda.

Neste programa eu pretendo organizar os vestores por quantStock, mas acho que estou a falhar algumas ligações e portanto o algoritmo não está a funcionar:

void consultarstock1 (Armazem *arm)
{
int i, j, n, temp;

printf ("\nTipo | Referencia | Preco | Quantidade em Stock | Stock Minimo | Stock Medio\n");

    for (i<arm->quantStock[n]);i++)
    {
        j = i+1;
        for (i=n; i<n;j++)
        {
            if (arm->quantStock[j] < arm->quantStock[i])
            {
                temp = arm->quantStock[i];
                arm->quantStock[i] = arm->quantStock[j];
                arm->quantStock[j] = temp;
            }
            j = j+1;
        }
        i = i+1;
    }

    printf ("\n%d - %s - %lf - %d - %d  - %d", arm->itm[i].tipo, arm->itm[i].referencia, arm->itm[i].preco, arm->quantStock[i], arm->stockMinimo[i], arm->stockMedio[i]);

Sera que me podem safar mais uma vez?

Cumps

Edit: adicionei a linguagem ao GeSHi (pmg)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg
    for (i<arm->quantStock[n]);i++)

Isto nem sequer compila!

Aumenta o nível de warnings do teu compilador e tenta fazer compilações limpas, sem erros (claro!) nem warnings.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

O problema é que eu estou a começar nisto do c, e estas cenas que estão aqui no trabalho dei-as de raspão.

Eu já alterei alguma coisa que tinha metido para testar e não alterei quando cá meti, peço desculpa. Tenho quase a certeza que o erro está ai onde você me falou, no ar->quantStock, mas não sei resolver.

Isto é uma função apenas para ordenar uma serie de vectores (produtos) pelo valor de quantStock (Stock), mas muito sinceramente estou as noras.

void consultarstock1 (Armazem *arm)
{
int i, j, temp;

printf ("\nTipo | Referencia | Preco | Quantidade em Stock | Stock Minimo | Stock Medio\n");

    for (i<(arm->quantStock); i++)
    {
        j = i+1;
        for (i=arm->quantStock; i<arm->quantStock; j++)
        {
            if (arm->quantStock[j] < arm->quantStock[i])
            {
                temp = arm->quantStock[i];
                arm->quantStock[i] = arm->quantStock[j];
                arm->quantStock[j] = temp;
            }
            j = j+1;
        }
        i = i+1;
    }

    printf ("\n%d - %s - %lf - %d - %d  - %d", arm->itm[i].tipo, arm->itm[i].referencia, arm->itm[i].preco, arm->quantStock[i], arm->stockMinimo[i], arm->stockMedio[i]);
    printf ("\n");

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

Se me pudesses ajudar agradecia visto que tenho que entregar o trabalho daqui a um bocado e só me faltam duas funções. Esta que os produtos têm que ficar dispostos de forma decrescente pela quantStock e outra que dispoe de forma crescente outra variavel que e a preco.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

No teu primeiro ciclo for, nem sequer inicializas a variável. Mas nem é por aí, eu nem percebo porque é que queres percorrer o i até à quantidade de stock, não me parece fazer sentido.

Depois no segundo ciclo for, estás a dizer que e é igual à quantidade de stock, e para correr enquanto for menor que a quantidade de stock, ou seja nunca corre (para além de depois isso parecer ser um array e não um valor).

Resumindo, o que é que pretendes mesmo fazer é o que é essa estrutura armazem?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

Muito obrigado pela ajuda antes demais.

Tenho acima este typedef dos produtos que estao no armazém, e depois abaixo um bocado tenho já alguns predefinidos, quase como se tivesse uma mini base de dados no programa.

typedef struct item
{
    int tipo;
    char referencia[15];
    double preco;
} Item;

typedef struct armazem
{
    Item itm[MAXARMAZEM];
    int quantStock[MAXARMAZEM];
    int stockMedio[MAXARMAZEM];
    int stockMinimo[MAXARMAZEM];
    int quant;
} Armazem;

E esta função que coloquei no inicio tem que mostrar todos os produtos que estao no armazem ordenando-os por ordem decrescente de quantidade em stock, em forma de lista. A segunda função tinha que fazer em forma crescente mas em função do preço.

Se me pudessem ajudar agradecia bastante, e que o trabalho vale mais de um terço da nota.

Eu o algoritmo acima, tirei-o de uma sebenta que o tinha em pseudocódigo, e supostamente ficava assim, a nao ser as partes for ("") que não as sei definir.

Muito obrigado mais uma vez, cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Estás a estabelecer uma relação de itm[ x ] para quantStock[ x ]? É que se assim for tens que te lembrar que tens que ordenar também os items e não apenas os valores do stock. Não é exactamente a coisa mais bem feita do mundo...

Tens muitas formas de ordenar o array. Uma delas é parecida com o que parece que estás a tentar fazer. O que tens que fazer é usar um ciclo for para controlar a posição em que já tens tudo ordenado. Usando o ciclo interno para percorrer todas as posições. No final desse ciclo interno vais ter a posição do maior valor excluindo os que já estão organizados e só tens que os trocar:

int max_pos, i, j;

for (i = 0; i < MAX_ITEM; i++) {
    max_pos = i;
    for (j = i+1; j < MAX_ITEM; j++) {
        if (arm->quantStock[max_pos] < arm->quantStock[j])
            max_pos = j;
    }
    
    int quantStockHolder = arm->quantStock[i];
    arm->quantStock[i] = arm->quantStorck[max_pos];
    arm->quantStock[max_pos] = quantStockHolder;
}

Existem técnicas de ordenamento mais eficientes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

Boas de novo,

Obrigadao mesmo

Estou com outro problema, nesse caso o MAX-Item é o que?

È que o compilador estame a dizer que é uma variavel nao declarada.

Cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

Neste caso este printf esta mal, como posso polo a funcionar direito?

printf ("\n%d - %s - %lf - %d - %d  - %d", arm->itm[].tipo, arm->itm[i].referencia, arm->itm[i].preco, arm->quantStock[i], arm->stockMinimo[i], arm->stockMedio[i]);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade