Ir ao conteúdo
  • Cadastre-se

C Sequência ordenada em C


Eduardo_Braz

Posts recomendados

Não estou conseguindo completar a minha ideia é usar vetor só que eu não estou conseguindo concluir o pensamento..

 

Entrada
Para cada sequência numérica há na entrada duas linhas: uma com, apenas um valor inteiro, indica o
número de valores reais que deve ocorrer na próxima linha. A linha seguinte contém tantos valores quanto
indicado na linha anterior. Entre dois valores há apenas um espaço e após o último valor há um caractere
de quebra de linha. A última linha da entrada contém um tamanho de sequência igual a zero e serve apenas
para indicar término do processamento. Não há uma linha com sequência de valores após a ocorrência de
uma linha com valor zero.
 

Saída
Para cada seqüência da entrada o seu programa deve emitir uma das seguintes respostas: ORDENADA,
se a sequência estiver em ordem crescente de valores ou DESORDENADA, em caso contrário. Após cada
palavra impressa deve haver apenas um caractere de quebra de linha.
 

Exemplo

Entrada

10
2.98 16.42 18.0 23.67 31.99 38.50 42.30 61.782000.00 2000.10
5

4.51 4.32 4.90 56.70 150.80
6

0.00 2.56 4.00 80.4 100.98 100.97
0

Saída

ORDENADA
DESORDENADA
DESORDENADA

 

Código

 

 

#include <stdio.h>

 

int main(){

    int t;

    double n;

 

    scanf("%d", t);

 

    while (t--)

    {

        

    }

    

}

Link para o comentário
Compartilhar em outros sites

Olá

 

Não precisa de vetor nem nada. Apenas

  • marque ao iniciar cada linha:
  • Enquanto estiver aumentando o valor lido tudo certo, pode ser que esteja ORDENADA
  • Ao ler um fim de linha então está ORDENADA e tenta ler outra
  • Mas se encontrou na linha um valor menor que o anterior, imprime DESORDENADA e continua lendo e desprezando o que tiver até o fim da linha. E tenta ler outra

 

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

@arfneto Eu faria isso com o For? exemplo eu irei ler a entrada e armazenando em uma varável auxiliar? 

adicionado 25 minutos depois

@arfneto

Só não está funcionando com números que tem casas decimais  

 

#include <stdio.h>

int main(){
    int t, i;
    double n, aux, sequencia,n2;

    scanf("%d", &t);

    for (i = 0; i < t; i++)
    {
        scanf("%lf", &n);
        if(n > n2) {
            sequencia++;
        }
        n2 = n;
    }
    if(n == sequencia){
        printf("ODERNADA");
    }
    else{
        printf("DESORDENADA");
    }
}

Link para o comentário
Compartilhar em outros sites

@arfneto O erro é só com o primeiro mesmo o resto está funcionando perfeitamente

adicionado 0 minutos depois

@arfneto

3 minutos atrás, arfneto disse:

Algo assim 

2

-1234.5678

1234.5678

 

Okay

adicionado 1 minuto depois
4 minutos atrás, arfneto disse:

Algo assim 

2

-1234.5678

1234.5678

 

Essa deu DESORDENADA

Link para o comentário
Compartilhar em outros sites

Escreva uma função pra ler da entrada até achar um \N. Vai precisar dela de todo modo para quando precisar desprezar o resto de uma linha desordenada 

 

Aí você chama essa função após ler o primeiro valor, o número de linhas. 

 

Isso é chato mesmo

 

adicionado 2 minutos depois

Então... Com um valor só está ordenada por definição, certo? 

Sai duas linhas

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

Então... Com um valor só está ordenada por definição, certo? 

Sai duas linhas

 

Sem funções vai ter que repetir o código. Mas é só um loop e só vai usar duas vezes 

 

adicionado 0 minutos depois

Funções são blocos de código que você chama por um nome 

adicionado 2 minutos depois

Pra não ter que escrever toda hora a mesma coisa. 

 

Tipo le_ate_fim_da_linha() :)

Link para o comentário
Compartilhar em outros sites

@arfneto Vou tentar aqui

adicionado 11 minutos depois

@arfneto Assim?

 

 

#include <stdio.h>

int main(){
    int t, i;
    double n, sequencia,n2;
    n2 = 0;
    sequencia = 0;
    
    scanf("%d", &t);

    for (i = 0; i < t; i++)
    {
        scanf("%lf", &n);
        while((n = fgetc(stdin)) != '\n'){
            printf("%lf ", n);        
            if(n > n2 || n < n2){
                sequencia++;
            }
            n2 = n;
        }
    }
    if(n == sequencia){
        printf("\nODERNADA");
    }
    else{
        printf("\nDESORDENADA");
    }
}

Link para o comentário
Compartilhar em outros sites

@arfneto Muito obrigado pela a diga eu não sabia que eu poderia fazer isso

adicionado 2 minutos depois
7 minutos atrás, arfneto disse:

Poder escrever em uma linha só 

 

char c;

 do { c = fgetc(stdin);} while ( c!!='\n') ;

adicionado 0 minutos depois

Ou usar um #define

 

Está tando loop infinito

adicionado 3 minutos depois
3 minutos atrás, Eduardo_Braz disse:

@arfneto Muito obrigado pela a diga eu não sabia que eu poderia fazer isso

adicionado 2 minutos depois

Está tando loop infinito

#include <stdio.h>

int main(){
    int t, i;
    double n, sequencia,n2;
    char c;
    n2 = 0;
    sequencia = 0;
    
    scanf("%d", &t);

    for (i = 0; i < t; i++)
    {
        scanf("%lf", &n);
        do { c = fgetc(stdin);} while ( c!='\n') ;
            printf("%lf ", n);        
            if(n > n2 || n < n2){
                sequencia++;
            }
            n2 = n;
    }
    if(n == sequencia){
        printf("ODERNADA");
    }
    else{
        printf("DESORDENADA");
    }
}

Link para o comentário
Compartilhar em outros sites

Tem um loop pra let cada linha. Vai usar aquilo apenas quando encontrar uma sequência desordenada. Ou seja, dentro do loop que le as linhas tem um loop que processa as linhas lendo até o fim da linha ou até descobrir que está fora de ordem. É nesse caso usa aquele comando pra desprezar o resto da linha

  • Amei 1
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...