Ir ao conteúdo
  • Cadastre-se

ajuda com vetores


Big Mike

Posts recomendados

Bom dia, estou tentando fazer um programa. A ideia é assim...

Faça um programa que recebe números inteiros. O programa deve parar de ler números quando o usuário digitar um numero negativo ou quando o número de valores lidos chegar a um número máximo N. O programa deve procurar pela maior sequência não-decrescente dentre os numeros, imprimindo na tela a sequência e o seu tamanho. Se houver mais de uma sequência de tamanho máximo, o programa deve imprimir a primeira sequência encontrada.

Exemplo:

Entrada:

9 2 5 3 4 3 0 98 7 7 18 39 92 101 294 650 1000 33 121 748 919 103 -2

Saída:

7 7 18 39 92 101 294 650 1000

Tamanho: 9

eu pensei em fazer assim, mas tem tantos erros, que não sei mais o q tá certo e o que está errado....

se alguém puder ajudar, agradeço muito...

segui o código que estou trabalhnado


#include <stdio.h>
#include <string.h>

#define N 1000

int main (){
int i, vet[N], cont;

printf ("Digite os valores:\n");
scanf ("%d", &vet[i]);

while ((vet[i]>=0) || (vet[i]<N) ){

if (vet[i] < vet[i+i]){
cont++;
for (i=0; i<cont; i++){
printf ("%d ", vet[i]);
printf ("%d", cont);
}
}
scanf ("%d", &vet[i]);
}
return (0);
}

Link para o comentário
Compartilhar em outros sites

Seu código realmente tem muitos erros.

1. você não inicializa a variável i (int i = 0).

2. o trecho (vet[ i ]<N)está errado... deveria ser i<N.

3. na condição do mesmo while, onde você usou ||, deveria ser &&, já que é pra repetir apenas se vet[ i ]>=0 E i<N.

4. em if (vet[ i ] < vet[i+i]), o índice i+1 não existe, já que você leu apenas até o índice i.

5. em for (i=0; i<cont; i++){ você destrói o valor do i... o contador já é o próprio i, não há a necessidade de criar outro contador pro while; simplesmente crie um pro for: for(j=0; j<=i; j++) (ou <i, dependendo do que você estiver fazendo).

6. e mais importante: a lógica do seu algoritmo está errada. A solução é simples:

N <- 1000
v <- vetor[N]
t <- vetor[N]

## tamanho(v) informa a quantidade de elementos que já inserimos em v, e não o tamanho máximo (que é N)
enquanto tamanho(v) < N
x <- ler_inteiro()
se x < 0
N <- tamanho(v)
quebrar_loop()
t[tamanho(v)] = 1
se tamanho(v) > 0 e v[tamanho(v)-1] <= x
t[tamanho(v)] <- t[tamanho(v)-1] + 1
v[tamanho(v)] <- x ## insere x no final do vetor

Depois, basta percorrer o vetor t em busca da maior sequência (ou você pode simplesmente inserir esse if no código acima, e evitar outro loop):

maior <- 0
para i <- 1 até N
se t[i] > t[maior]
maior <- i

Assim, t[maior] armazenará o tamanho da maior sequência e maior o índice do último elemento dessa sequência (o que significa que o primeiro é maior-t[maior]+1). Para percorrer essa sequência:

para i <- (maior-t[maior]+1) até (maior+1)
imprime v[i] + " "
imprime "Tamanho: " + t[maior]

Link para o comentário
Compartilhar em outros sites

A ideia do colega RafaelCLP é marcar o ponto de início, iniciando pelo primeiro elemento do vetor e ir percorrendo, sempre que achar um número menor que o anterior, marcar a quantidade de números lidos e suas posições. Se essa quantidade for maior que a lida anteriormente, troque as referências para a nova posição.

No final, você terá a referencia inicial e final no vetor, indicando o trecho para a sequência crescente (não-decrescente).

Link para o comentário
Compartilhar em outros sites

consegui resolver...

segue o código, se alguém quiser tentar fazer...


#include <stdio.h>

#define N 100

int main() {

int num, seq[N], qtd=0, ini_seq=0, fim_seq=0, tam_seq=0, i=1, cont=0, ini=0;

scanf("%d", &num);

while (num >= 0) {
seq[qtd++] = num;
scanf("%d", &num);
}

while (i < qtd) {
if (seq[i] < seq[i-1]) {
if (cont > tam_seq) {
tam_seq = cont;
ini_seq = ini;
fim_seq = i;
}
cont = 0;
ini = i;
}
i++;
cont++;
}
if (cont > tam_seq) {
tam_seq = cont;
ini_seq = ini;
fim_seq = i-1;
}

printf("\nSaída:\n");
for (i=ini_seq; i<=fim_seq; i++)
print("\t%d", seq[i]);
printf("\nTamanho: %d\n", tam_seq);
return 0;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!