Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2014, 15:04   #1
magic666
Пользователь
 
Регистрация: 26.09.2014
Сообщений: 11
По умолчанию Перевести с Паскаля на си

Не помню Паскаль, попытался с горем пополам перевести.
Проверка равенства двух списков
Код:
function eq_list (var t, p :list): boolean;
var t1, p1: list;
begin  
   if t=nil
   then  eq_list :=  p=nil
    else
      if p=nil
      then eq_list := false
      else {оба списка не пусты}
        begin 
          eq_list := true;
          t1 := t; p1 := p;
          while (t1 <> nil) and (p1 <> nil) do
            if t1^info <> p1^.info
            then begin  eq_list := false; exit end
            else begin t1 := t1^.next; p1 := p1^.next end;
          eq_list := (t1 = nil) and (p1 = nil)
        end
     end
Моя попытка:
Код:
bool eq_list(SLIST *t, SLIST *p)
{
    *t1,*p1;
    if(t == NULL)
    eg_list =  (p==NULL);
    else if(p = NULL)
    eq_list = false;
    
    eq_list = true;
    t1 = t;
    p1 = p;
    
    while(t1 <> NULL  &&  p1 <>NULL){
    if(t1->info <> p1->info)
       eq_list = false;
    else 
       t1 = t1->next;
       p1= p1->next;
    }
    eq_list = (t1 == NULL) && (p1 == NULL);
}
magic666 вне форума Ответить с цитированием
Старый 28.09.2014, 15:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кажись так:
Код:
bool eq_list (list *t, list *p){
list *t1, *p1;

   if (!t) return true;
   else
      if (!p) return false
      else 
        { 
          t1 = t; p1 = p;
          while (t1 && p1){
            if (t1->info != p1->info)   return false;
            else { t1 = t1->next; p1 = p1->next;}
          }
         }
          return = !t1 && !p1;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2014, 15:57   #3
magic666
Пользователь
 
Регистрация: 26.09.2014
Сообщений: 11
По умолчанию

Stilet, огромное спасибо!
Попытался собрать программу. В функции проверки равентва двух списков выдает ошибку: request for member 'next'('info') in something not a structure or union. Я опять что-то делаю не так?!
slist.h
Код:
#ifndef SLIST_H
#define SLIST_H
#define SIZE 12


typedef enum {false,true} bool;
typedef struct SNODE  SNODE;
typedef struct SNODE *PNODE;
typedef struct SLIST SLIST;

struct SNODE{
    int key;
    int info;
    PNODE next;
}node;

struct SLIST{
    int count;
    int size;
    PNODE head,tail;
}slist;

void init_slist(SLIST*);
bool is_slist_empty(SLIST*);
bool is_slist_overflow(SLIST*);
bool eq_list(SLIST*,SLIST*);

void prepand_to_slist(SLIST*,PNODE);
void print_slist(SLIST*);
#endif /*SLIST_H*/
main.c
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "slist.h"

int main()
{
    SLIST *lst1;
    SLIST *lst2;
    PNODE nd;
    int i;
    lst1 = (SLIST*)malloc(sizeof(slist));
    lst2 = (SLIST*)malloc(sizeof(slist));
    init_slist(lst1);
    init_slist(lst2);
    srand(time(0));

    for(i=0;i<SIZE;i++)
    {
        nd = (PNODE)malloc(sizeof(node));
        nd->key = i+1;
        nd->info = rand()%30;
        prepand_to_slist(lst1,nd);
    }
    printf("first: \n");
    print_slist(lst1);

    for(i=0;i<SIZE;i++)
    {
        nd = (PNODE)malloc(sizeof(node));
        nd->key = i+1;
        nd->info = rand()%30;
        prepand_to_slist(lst2,nd);
    }

    printf("second: \n");
    print_slist(lst2);
    eq_list(lst1,lst2);
    if(return == false)
        printf("LISTS are not equal\n");
    return 0;
}
void init_slist(SLIST *st)
{
    st->count = 0;
    st->size = SIZE;
    st->head = st->tail = NULL;
}

bool is_slist_empty(SLIST *st)
{
    return ((st->count == 0)?true:false);
}
bool is_slist_overflow(SLIST *st)
{
    return((st->count == st->size)?true:false);
}

void print_slist(SLIST *l)
{
    PNODE nd;
    nd = l->head;
    while(nd!=NULL)
{
    printf("%3d",nd->info);
    nd = nd->next;
}
printf("\n");

}
void prepand_to_slist(SLIST *l, PNODE nd)//dobavit pered pervim
{
    if(!is_slist_overflow(l)){
  if(is_slist_empty(l))
{
    l->head = l->tail =nd;
    nd->next = NULL;
    l->count = 1;

}
else{
    nd->next = l->head;
    l->head = nd;
    l->count++;
    }
  }
}

bool eq_list(SLIST *t, SLIST *p){
PNODE *t1, *p1;

   if (!t) return true;
   else
      if (!p) return false;
      else
        {
          t1 = t;
          p1 = p;
          while (t1 && p1){
            if (t1->info != p1->info)
                  return false;
            else {
                    t1 = t1->next;
                    p1 = p1->next;
                 }
                          }
         }
          return(!t1 && !p1);
}

Последний раз редактировалось magic666; 28.09.2014 в 16:16.
magic666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести из паскаля в Си AirC Общие вопросы C/C++ 8 19.05.2014 18:42
Перевести с Паскаля на Си lyubov17 Помощь студентам 0 10.12.2013 21:11
перевести код с Паскаля на С++ Arman107 Паскаль, Turbo Pascal, PascalABC.NET 0 29.05.2013 09:13
перевести из паскаля на с++ екатерина новикова Общие вопросы C/C++ 1 19.12.2011 19:21
перевести из паскаля в си++ екатерина новикова Помощь студентам 0 19.12.2011 19:02