0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
1

Нужна помощь по С++ (перевести из паскаля)

20.05.2009, 12:54. Показов 924. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Срочно нужна помощь по задаче: "составить программу, которая вставляет в список L новый элемент F за каждым вхождением элемента E.
На паскале выглядит примерно так, но мне нужно на С++, а я понятия не имею как там Type определяется и типизированные ^типы, тип record...:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
uses crt;
type {список целых чисел}
 PSpisok = ^TSpisok;
 TSpisok = record
  Inf: integer; {целое число}
  Next: PSpisok; {указатель на следующий элемент}
 end;
var
 h: PSpisok; {первый элемент списка}
 L: PSpisok; {список}
 x: PSpisok; {последний элемент списка}
 t: PSpisok; {используется при добавлении элемента в список}
 i,n,e,f:integer;
begin
 clrscr;
 write('Введите кол-во элементов списка, N='); readln(n);
 randomize;
 {создаем первый элемент списка}
 New(L); {Выделяем память }
 L^.Next:=nil; {так как второго элемента нет, указатель на слудующий элемент делаем пустым}
 L^.Inf:=random(50)-25; {присваиваем случайное число}
 h:=L;{запоминаем первый элемент}
 x:=L;{запоминаем последний элемент}
{создаем и заполняем следующие жлементы списка( до N)}
 for i:=2 to n do
  begin
   New(L^.Next); {выделяем память для следующего элемента списка}
   L:=L^.Next; {переходим к следущему элементу списка}
   {заполняем}
   L^.Next:=nil; 
   L^.Inf:=random(50)-25;
   x:=L; {запоминаем последний элемент списка}
  end;
{выводим элементы списка на экран}  
 L:=h; {переходим к первому элементу списка}
 while L^.Next<>nil do {пока указатель на следующий элемент не равен 0, т.е. следующий элемент не существует }
  begin
   write(L^.Inf:4); {выводим значение}
   L:=L^.Next; {перемещаемся к следующему элементу}
  end;
 write(L^.Inf:4); {выводим последний элемент списка}
 writeln;
 write('E='); readln(e); {ввод е - целое число}
 write('F='); readln(f); {ввод f - целое число}
 L:=h; {переходим к первому элементу списка}
  while L^.Next<>nil do {перемещаемся до предпоследнего элемента списка}
   begin
    if (L^.Inf = e) {текущий элемент равен е и последующий элемент не равен е}
     then
      begin
        t:=L^.Next; {запоминаем указатель на следующий элемент}
        New(L^.Next); {выделяем память для нового  элемента списка}
        L:=L^.Next; {переходим к следущему (новому) элементу списка}
        L^.Inf:=f;
        L^.Next:=t; {связываем список}
      end;
    L:=L^.Next; {переходим к следующему элементу списка}
   end;
 {дополнительно проверяем последний элемент списка, если он равен е, то добавляем элемент f в конец списка}
    if (L^.Inf = e) {текущий элемент равен е}
     then
      begin
        New(L^.Next); {выделяем память для нового  элемента списка}
        L:=L^.Next; {переходим к следущему (новому) элементу списка}
        L^.Inf:=f;
        L^.Next:=nil; {связываем список}
      end;
 {выводим элементы списка на экран}
 L:=h;
 while L^.Next<>nil do
  begin
   write(L^.Inf:4);
   L:=L^.Next;
  end;
 write(L^.Inf:4);
{освобождаем память}
 Dispose(L);
end
.
end.

Помогите кто может, очень прошу!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2009, 12:54
Ответы с готовыми решениями:

СРОЧНО НУЖНА ПОМОЩЬ! Нужна информация о тест оборудовании
Доброго времени суток! Интересует информация (книги, статьи, научные статьи, сайты, зарубежная...

перевести с Паскаля в с++
Var s:string; i,k:integer; b:boolean; Begin write('Введите строку: ');readln(s); ...

Перевести из Паскаля в C#
Код программы с Паскаль, перевести в C# не получается. Программа проходит по диагоналям матрицы...

Перевести из паскаля в с++
var a, i, b: integer; begin read(a); b := 0; for i := 1 to a do if a mod i = 0...

9
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
20.05.2009, 13:09 2
C++
1
2
3
4
5
6
struct TSpisok
{
    int    Inf;
    TSpisok*   Next;
};
typedef TSpisok*  PSpisok;
С остальным разберешься сам, надеюсь. Синтаксис этих языков не очень сильно различается.
0
0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
21.05.2009, 08:28  [ТС] 3
Спасибо, а как на С++ строка
Pascal
1
L^.Next:=nil;
? L*.Next=null и т.п. неподходит...
0
Любитель давать советы
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
21.05.2009, 08:47 4
C++
1
L->Next = NULL;
0
0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
21.05.2009, 09:50  [ТС] 5
Что-то я совсем не понимаю, я с памятью не работал. Написал код, который компилируется нормально, но при вводе числа N вылетает с ошибкой и выделяет строку
C++
1
L->Next=NULL;
, если ее убрать то переходит на следующую,где рандом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
struct TSpisok
{int inf;
TSpisok* Next;};
typedef TSpisok*  PSpisok;
void main (void)
{PSpisok h,L,x,t;
int i,n,e,f;
cout<<"Vvedite kolichestvo elementov spiska, N = "<<endl; cin>>n;
randomize();
new PSpisok(L);
L->Next=NULL;
L->inf=random(50)-25;
h=L; x=L;
for(i=2;i<=n;i++)
    {new PSpisok(L->Next);
    L=L->Next;
    L->Next=NULL;
    L->inf=random(50)-25;
    x=L;}
L=h;
while (L->Next!=NULL)
    {cout<<L->inf;
    L=L->Next;}
cout<<L->Next;
cout<<endl;
cout<<"E = ";
cin>>e;
cout<<"F = ";
cin>>f;
L=h;
while (L->Next!=NULL)
    {if (L->inf==e)
        {t=L->Next;
        new PSpisok(L->Next);
        L=L->Next;
        L->inf=f;
        L->Next=t;}
    L=L->Next;}
if (L->inf=e)
    {new PSpisok(L->Next);
    L=L->Next;
    L->inf=f;
    L->Next=NULL;}
L=h;
while (L->Next!=NULL)
    {cout<<L->inf;
    L=L->Next;}
cout<<L->inf;
delete(L);
}
Добавлено через 22 минуты 6 секунд
Точнее на все строки, где используется
C++
1
L->...
ругается
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
21.05.2009, 09:55 6
Косяк в 14 строке, нужно как-то так:
L = new TSpisok;

Ну и в остальных строках, где используешь new меняй по аналогии
1
0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
21.05.2009, 10:51  [ТС] 7
Спасибо, помогло!

Добавлено через 17 минут 53 секунды
Конечно смогу обойтись и без этого, но все равно не помешало бы знать: при выводе списка до преобразования последний элемент равен 0x00000000, а после преобразования - нормальное число. Как это исправить?
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
21.05.2009, 11:24 8
Не совсем понял вопрос,... до какого преобразования у тебя ноль?
0
0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
21.05.2009, 12:13  [ТС] 9
Сначала идет генерация случайных чисел в список, затем список выводится на экран - последний элемент выводится как 0х00000000.
Затем пользователю предлагается ввод чисел E и F.
И уже после этого выводится новый список, со вставленными элементами F после каждого, равного Е - в этом списке последний элемент же нормальное число.
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
21.05.2009, 13:55 10
Кстати, в 43 строке в if у тебя один знак равно. В С++ для проверки на равенство нужно использовать 2 знака равно, иначе у тебя вместо сравнения получается присваивание.
По поводу нуля... если у тебя заполняется рандомом, то может ноль - это нормальное число?
0
21.05.2009, 13:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2009, 13:55
Помогаю со студенческими работами здесь

Перевести с паскаля
program maximum; var a: array of integer; // массив масс предметов max: integer; // масса самого...

Перевести из паскаля на с++
program laba3; var n, i: integer; a, y: real;...

Перевести с Паскаля на C++
как заменить этот же код на С++ ?? const nmax = 100; type arr = array of real; var a:arr;...

Перевести с Паскаля на с#
For i:=1 to D1+1 do WRITEln (i:4,' y1 = ',x1:8:3,' ',mx:8:3); readln; n:=10; x2:=D2l;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru