Ir ao conteúdo

ajuda com vetores


Big Mike

Posts recomendados

Postado

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

Postado

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]

Postado

desculpa amigo, mas eu não entendi como você fez. Tentei seguir os passos do português estruturado mas não deu certo... mas valeu pela ajuda, tenho que tentar ajuda do monitor da matéria...

Postado

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

Postado

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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!