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

Подскажите, в чём ошибка? - C++

Восстановить пароль Регистрация
 
MOLK
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 30
18.11.2011, 00:53     Подскажите, в чём ошибка? #1
Задание: Записи в линейном списке содержат ключевое поле типа int. Сформировать двунаправленный список. Удалить из него элемент с заданным номером, добавить элемент в начало списка. Вот что у меня получилось:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "stdafx.h"
#include <stdio.h>
 
struct list
{
int val;
list *next,*prev;
};
 
list *head=NULL;
 
list *create(int vv)
{
list *q = new list;
q->val = vv;
q->next=NULL;
return q;
}
 
list *insert_fst(list *ph, int vv)
{
list *pn=create(vv);
pn->next = ph;           // next for new - first
ph = pn;                 // first - new
return ph;
}
 
/*удаление элемента с заданным номером из двунаправленного списка*/
list* Delete_Item_list(list* head, int Number)
{
  list *ptr;//вспомогательный указатель
  list *Current = head;
  for (int j = 1; j < Number && Current != NULL; j++)
    Current = Current->next;
  if (Current != NULL){//проверка на корректность
    if (Current->prev == NULL){//удаляем первый элемент
      head = head->next;
      delete(Current);
      head->prev = NULL;
      Current = head;
    }
    else {//удаляем непервый элемент
      if (Current->next == NULL) {
      //удаляем последний элемент
        Current->prev->next = NULL;
        delete(Current);
        Current = head;
      }
      else {//удаляем непервый и непоследний элемент
        ptr = Current->next;
        Current->prev->next =Current->next;
        Current->next->prev =Current->prev;
        delete(Current);
        Current = ptr;
      }
    }
  }
  return head;
}
 
void show(list *ph)
{
list *q;
for (q=ph; q!=NULL; q=q->next)
    printf("%d-->",q->val);
puts("NULL");
}
 
void main()
{   int i;
int Number;
 
 
    head=create(i);
for (int i=0; i<10; i++)
    head=insert_fst(head,i);
head=Delete_Item_list(head, Number);
show (head);
}
Где ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.11.2011, 01:54     Подскажите, в чём ошибка? #2
а что не так? на что плюется машина?

Добавлено через 1 минуту
omg это дикий суржик си и си++, определитесь.
MOLK
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 30
18.11.2011, 02:07  [ТС]     Подскажите, в чём ошибка? #3
alkagolik, пишет "Debug Error. the variable 'i' is being used without being initialized." Т.е. программа начинает выполняться, затем выскакивает окно об ошибке и выполнение прерывается.
Мне нужен С++. Как исправить?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.11.2011, 02:27     Подскажите, в чём ошибка? #4
Цитата Сообщение от MOLK Посмотреть сообщение
Debug Error. the variable 'i' is being used without being initialized.
а переводить не пробовали? все ясно сказано
C
1
2
3
4
5
6
7
void main()
{       int i;  /*вот*/
int Number;
 
 
        head=create(i);
for (int i/*и вот*/=0; i<10; i++)
хотя это должно работать, я помню недавно ставил эксперименты. и таки да, работает
MOLK
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 30
18.11.2011, 02:30  [ТС]     Подскажите, в чём ошибка? #5
alkagolik, так ведь у меня всё точно так и написано...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.11.2011, 02:33     Подскажите, в чём ошибка? #6
исправьте строку 75
C
1
for (i = 0; i < 10; i++)
MOLK
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 30
18.11.2011, 02:37  [ТС]     Подскажите, в чём ошибка? #7
Всё равно пишет ту же ошибку
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
18.11.2011, 02:47     Подскажите, в чём ошибка? #8
C++
1
2
void main()
{ int i;
поменяй на
C++
1
2
void main()
 int i = тут какое-то число;
MOLK
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 30
18.11.2011, 02:53  [ТС]     Подскажите, в чём ошибка? #9
изменила
C++
1
2
3
void main()
{   int i=10;
int Number=2;
теперь просто пишет, что прекращена работа программы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 03:25     Подскажите, в чём ошибка?
Еще ссылки по теме:

C++ В чём ошибка?
C++ В чём ошибка?
C++ Подскажите пожалуйста в чём ошибка

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
18.11.2011, 03:25     Подскажите, в чём ошибка? #10
Проверяйте свой список. Дело в нем. Если хотите научится программировать, то ищите ошибки сами. Только в крайнем случае просите помощи.

Добавлено через 1 минуту
Посмотрел на функцию удаления элемента. Можно написать на много короче и яснее. Вы что-то перемудрили.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
list *create(int vv)
{
list *q = new list;
q->val = vv;
q->next=NULL;
return q;
}
про prev забыли
C++
1
2
3
4
5
6
7
list *insert_fst(list *ph, int vv)
{
list *pn=create(vv);
pn->next = ph;           // next for new - first
ph = pn;                 // first - new
return ph;
}
Забыли ph->prev присвоить pn;

Добавлено через 1 минуту
А где у вас функция удаления всех элементов в конце программы? У вас же утечка памяти.

Добавлено через 1 минуту
В такой громоздкой функции вставки очень легко сделать ошибку. Пытайтесь писать код короче и яснее.

Добавлено через 22 минуты
В такой громоздкой функции вставки очень легко сделать ошибку. Пытайтесь писать код короче и яснее.
*В такой громоздкой функции удаления очень легко сделать ошибку. Пытайтесь писать код короче и яснее.
Yandex
Объявления
18.11.2011, 03:25     Подскажите, в чём ошибка?
Ответ Создать тему
Опции темы

Текущее время: 13:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru