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

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

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

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

20.05.2009, 12:54. Просмотров 739. Ответов 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.

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

Перевести из паскаля в C++ - C++
Перегнать из паскаля в C++. Заранее благодарю. условие: Вводится последовательность вещественных чисел, оканчивающаяся нулём, и...

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

перевести с Паскаля в с++ - C++
Var s:string; i,k:integer; b:boolean; Begin write('Введите строку: ');readln(s); if Length(s) in then k:=1 else...

Перевести с Паскаля на С++ - C++
uses crt; var n,k:byte; p,s:longint; begin clrscr; write('Введите произведение нескольких первых нечетных натуральных чисел...

перевести в си++ из паскаля - C++
var n:longint; i,c:integer; s:string; A:array of boolean; begin write('Введите N: '); readln(n); str(n,s); ...

перевести на c++ с паскаля - C++
переведите пожалуйста как написать эти строчки на с++ for i:=1 to Length(s) do for j:=length(sl) downto 1 do Добавлено...

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

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

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

перевести из паскаля в с++ - C++
program spektr; uses crt; type vect=arrayof integer; var f,g:vect; j,i,n:integer; BEGIN clrscr; write('n=');...

Перевести с Паскаля на Си - C++
Структура элемента массива работник: фамилия, число, месяц и год рождения, пол. определить: ─ фамилия самого старшего мужчины; ─...

Перевести из паскаля на c++ - C++
Program laba2; var d, m: integer; begin writeln('Введіть день'); readln (d); writeln('Введіть мiсяць'); readln (m); ...

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


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

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

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