Ir ao conteúdo

Inverter ordem dos elementos de um vetor via procedimento


Visitante: na.vicente

Posts recomendados

Visitante: na.vicente
 
Postado

Alguém pode me dar uma luz de como fazer isso:

Escreva um procedimento que receba como parâmetro:

um vetor de inteiros, por referência.

um inteiro, por valor.

O procedimento deve inverter a ordem dos elementos do vetor.(O primeiro elemento passa a ser o ultimo, o ultimo passa a ser o primeiro, o segundo passa a ser o penultimo e o penultimo o segundo...)

Já pensei e pensei,mas nem sei com começar. Alguém pode me ajudar?

Postado

Natália, seja bem-vinda! :D

Alguém pode me dar uma luz de como fazer isso:

Escreva um procedimento que receba como parâmetro:

um vetor de inteiros, por referência.

um inteiro, por valor.

O procedimento deve inverter a ordem dos elementos do vetor.(O primeiro elemento passa a ser o ultimo, o ultimo passa a ser o primeiro, o segundo passa a ser o penultimo e o penultimo o segundo...)

Já pensei e pensei,mas nem sei com começar. Alguém pode me ajudar?

Bom, como não sabe nem por onde começar, talvez um bom começo seria escrevendo o esqueleto do programa. Você não explicitou direito a sua dúvida, então penso que tenha dificuldades na sintaxe:

program foo;

uses
CRT;

type
TVet = array[1..10] of integer;

procedure inv_ordem(var vet: TVet; val: integer);
begin

end;

var
arr: TVet;
tam: integer;

begin

inv_ordem(arr, tam);

end.

Basta implementar a manipulação dos elementos do vetor com um laço de repetição; pode ser com um laço for.

Não ficou muito claro a utilidade do valor inteiro a ser passado para o procedimento; talvez para passar o tamanho do vetor...

Uma ferramenta que auxilia bastante na resolução de problemas assim é o teste de mesa. Use lápis e papel para tentar resolver.

[]'s

LNW

Visitante: na.vicente
 
Postado
Natália, seja bem-vinda! :D

Bom, como não sabe nem por onde começar, talvez um bom começo seria escrevendo o esqueleto do programa. Você não explicitou direito a sua dúvida, então penso que tenha dificuldades na sintaxe:

program foo;

uses
CRT;

type
TVet = array[1..10] of integer;

procedure inv_ordem(var vet: TVet; val: integer);
begin

end;

var
arr: TVet;
tam: integer;

begin

inv_ordem(arr, tam);

end.

Basta implementar a manipulação dos elementos do vetor com um laço de repetição; pode ser com um laço for.

Não ficou muito claro a utilidade do valor inteiro a ser passado para o procedimento; talvez para passar o tamanho do vetor...

Uma ferramenta que auxilia bastante na resolução de problemas assim é o teste de mesa. Use lápis e papel para tentar resolver.

[]'s

LNW

O esqueleto eu até entendi, o que eu não sei é como fazer essa inversão, porque ele tem n valores. Eu fiz assim,até compilou só que dá erro na hora da execução.



program inverter;
var
vetor,temp:string;
v:array of integer;
n,cont,temp2,erro:integer;
r:array of integer;
procedure inverte(var a:array of integer; i:integer);
begin
for cont:=1 to i do
begin
if (cont=1) then
begin
a[1]:=r[i];
a[i]:=r[1];
end
else
begin
a[cont]:=r[i-cont+1];
end;
end;
end;
begin
writeln('Digite quantos elementos esse vetor possui: ');
read(n);
writeln('Digite os numeros desse vetor em apenas uma linha: ');
read(vetor);
for cont:=1 to n do
begin
temp:=vetor[cont];
val(temp,temp2,erro);
v[cont]:=temp2;
inverte(v,n);
writeln('A inversao desse vetor dá o vetor: ');
writeln(r[n]);
end;
end.

Você sabe me informar qual é o erro? Obrigada pela ajuda!! :)

Postado

Natália,

Você precisa declarar o vetor corretamente e deixá-lo pronto para receber os valores. Como estaremos trabalhando com vetores com tamanho fixo, vai ser importante estabelecer um limite de elementos a serem inseridos.

Também, não é interessante a forma como você usou para obter os valores a serem inseridos no vetor; por meio de uma string. Um simples laço até o tamanho desejado resolve o problema. Dê uma conferida no código abaixo. Falta apenas implementar a troca dos elementos do vetor dentro do procedimento inv_ordem().

Vou deixá-la pensar um pouquinho mais. ;)

program foo;

uses
CRT;

type
TVet = array[1..100] of integer;

procedure inv_ordem(var vet: TVet; i: integer);
begin

end;

var
arr: TVet;
i, tam: integer;


begin
clrscr;
Write('Informe a quantidade de elementos a inserir no vetor: ');
readln(tam);

writeln;
while not ((tam >= 1) and (tam <= 100)) do
begin
Write('O tamanho deve ser entre 1 e 100! Digite novamente: ');
readln(tam);
end;

for i := 1 to tam do
begin
Write('Entre com o elemento [', i, '] = ');
readln(arr[i]);
end;

inv_ordem(arr, tam);

writeln;
writeln('Conteudo do vetor:');
{ Imprime o conteudo do vetor }
for i := 1 to tam do
writeln(arr[i]);

end.

[]'s

LNW

Visitante: na.vicente
 
Postado

Cara, eu vou tentar fazer, mas antes eu tenho que fazer uma calculadora.

Sobre o código da inversão:do jeito que eu fiz tá errado?

Obrigada pela ajuda :D

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