Array
(
)

Converter um tipo derivado em string

Eduardo
   - 20 mar 2017

Olá, sou novo em programação e tenho uma dúvida, estou resolvendo um exercício que é criar um programa que efetue o gerenciamento de dados de dez registros de uma agenda que contenha nome, endereço e telefone, criar um menu para cadastrar os dez registros, pesquisar um registro, classificar por ordem de nome os dez registros, apresentar todos os registros e sair do programa, enfim minha dúvida é no momento de classificar por ordem de nome, fiz o algoritmo da troca para ordenar os dados porém o delphi me retornou o erro [dcc32 Error] Exercicio_01.dpr(111): E2010 Incompatible types: 'string' and 'Cad_registros' segue o código o erro está justamente na linha em que x := Agenda[i] não sei como converte tipo derivado em string e se esse é o caminho correto, alguém pode me ajudar rsrs ...
#Código
//Trecho com problema
if (opcao = 3) then
begin
for I := 1 to 2 do
begin
for J := I + 1 to 3 do
begin
if (Agenda[i].Nome > Agenda[j].Nome) then
begin
x := Agenda[i];
Agenda[i] := Agenda[j];
Agenda[j] := x;
end;
end;
end;
end;

#Código
//Trecho completo
program Exercicio_01;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
{$REGION ' Registro '}
type
Cad_registros = record
Nome : string;
Endereco : string;
Telefone : string;
end;
{$ENDREGION}
{$REGION ' Variaveis '}
var
Agenda : array[1..3] of Cad_registros;
var
I, J, Opcao : Integer;
var
Pesq, X : string;
var
Acha : Boolean;
{$ENDREGION}
begin
Opcao := 0;
while (Opcao <> 5) do
begin
Writeln('**************************');
Writeln(' Menu de opcoes da agenda ');
Writeln('**************************');
Writeln(Output,'1 - Cadastrar');
Writeln(Output,'2 - Pesquisar');
Writeln(Output,'3 - Classificar');
Writeln(Output,'4 - Apresentar');
Writeln(Output,'5 - Fim');
Writeln('');
Readln(Input,Opcao);
if (Opcao = 1) then
begin
Writeln('');
Writeln('Voce escolheu a '+IntToStr(Opcao)+'a. opcao, Cadastrar dados! ');
for I := 1 to 3 do
begin
Writeln('');
Writeln(IntToStr(i)+'o. registro da agenda.');
Write(Output,'Nome......: ');
Readln(Input,Agenda[i].Nome);
Write(Output,'endereco..: ');
Readln(Input,Agenda[i].Endereco);
Write(Output,'Telefone..: ');
Readln(Input,Agenda[i].Telefone);
Writeln('');
end;
Writeln(' --- Fim do cadastro --- ');
Writeln('');
Writeln('Escolha a proxima opcao ou - 5 para terminar!');
Writeln('');
end;
if (opcao = 2) then
begin
Writeln('');
Writeln('Voce escolheu a '+IntToStr(Opcao)+'a. opcao, Pesquisar dados! ');
Writeln('');
Writeln('Digite o nome a ser pesquisado: ');
Readln(Pesq);
Writeln('');
I := 1;
Acha := False;
while (i <= 3) and (Acha = False) do
begin
if (Pesq = Agenda[i].Nome) then
begin
Acha := True;
end
else
begin
Inc(i);
end;
end;
if (Acha = True) then
begin
Writeln('Nome......: ',Agenda[i].Nome);
Writeln('Endereco..: ',Agenda[i].Endereco);
Writeln('Telefone..: ',Agenda[i].Telefone);
Writeln('');
end
else
begin
Writeln('Registro inconsistente!');
Writeln('');
end;
end;
if (opcao = 3) then
begin
for I := 1 to 2 do
begin
for J := I + 1 to 3 do
begin
if (Agenda[i].Nome > Agenda[j].Nome) then
begin
x := Agenda[i];
Agenda[i] := Agenda[j];
Agenda[j] := x;
end;
end;
end;
end;
if (Opcao = 4) then
begin
for I := 1 to 3 do
begin
Writeln('Nome......: ',Agenda[i].Nome);
Writeln('Endereco..: ',Agenda[i].Endereco);
Writeln('Telefone..: ',Agenda[i].Telefone);
Writeln('');
end;
end;
end;
end.

Eduardo
   - 20 mar 2017

Encontrei a solução o erro era que eu não estava passando a variavel X como array do mesmo tipo da variavel Agenda que é derivado postei aqui caso alguém tenha o mesmo problema.

#Código
if (opcao = 3) then
begin
for I := 1 to 2 do
begin
for J := I + 1 to 3 do
begin
if (Agenda[i].Nome) > (Agenda[j].Nome) then
begin
x[i] := Agenda[i];
Agenda[i] := Agenda[j];
Agenda[j] := x[i];
end;
end;
end;
end;