Ir ao conteúdo
  • Cadastre-se

ExercÍcio em pascal (ajuda)


sonicboladao

Posts recomendados

Fala ae galera..

Gostaria que alguém me ajudasse com esses exercícios de Algoritmo em Pascal.

1) Fazer um Algoritmo para ordenar uma lista com 5 candidatos a uma eleição de acordo com os votos recebidos, como está no exemplo:

Ricardo - 10 votos

Antonio - 15 votos

Maria - 8 votos

João - 5 votos

Junior - 20 votos

Ficando assim:

Junior - 20 votos

Antonio - 15 votos

Ricardo - 10 votos

Maria - 8 votos

João - 5 votos

2) Fazer um algoritmo para procurar em uma lista de profissões, a profissão referente ao código informado pelo usuário.

Agradeço desde já ! :cool:

Link para o comentário
Compartilhar em outros sites

1) Use uma matriz para guardar os valores do nome do candidato e a qtde de votos. Depois você faz um loop para ir comparando os votos. E saia do loop quando o flag de caso tenha mudado um registro for false

Exemplo:

while (flag)

flag = false;

for(x=0; x<=qtdeCandidatos; x++)

if(candidato[x][votos] < candidato[x+1][votos])

flag == true;

aux = candidato[x];

candidato[x] = candidato[x+1];

candidato[x+1] = aux;

mais ou menos assim.

2) Mesma coisa que o de cima.

Só que bem mais simples pois você não precisa ordenar.

Faça uma matriz com o id e o nome da profissao.

Guarde o ID que o usuário digitou em uma variável e depois procure na matriz via loop o ID que o usuário digitou, caso encontre informe a profissao, caso não encontre mostre que o registro não foi encontrado.

Link para o comentário
Compartilhar em outros sites

Entendi mais ou menos..

Pois a linguagem que uso não sei o que é esse x++ por exemplo..

eu uso o PascalZIM, não por opção própria, mas é o que o professor nos ensinou a usar.

A primeira eu consegui e ficou assim:

Program Ordenacao ;

type tipocand = record
nome: string;
votos: integer;
end;

var
cand: array [1..3] of tipocand;
i,iaux,aux: integer;
aux2: string;


Begin
for i := 1 to 3 do
begin
writeln ('Informe o nome do candidato:');
readln (cand[i].nome);
writeln ('Informe quantos votos ', cand[i].nome, ' recebeu:');
readln (cand[i].votos);

end;
for i := 1 to 3 do
begin
Writeln (cand[i].nome, ' - ', cand[i].votos,' votos');
end;

writeln ('------------- Ordenado -------------');
for iaux := 1 to 3 do
begin
for i := 1 to 3 do
begin

if (cand[iaux].votos > (cand[i].votos)) then
begin
aux := cand[iaux].votos;
cand[iaux].votos := cand[i].votos;
cand[i].votos := aux;
aux2 := cand[iaux].nome;
cand[iaux].nome := cand[i].nome;
cand[i].nome := aux2;

end;
end;
end;

for i := 1 to 3 do
begin
Writeln (cand[i].nome, ' - ', cand[i].votos,' votos');
end;


End.

Link para o comentário
Compartilhar em outros sites

uma dica:

ao invés de:


var
cand: array [1..3] of tipocand;
i,iaux,aux: integer;
aux2: string;

você poderia fazer isso:


var
cand: array [1..3] of tipocand;
i,iaux: integer;
aux:tipocand;

assim na ordenção ficaria:


for iaux := 1 to 3 do
begin
for i := 1 to 3 do
begin

if (cand[iaux].votos > (cand[i].votos)) then
begin
aux := cand[iaux];
cand[iaux] := cand[i];
cand[i]:= aux;
end;
end;
end;

nesse caso não reduziria muito o código, mas no caso de programas com registros maiores irá te poupar muito trabalho

Link para o comentário
Compartilhar em outros sites

Vou fazer uma sugestão para otimizar a execução do código:


for iaux := 1 to 4 do
begin
for i := iaux + 1 to 5 do
begin
if (cand[iaux].votos > (cand[i].votos)) then
begin
aux := cand[iaux];
cand[iaux] := cand[i];
cand[i]:= aux;
end;
end;
end;

Observações:

- como são 5 candidatos considerei um array [1..5]

- quando no for externo o iaux = 1, o i no for interno vai de 2 (iaux + 1) a 5, já que não é

preciso comparar o candidato da primeira ocorrência com ele mesmo;

- quando no for externo o iaux = 2, o i no for interno vai de 3 (iaux + 1) a 5, já que após o

primeiro "loop" do for externo a primeira ocorrência com certeza possui o candidato

mais votado. O mesmo raciocínio é utilizado nas ocorrências seguintes;

- o iaux no for externo vai até 4, já que não é preciso comparar o candidato da ocorrência 5

com ele mesmo;

- não fiz um teste de execução da rotina, mas acredito que está certa.

Espero ter conseguido passar a ideia.

Link para o comentário
Compartilhar em outros sites

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