Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевести небольшой код с Pascal в C++, перевел сам, но похоже что не так... 
:(
    Опции темы
SergXP
Дата 17.12.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Здраствуйте. 
Имеется код на Pascal:
Код

type 
link = ^node;
node = record
key: integer;
st: string;
next: link;
end;

var
mas: array[0..9] of link;

function h(key: integer): integer;
begin
h:=key mod 10;
end;

function search(key1: integer; st1: string): link;
var
i: integer;
q, p, s: link;
begin
i:= h(key1);
q:=nil;
p:=mas[i];
while p <> nil do
begin
if p^.key = key1 then
begin
    search:=p;
    exit;    
    end;
q := p;
p := p^.link;
end;
{Если ключ не найден, вставляем новую запись}
new(s);
s^.key:=key1;
s^.st:=st1;
s^.next:=nil;
if q = nil then
mas[i]:=s
else
q^.next:=s;
search:=s;
end;


Попытался его перевести в C++:
Код

typedef
struct node {
  int key;
  string st;                              // В структуре вообще запутался :( 
  node *link;
  //node *next;
}link;


link mas[9];

int h(int key) {
  return key % 10;
}

link search(int key1, string st1) {
  int i;
  link q,p,s;

  i = h(key1);
  q = NULL;       // ругается на эту строку
  p = mas[i];
  while (p != NULL) {  // тоже ругается
    if (*p->key = key1) {
      search = p;
      exit();
    }
    q = p;
    p = *p->link;
   }
   malloc(s);
   *s->key = key;
   *s->st = st1;
   *s->next = NULL;

   if (q == NULL) {
     mas[i] = s;
   } else {
     *q->next = s;
   }
   search = s;
}


Помогите исправить мои ошибки. Спасибо.
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 17.12.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Код

typedef
struct node_ {
  int key;
  string st;                              // В структуре вообще запутался :( 
  node_* next;
} nnode;

typedef node_* link;

link mas[9];

int h(int key) 
{
  return key % 10;
}

link search(int key1, string st1) {
  int i;
  link q,p,s;
  i = h(key1);
  q = NULL;       // ругается на эту строку
  p = mas[i];
  while (p != NULL) {  // тоже ругается
    if (p->key = key1) {
      return p;
      
    }
    q = p;
    p = p->next;
   }
   s=(link)new nnode;
   s->key = key1;
   strcpy(s->st , st1);
   s->next = NULL;
   if (q == NULL) {
     mas[i] = s;
   } else {
     q->next = s;
   }
   return s;
}



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
SergXP
Дата 17.12.2008, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Romikgy, ага, спасибо! Тока он ругается на strcpy(s->st , st1); изменил на s->st = st1; откомпилировалась smile 
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
NewDima
Дата 19.12.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



по-моему в переводе все-равно ошибки
Код

typedef char string[255];
typedef struct node
 {
  int key;
  string st;
  node *next;
 } *link;

link mas[10];

int h(int key) {return key % 10;}
link search(int key1, string st1)
{
int i = h(key1);
link q=(link)0, p=mas[i];
while (p)
 {
 if (p->key==key1) return p;
 q = p;
 p = p->next;
 }
link s = new node;
memcpy((void*)s->st[0], (void*)st1[0], 255);
s->next = (link)0;
if (!q) mas[i] = s; else q->next = s;
}

PM ICQ   Вверх
mes
Дата 19.12.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



а тут помойму чем дословный перевод делать, легче заново написать ..
как понял задача состоит в том чтоб хранить и находить строчки по ключу , тогда так :
Код


#include <map>

typedef  std::map<int, std::string> TMyMap;
TMyMap mymap;

 smile 

 ну вот небольший тестик :
Код


#include <iostream>
#include <map>

typedef  std::map<int, std::string> TMyMap;
TMyMap mymap;

int main ()
{
    mymap [4]  = "string_with_key_4";
    mymap [12]  = "string_with_key_12";
    mymap [456]  = "string_with_key_456";

    for (TMyMap::iterator it = mymap.begin(); it!=mymap.end(); ++it )
    std::cout << "key " << it->first << " string "<< it->second << std::endl;
    std::cout << std::endl;

    std::cout << "key 0 " << mymap[0] << std::endl;
    std::cout << "key 4 " << mymap[4] << std::endl;
    std::cout << "key 7 " << mymap[7] << std::endl;
    std::cout << "key 12 " << mymap[12] << std::endl;
    std::cout << "key 45 " << mymap[45] << std::endl;
    std::cout << "key 456 " << mymap[456] << std::endl;

  getchar ();
  return 0;
}




 smile 




Это сообщение отредактировал(а) mes - 19.12.2008, 18:24


--------------------
PM MAIL WWW   Вверх
NewDima
Дата 20.12.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Цитата(mes @ 20.12.2008,  01:09)
а тут помойму чем дословный перевод делать, легче заново написать ..

полностью согласен
PM ICQ   Вверх
SergXP
Дата 14.3.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Ну вот, опять мне понадобилась Ваша помощь. 
Не буду создавать сто тем с одной проблемой.
Ребят, имеются структуры(думаю стоит почитать мне книги)
Код

TPElSp = ^TElSp;
TElSp = record
  key: byte;
  cnt: cardinal;
  next: TPElSp;
  end;

TPArNode = ^TArNode;
TArNode = record
  value: real;
  kod: TKey;
  left: TPArNode;
  right: TPArNode;
  parent: TPArNode;
  symb: byte;
  end;

TTree = record
  key: byte;
  cnt: cardinal;
  huff: TStr;
  n0: extended;
  deep: boolean;
  st_tree: TPArNode;
  end;

TArTree = array of TTree;

TFileRec = record
  key: byte;
  kod: byte;
  size_kod: byte;
  end;

TGetFile = record
  key: byte;
  kod: string[16];
  size_kod: byte;
  end;

TArFRec = array of TGetFile;



Помогите перевести в C++
У меня получается ерунда, хотя пример покажите на первых дух структурах. 
Только прошу не говорите, что не хочу сам переводить. Я пытался, но пока не получилось.
Переведите хотябы первые две структуры, а дальше сам попробую разобраться. smile
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 14.3.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Код

Паскаль:
TElSp = record
  key: byte;
  cnt: cardinal;
  next: TPElSp;
  end;
TPArNode = ^TArNode;

С++
typedef struct
{
  unsigned char byte;
  long cnt;
  TElSp *next;
} TElSp;
typedef TElSp *TPArNode;

Паскаль:
TArNode = record
  value: real;
  kod: TKey;
  left: TPArNode;
  right: TPArNode;
  parent: TPArNode;
  symb: byte;
  end;

С++
typedef struct
{
  float value;
  TKey kod;            // Тут я не знаю что за тип
  TPArNode left;
  TPArNode right;
  TPArNode parent;
  unsigned char byte;
} TArNode;



Это сообщение отредактировал(а) Anikmar - 14.3.2009, 00:48
PM MAIL ICQ   Вверх
SergXP
Дата 14.3.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Anikmar, ага спасибо.
Только вот Вы пропустили:
Код

TPElSp = ^TElSp; // эту строку
TElSp = record
  key: byte;                    // и что-то с этой строкой напутали наверное, хотя может я ошибаюсь :(
  cnt: cardinal;
  next: TPElSp;
  end;


Тогда как будет правильно?
Код

typedef struct TElSp
{
  unsigned char byte;
  long cnt;
  TElSp *next;
} TElSp;
TElSp *TPElSp;

--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 14.3.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(SergXP @  14.3.2009,  00:54 Найти цитируемый пост)
Тогда как будет правильно?

typedef struct TElSp
{
  unsigned char byte;
  long cnt;
  TElSp *next;
} TElSp;
TElSp *TPElSp;



Правильно так:
Код

typedef struct TElSp
{
  unsigned char byte;
  long cnt;
  TElSp *next;
} TElSp;
typedef TElSp *TPElSp;

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.