Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Aivengo1677
0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
#1

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

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

Срочно нужна помощь по задаче: "составить программу, которая вставляет в список 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.

Помогите кто может, очень прошу!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2009, 12:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужна помощь по С++ (перевести из паскаля) (C++):

Перевести с паскаля на С++ - C++
Var s,s1:string; i,k:byte; Begin write('Введите строку: ');readln(s); k:=0;s1:=''; For i:=Length(s) downto 1 do ...

Перевести с паскаля на Си++ - C++
вообщем программа на паскале нужно перевести на с++ суть проги поменять местами главную диагональ и побочную program pr1; var...

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

Перевести с паскаля на С++ - C++
Program p1; Var x,i,n:integer; Begin Write ('n= '); Read (n); x:=10; i:=0; repeat if (n div x) &lt;&gt; 0 then...

Перевести с Паскаля на С++ - C++
Здравствуйте! Можете помочь, мне надо перевести код с Паскаля на С++ (код паскаля на фото). Вот что получилось у меня. Но код не...

Перевести из Паскаля на С++ - C++
var d, m: integer; begin writeln('Введіть день'); readln (d); writeln('Введіть мiсяць'); readln (m); case m of 1, 3, 5, 7,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
20.05.2009, 13:09 #2
C++
1
2
3
4
5
6
struct TSpisok
{
    int    Inf;
    TSpisok*   Next;
};
typedef TSpisok*  PSpisok;
С остальным разберешься сам, надеюсь. Синтаксис этих языков не очень сильно различается.
Aivengo1677
0 / 0 / 0
Регистрация: 20.05.2009
Сообщений: 5
21.05.2009, 08:28  [ТС] #3
Спасибо, а как на С++ строка
Pascal
1
L^.Next:=nil;
? L*.Next=null и т.п. неподходит...
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
21.05.2009, 08:47 #4
C++
1
L->Next = NULL;
Aivengo1677
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->...
ругается
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
21.05.2009, 09:55 #6
Косяк в 14 строке, нужно как-то так:
L = new TSpisok;

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

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

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

C Паскаля перевести в С++ - C++
Дана матрица размера M x N. Удалить столбец, содержащий максимальный элемент матрицы. program Matrix64; var ...

Перевести с паскаля на C++ - C++
помогите перевести с паскаля на C++ , очень надо.:) var n,i,j,k,l:longint; begin readln(n); repeat i:=i+1; ...

Перевести из паскаля в c++ - C++
собственно вот паскалевский код, тут через файлы. На с++ надо через ввод/вывод. var N:integer; E:integer; En1,En2:integer; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.05.2009, 13:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru