• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ritynha

[Resolvido] Arrays e troca de valores

11 mensagens neste tópico

ola a todos!

eu tenho um exercicio para fazer: "Crie um procedimento que troque os valores de duas posições de um array X;"

eu tenho este codigo:

program kalkerkoisa;
uses wincrt;

var x:array[1..5] of integer;
   c,v1,v2,p1,p2:integer;

procedure troca(p1,p2:integer);
var i,tmp,tmp2,tmp3:integer;

Begin
     for i:=1 to 5 do
     begin
          if(v1=x[i]) then
          begin
               tmp:=v1;
          end;
          if(v2=x[i]) then
          begin
                 tmp2:=v2;
          end;

          if((v1=tmp) and (v2=tmp2))then
          begin
               tmp3:=v1;
               v1:=v2;
               v2:=tmp3;
          end;      

    writeln(x[i]);
    end;
End;
//programa principal
Begin
    for c:=1 to 5 do
        begin
        writeln('escreva os valores para o array');
        readln(x[c]);
        end;       
        
    writeln('de 1 a 5 escolha um indici');
    readln(v1, v2);
//chamar o procedimento
    troca(p1,p2);   
End.

e depois de varias tentativas esta coisa nao funciona, podem ajudar-me =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

secalhar é mais facil para voces preceberem, eu so quero trocar duas possiçoes de um array.

se fosse normal criava uma variavel sem nada e prontos mas com o array eu n sei como se faz. ajudem-me =/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para trocar as posições i,j, eu esperaria que fosse algo como

tmp:=arr[i];
arr[i]:=arr[j];
arr[j]:=tmp;

Nunca programei em Pascal, mas parece-me que tens aí alguma confusão com as variáveis.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

brigada, tambem ja tinha feito dessa forma e tbm nao muda os locais do array,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A questão é em que parte do código é que estava o problema.

Parece-me que o código que tens está a complicar algo que devia ser simples.

Como já disse, não percebo nada de Pascal, mas tendo por base o teu código, penso que devia ficar com algo parecido com isto:

program kalkerkoisa;
uses wincrt;

var x:array[1..5] of integer;
   c,v1,v2:integer;

procedure troca(p1,p2:integer);
var tmp:integer;
begin
  tmp=x[p1];
  x[p1]=x[p2];
  x[p2]=tmp;
end;

//programa principal
begin
  for c:=1 to 5 do
  begin
    writeln('escreva os valores para o array');
    readln(x[c]);
  end;       
        
  writeln('de 1 a 5 escolha um indici');
  readln(v1, v2);
//chamar o procedimento
  troca(v1,v2);
end.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim é muito mais simples, eu ja exprimentei tantas formas que ja tou toda barralhada  :down: todas dão resultados, menos o resultado que pertendo lool

para quem nao sabe nada de pascal, ta muito bem feito (logica eu sei).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

    O que perdentes é mudar os valores de posição no vector certo? Na ordem de alteração queres que o utilizador insira a posição onde se encontram os valores que quer "trocar" ou os valores e ele procure a posição ?

    Para trocar valores de posição ele tem de percorer o vector celula a celula, e pode ter de o percorrer duas vezes (eventualmente). Penso que esteja aí a dificuldade. Pelo menos pelo que li no codigo. Ele compilar compila em free pascal, mas não muda realmente as posições. Assim que expliques ao certo será mais facil colocar o codigo aqui.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim acho que é isso, temos um array e com os dois indices 2 e 5 (por exemplo) no indice 2 vai ficar a celula do indice 5.

e no indice 5 vai ficar a celula do indice 2.

nao sei se tou a ser muito explicita ou a confundir mais  :(

(detesto pascal rrr)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

    Ok agora percebi. O codigo é que estava um pouco confuso. Parte da solução está no teu codigo, só te falta a colocação dos novos valores no vector.

    Repara, corres o vector, lês os dados que são para ser trocados e passas os valores para variaveis temporarias, e sais. Devias correr novamente o vector, de 1 a 5 escrever o 1º indice no seu novo local, e o 2º indice no seu novo local, e depois sair.

Na pratica falta-te um ciclo (for i:=1 to 5 do) em que vais colocar os valores novos nas devidas celulas.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

CONCEGUI!!!!!!!!! :confused::):D:thumbsup::P

fiz  o codigo todo do inicio e bem deu certo^^^^^^^^^^^^

program kalkerkoisa;
uses wincrt;

var x:array[1..5] of integer;
     c:integer;

procedure troca;
var tmp,c1,c2,c:integer;

Begin
    writeln('de 1 a 5 escolha dois indices');
    readln(c1, c2);

     tmp:=x[c1];
     x[c1]:=x[c2];
     x[c2]:=tmp;  
     for c:=1 to 5 do 
         begin 
              writeln('as celulas foram trocadas ',x[c]); 
         end;
End;
Begin
    for c:=1 to 5 do
    begin
        writeln('escreva os valores para o array');
        readln(x[c]);
    end; 
     
   troca;
    
End.

Obrigada pela ajuda =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora