Jump to content

Arrays e troca de valores


ritynha
Go to solution Solved by ritynha,

Recommended Posts

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

Link to comment
Share on other 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.
Link to comment
Share on other 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

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other 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

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

  • Solution

CONCEGUI!!!!!!!!! 😕🙂😄👍😛

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.