Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление порядка вывода списка в Паскале

Delphi , Базы данных , Сортировка и Фильтр

Статья: ""

В данной статье мы рассмотрим проблему, связанную с выводом списка в обратном порядке при использовании языка программирования Pascal. Мы покажем, как исправить этот порядок и вывести список в правильном, возрастающем порядке.

Проблема

Рассмотрим следующий код на Паскале, который создает список целых чисел и вставляет их в список в порядке возрастания:

program ejListas;

type
    Tlista = ^lista;
    lista = record
        valor: Integer;
        sgte: Tlista;
    end;

procedure insertarOrdenado(var lista: Tlista; dato: Integer);
var
    cursor, listaAux: Tlista;
begin
    if (lista <> nil) then
    begin
        new(listaAux);
        listaAux^.valor := dato;

        cursor := lista;
        while (cursor^.sgte <> nil) and (cursor^.valor < dato) do
            cursor := cursor^.sgte;

        listaAux^.sgte := cursor^.sgte;
        cursor^.sgte := listaAux;
    end
    else
    begin
        new(lista);
        lista^.valor := dato;
        lista^.sgte := nil;
    end;
end;

procedure imprimirLista(lista: Tlista);
var
    cursor: Tlista;
begin
    cursor := lista;
    while (cursor <> nil) do
    begin
        writeln(cursor^.valor);
        cursor := cursor^.sgte;
    end;
end;

var
    vLista: Tlista;
    dato: Integer;

begin
    readln(dato);
    while (dato <> -1) do
    begin
        insertarOrdenado(vLista, dato);
        readln(dato);
    end;
    imprimirLista(vLista);
end.

При запуске этой программы мы ожидаем, что список будет выведен в возрастающем порядке. Однако, мы получаем список в обратном порядке:

1 - 5 - 58 - 95 - 3 - 0

Ожидаемый результат был следующим:

0 - 1 - 3 - 5 - 58 - 95

Но на самом деле, программа выводит список в таком порядке:

1 - 0 - 5 - 3 - 58 - 95

Проблема заключается в том, что при вставке нового элемента в список, мы ищем место для вставки после текущего элемента, а не перед ним. В результате, последний вставленный элемент оказывается первым в списке, и список выводится в обратном порядке.

Решение

Чтобы исправить порядок вывода списка, нам нужно изменить процедуру insertarOrdenado так, чтобы новые элементы вставлялись перед текущим элементом, а не после него. Вот исправленный код:

procedure insertarOrdenado(var lista: Tlista; dato: Integer);
var
    cursor, listaAux: Tlista;
begin
    if (lista <> nil) then
    begin
        new(listaAux);
        listaAux^.valor := dato;

        cursor := lista;
        while (cursor^.sgte <> nil) and (cursor^.sgte^.valor < dato) do
            cursor := cursor^.sgte;

        if (cursor^.valor > dato) then
        begin
            listaAux^.sgte := cursor;
            lista := listaAux;
        end
        else
        begin
            listaAux^.sgte := cursor^.sgte;
            cursor^.sgte := listaAux;
        end;
    end
    else
    begin
        new(lista);
        lista^.valor := dato;
        lista^.sgte := nil;
    end;
end;

Теперь, при вставке нового элемента, мы ищем место для вставки перед текущим элементом, а не после него. В результате, список выводится в правильном, возрастающем порядке.

Заключение

В данной статье мы рассмотрели проблему вывода списка в обратном порядке в Паскале и предложили решение, которое исправляет порядок вывода списка. Мы показали, как изменить процедуру insertarOrdenado, чтобы новые элементы вставлялись перед текущим элементом, а не после него. Таким образом, список выводится в правильном, возрастающем порядке.

Создано по материалам из источника по ссылке.

В данной статье рассматривается проблема вывода списка в обратном порядке при использовании языка программирования Pascal и предлагается решение, исправляющее порядок вывода списка.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сортировка и Фильтр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:01:47/0.0031290054321289/0