[3,0] Criar um programa que leia um vetor com
elementos, identifique e imprima seus elementos positivos;
Passo 1
O enunciado pede: criar um programa que leia um vetor com
elementos, identifique e imprima seus elementos positivos.
Informações importantes que o enunciado fornece (ou que precisamos assumir para implementar):
Informações importantes que o enunciado fornece (ou que precisamos assumir para implementar):
- O tamanho do vetor é
(valor lido na entrada). - O vetor contém
elementos (vamos assumir elementos inteiros para ficar simples; se fossem reais o raciocínio é o mesmo mudando o tipo). - Devemos imprimir apenas os elementos estritamente positivos (ou seja, maiores que
). - Não foi dito o formato exato da saída; adotaremos um formato prático: listar os positivos separados por espaço numa linha ou imprimir uma mensagem se não houver positivos.
Passo 2
Entendendo as informações que vamos usar (explicação didática):
- Vamos guardar os
elementos em um vetor (array). Em programação um vetor é uma sequência de posições, indexadas por um índice . Em C (por exemplo) os índices vão tipicamente de até . Isso significa que o primeiro elemento é e o último é . - Para ler os elementos percorremos o vetor e, para cada posição
, lemos um valor e armazenamos em . - Para identificar os positivos usamos uma condição simples: testar se
. O operador compara dois números; a expressão é verdadeira quando é maior que .
Passo 3
Como estruturar o programa (passos lógicos que você aplica na prova):
- Ler o inteiro
. Verificar que é maior que (caso contrário é inválido ou podemos terminar). - Alocar um vetor com
posições. Cada posição armazenará um inteiro (no nosso caso). - Usar um laço para ler cada elemento
para . - Usar outro laço para percorrer o vetor e, a cada
, testar . Se verdadeiro, imprimir . - Se durante a verificação não encontrarmos nenhum positivo, imprimir uma mensagem tipo “Nenhum elemento positivo.”.
Passo 4
Explicando o laço (for) e a condição (if) de maneira simples e passo a passo:
- O laço for tem essa ideia: repetir uma ação começando com
, enquanto , e em cada passo aumentar em . Em pseudo-estrutura:
Aqui
significa "incrementa
em
".
- A condição para checar positivo é:
Note que usamos
e não
, porque queremos números estritamente maiores que
.
Passo 5
Como imprimir de forma bonita (sugestão prática para prova):
- Podemos imprimir todos os positivos na mesma linha, separados por espaços. Para evitar espaço extra no final, usamos uma variável auxiliar
que indica se já imprimimos algum positivo; se imprimimos o primeiro sem espaço à esquerda, depois para os seguintes imprimimos um espaço antes. - Alternativa: imprimir cada positivo em sua própria linha; isso é ainda mais simples e também aceito em muitos contextos.
Passo 6
Exemplo concreto para fixar (faça mentalmente, como exercício):
Suponha e o vetor lido seja
.
Suponha
- Percorrendo:
(não é ), (não é ), ( → imprimir ), ( → imprimir ), (não). - Saída (na linha): “7 3”
Se nenhum elemento fosse positivo, por exemplo, imprimimos “Nenhum elemento positivo.”.
Passo 7
Complexidade e justificativa rápida (para prova):
- Lemos
elementos (um laço de iterações) e fazemos mais um laço de iterações para verificar positivos. Portanto o algoritmo é linear: tempo proporcional a , ou seja, complexidade . Isso é eficiente e esperado para esse problema.
Passo 8
Tratamento de casos extremos e validações úteis:
- Se
podemos encerrar com uma mensagem de erro ou simplesmente não processar nada. - Se houver restrição de memória para vetores muito grandes, poderia-se processar elemento-a-elemento sem armazenar tudo (ler um valor e já testar se é positivo), economizando memória. Essa variação faz apenas um laço e não usa vetor — útil em prova se pedirem economia de memória.
Passo 9
Últimos detalhes antes do código final — resumo das escolhas que fiz:
- Tipo dos elementos: inteiros.
- Estratégia: ler
, ler vetor, percorrer para imprimir positivos, caso não exista imprimir mensagem. - Impressão: positivos separados por espaço em uma linha, terminando com quebra de linha.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main(void) {
int n;
if (scanf("%d", &n) != 1) return 0;
if (n <= 0) {
printf(“Tamanho invalido.\n”);
return 0;
}
int n;
if (scanf("%d", &n) != 1) return 0;
if (n <= 0) {
printf(“Tamanho invalido.\n”);
return 0;
}
int *a = malloc(n * sizeof(int));
if (!a) return 1;
for (int i = 0; i < n; i++) {
if (scanf("%d", &a[i]) != 1) { free(a); return 0; }
}
int found = 0;
for (int i = 0; i < n; i++) {
if (a[i] > 0) {
if (found) printf(" ");
printf("%d", a[i]);
found = 1;
}
}
if (!found) {
printf("Nenhum elemento positivo.");
}
printf("\n");
free(a);
return 0;
}