IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Переписать программу из Pascal в C., Работа со двусвязным списком.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Aleksandra

Репутация: -  0  +


Условие: Создать упорядоченный двусвязный список (элементы идут в порядке возрастания). Добавить элемент в список.
Программа в Pascal :
Код

program dvipsarasas;
uses crt;
type sar=^el;
el=record
    duom:integer;
    kitas:sar;
    atgal:sar;
        end;

    procedure sukurti_sar (var pradzia:sar);
    var x:integer;
    g,temp:sar;
    begin
        writeln('Ivesk sveikus skaicius. Pabaigai spausk 0');
        readln(x);
        while x<>0 do
        begin
            if pradzia=nil then
                begin
                    new(g);
                    g^.duom:=x;
                    g^.kitas:=nil;
                    g^.atgal:=nil;
                    pradzia:=g;
                end
            else begin
            new(temp);
            g^.kitas:=temp;
            temp^.atgal:=g;
            g:=temp;
            g^.duom:=x;
            end;
            readln(x);
        end;
            writeln('Sarasas sukurtas');
    end;


    procedure iterpti_pr(var pradzia:sar; x:integer);
    var elem:sar;
    begin
        new(elem);
        elem^.duom:=x;
        elem^.kitas:=pradzia;
        pradzia^.atgal:=elem;
        elem^.atgal:=nil;
        pradzia:=elem;
    end;

    procedure iterpti_pb(pradzia:sar; duomenys:integer);
    var elem:sar;
    begin
       elem:=pradzia;
       while(elem^.kitas<>nil)do
       elem:=elem^.kitas;
       new(elem^.kitas);
       elem^.kitas^.atgal:=elem;
       elem:=elem^.kitas;
       elem^.duom:=duomenys;
       elem^.kitas:=nil;
    end;

      procedure iterpti_viduje(pradzia:sar; duomenys:integer);
        var el,elk:sar;
        begin
        el:=pradzia;
        elk:=el^.kitas;
        new(el^.kitas);
        el^.kitas^.atgal:=el;
        elk^.atgal:=el^.kitas;
        el:=el^.kitas;
        el^.kitas:=elk;
        el^.duom:=duomenys;
        end;

    procedure naikinti_sar(var pradzia:sar);
    var s:sar;
    begin
     while(pradzia<>nil)do
     begin
     s:=pradzia;
     pradzia:=pradzia^.kitas;
     dispose(s);
     end;
    end;

    procedure spausdinti_sar(pradzia:sar);
    begin
    writeln('Spausdiname: ');
        while pradzia<>nil do
        begin
            write(pradzia^.duom,' ');
            pradzia:=pradzia^.kitas;
        end;
        writeln();
    end;

procedure rusiuoti (var pradzia:sar);
var s1,s2:sar;
    nesurusiuotas:boolean;
  begin
     nesurusiuotas:=true;
     while((nesurusiuotas)and(pradzia<>nil))do
       begin
          s1:=pradzia;
          s2:=s1^.kitas;
        nesurusiuotas:=false;
        while(s2<>nil)do
         begin
    
           if(s1^.duom>s2^.duom)
           then
             begin
               s1^.kitas:=s1^.kitas^.kitas;
               if(s1^.kitas<>nil)then
               s1^.kitas^.atgal:=s1;
               s2^.kitas:=s1;
               s2^.atgal:=s1^.atgal;
               if(s2^.atgal<>nil)then
               s2^.atgal^.kitas:=s2;
               s1^.atgal:=s2;
             nesurusiuotas:=true;
                s2:=s1^.kitas;
             end
             else
             begin
             s1:=s1^.kitas;
             s2:=s2^.kitas;
             end;
    
     end;
      while(s1^.atgal<>nil)do
         begin
         s1:=s1^.atgal;
         pradzia:=s1;
         end;
     end;
  end;




    
var sarasas:sar;
selection:integer;
duom:integer;
    begin
        sukurti_sar(sarasas);
        writeln('1)Iterpti elementa saraso pradzioj');
        writeln('2)Iterpti elementa saraso viduje');
        writeln('3))Iterpti elementa saraso pabaigoj');
        writeln;
        write('Kur iterpti elementa? - ');
        readln(selection);
        writeln;
        case selection of
        1: begin
        writeln('iveskite reiksme, kuria norite iterpti');
        readln(duom);
        iterpti_pr(sarasas,duom);
        end;
        2:begin
        writeln('iveskite reiksme, kuria norite iterpti');
        readln(duom);
        iterpti_viduje(sarasas,duom);
        end;
        3:begin
        writeln('iveskite reiksme, kuria norite iterpti');
        readln(duom);
        iterpti_pb(sarasas,duom);
        end;
        end;
        rusiuoti(sarasas);
        spausdinti_sar(sarasas);
        naikinti_sar(sarasas);
    end.


Вообщем, Си я не понимаю, это всё, что я смогла сделать (ниже). Может кто может помочь?
Код

   #include <stdio.h>
#include <stdlib.h>

typedef struct el  {
int duom;
struct el *kitas, *atgal;
} el;

void sukurti_sar (struct el **pr, struct el **pb)
{  struct el *g, *temp;
int x;
printf ("Ivesk sveikus skaicius. Pabaigai spausk 0");
*pr = NULL;
*pb = NULL;
scanf ("%d", &x);
while (x!=0)
{
    if (pr==NULL)
        {
        g = (struct el*) malloc(sizeof(struct el));
        g->duom = x;
        g->kitas = NULL;
        g->atgal = NULL;
        *pr = g;
        }
    else
        {
        temp = (struct el *) malloc(sizeof(struct el));
        g->kitas = temp;
        temp->atgal=g;
        g = temp;
        g->duom = x;
        }
    scanf("%d", x);
}
printf("Sarasas sukurtas");
}

void iterpti_pr (struct el *pr, int x )
{
struct el *elem;
elem = (struct el *) malloc(sizeof(struct el));
elem->duom = x;
elem->kitas = pr;
pr->atgal = elem;
elem->atgal = NULL;
pr = elem;
}

void iterpti_pb (struct el *pr; int *duomenys)
{ struct el *elem;
elem = pr;
while (elem->kitas != NULL)
    { elem = elem->kitas;
    elem->kitas = (struct el *) malloc(sizeof(struct el));
    elem->kitas->atgal = elem;
    elem = elem->kitas;
    elem->duom = duomenys;
    elem->kitas = NULL;
    }

void iterpti_viduje (struct el *pr; int duomenys)
{ stuct el *elem, *elemk;
elem = pr;
elemk = elem->kitas;
elem->kitas = (struct el *) malloc(sizeof(struct el));
elem->kitas->atgal = elem;
elemk->atgal = elem->kitas;
elem = elem->kitas;
elem->kitas = elemk;
elem->duom = duomenys;
}

void naikinti_sar (struct el **pr)
{ struct el *s;
while (*pr !=NULL)
    { s = pr;
    pr = pr->kitas;
    free(s);
    }
}

void spausdinti_sar (struct el *el)
{
  printf("Spausdiname: ");
while (pr != NULL)
    {
    printf (pr->duom, " ");
    pr = pr->kitas;
    }
scanf();
}

void rusiuoti (struct el **pr)
{
struct el *s1, *s2;
nesurusiuotas == 0;
{
nesurusiuotas == 1;
while ((nesurusiuotas)and(pr !=NULL))
    {
    s1 = pr;
    s2 = s1->kitas;
    nesurusiuotas == 0;
    while (s2 != NULL)
        {
            if(s1->duom > s2->duom)
                {
                s1->kitas = s1->kitas->kitas;
                if(s1->kitas !=NULL)
                s1->kitas->atgal = s1;
                s2->kitas = s1;
                s2->atgal = s1->atgal;
                if(s2->atgal !=NULL)
                s2->atgal->kitas = s2;
                s1->atgal = s2;
                nesurusiuotas == 1;
                s2 = s1->kitas;
                }
            else
                {
                s1 = s1->kitas;
                s2 = s2->kitas;
                }
        }
    while (s1->atgal != NULL)
    { s1 = s1->atgal;
    pr = s1;
    }
}
}

void showmenu() {
    puts("1) Iterpti elementa saraso pradzioj\n");
   puts("2) Iterpti elementa saraso viduje\n");
   puts("3) Iterpti elementa saraso pabaigoj\n");
   puts("Kur iterpti elementa? - ");
       }

      int main()
{
struct el *pr, *pb;
int *x, *duomenys;
int selection;

do {
sukurti_sar ( &pr );
showmenu();
scanf("%d", &selection);
puts("\n");

switch(selection) {
    case 1: iterpti_pr ( &pr, &x );
           break;
   case 2: iterpti_viduje ( &pr, &duomenys);
               break;
    case 3: iterpti_pb (&pr, &duomenys);
           break;
   }
   } while (selection != 3);
       return 0;
   rusiuoti (&pr );
spausdinti_sar ( pr );
naikinti_sar ( &pr );
return 0;
}


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






А я язык, на котором это все написано - не понимаю... И разбираться, что такое kitas, а что такое atgal - не имею ни малейшего желания... Ясно, что это ссылка, а вот куда?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Aleksandra

Репутация: -  0  +


Цитата(volvo @ 15.04.2007 17:23) *

А я язык, на котором это все написано - не понимаю... И разбираться, что такое kitas, а что такое atgal - не имею ни малейшего желания... Ясно, что это ссылка, а вот куда?



kitas - указатель на следующий элемент, atgal - на предыдущий !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Aleksandra

Репутация: -  0  +


Код

program dvipLIST;
uses crt;
type sar=^el;
el=record
    data:integer;
    next:sar;
    back:sar;
        end;

    procedure makeNew (var first:sar);
    var x:integer;
g,temp:sar;
    begin
        writeln('Insert integer numbner. To finish press 0');
        readln(x);
        while x<>0 do
        begin
            if first=nil then
                begin
                    new(g);
                    g^.data:=x;
                    g^.next:=nil;
                    g^.back:=nil;
                    first:=g;
    end
            else begin
            new(temp);
            g^.next:=temp;
            temp^.back:=g;
            g:=temp;
            g^.data:=x;
            end;
            readln(x);
        end;
            writeln('LIST is done');
    end;


    procedure addbefore(var first:sar; x:integer);
    var elem:sar;
    begin
        new(elem);
        elem^.data:=x;
        elem^.next:=first;
        first^.back:=elem;
        elem^.back:=nil;
  first:=elem;
    end;

    procedure addlast(first:sar; data1:integer);
    var elem:sar;
    begin
       elem:=first;
    while(elem^.next<>nil)do
    elem:=elem^.next;
    new(elem^.next);
       elem^.next^.back:=elem;
       elem:=elem^.next;
    elem^.data:=data1;
       elem^.next:=nil;
    end;

      procedure addtocenter(first:sar; data1:integer);
        var el,elk:sar;
        begin
        el:=first;
  elk:=el^.next;
  new(el^.next);
  el^.next^.back:=el;
        elk^.back:=el^.next;
        el:=el^.next;
  el^.next:=elk;
  el^.data:=data1;
  end;

    procedure delete(var first:sar);
    var s:sar;
    begin
     while(first<>nil)do
  begin
  s:=first;
  first:=first^.next;
  dispose(s);
  end;
    end;

    procedure print(first:sar);
    begin
    writeln('Spausdiname: ');
        while first<>nil do
        begin
            write(first^.data,' ');
            first:=first^.next;
        end;
        writeln();
    end;

procedure sort (var first:sar);
var s1,s2:sar;
    nonsort:boolean;
  begin
  nonsort:=true;
     while((nonsort)and(first<>nil))do
    begin
    s1:=first;
       s2:=s1^.next;
     nonsort:=false;
  while(s2<>nil)do
      begin

        if(s1^.data>s2^.data)
     then
             begin
               s1^.next:=s1^.next^.next;
         if(s1^.next<>nil)then
      s1^.next^.back:=s1;
         s2^.next:=s1;
         s2^.back:=s1^.back;
         if(s2^.back<>nil)then
      s2^.back^.next:=s2;
         s1^.back:=s2;
    nonsort:=true;
       s2:=s1^.next;
    end
    else
    begin
    s1:=s1^.next;
    s2:=s2^.next;
    end;

  end;
   while(s1^.back<>nil)do
      begin
      s1:=s1^.back;
      first:=s1;
         end;
  end;
  end;





var LIST:sar;
selection:integer;
data:integer;
    begin
        makeNew(LIST);
        writeln('1)Insert element to the beginning');
        writeln('2)Insert to center ');
        writeln('3))Insert to the end.');
        writeln;
        write('Where to insert? - ');
        readln(selection);
        writeln;
        case selection of
        1: begin
  writeln('insert the value');
  readln(data);
  addbefore(LIST,data);
        end;
  2:begin
  writeln('insert the value');
  readln(data);
  addtocenter(LIST,data);
        end;
        3:begin
  writeln('insert the value');
  readln(data);
  addlast(LIST,data);
        end;
        end;
        sort(LIST);
  print(LIST);
        delete(LIST);
    end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 22:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name