Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
qweeqweqwe
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 36
1

Программа выводит только одно значение

16.11.2014, 09:21. Просмотров 927. Ответов 7
Метки нет (Все метки)

Здравствуйте. Есть код
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
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
#define nil NULL;
struct TList{
double info;
struct TList* next;
};
 
typedef struct TList pNode;
pNode* first = NULL;
pNode* last = NULL;
pNode* current = NULL;
void print_list()
{
pNode* current = first;
cout<<"Елементы:\n";
if (!current) cout<<"Лист пуст!\n";
while (current)
{
cout<<current->info<<" ";
current = current->next;
}
}
 
void add_element()
{
double x = (rand()%10)/10.0;
current = new pNode;
current->info = x;
current->next = NULL;
if (!first)
{
first = current;
}
else last->next = current;
last = current;
}
 
void make_list()
{
int n;
cout<<"Введите количество елементов:";
cin>>n;
for (int i=0; i<n; i++)
{
add_element();
}
}
 
void del_list()
{
while (first)
{
pNode* current = first;
first = current->next;
delete current;
}
}
 
void main()
{
system("chcp 1251 >text");
srand(time(NULL));
make_list();
print_list();
cout<<endl<<"Адреса:"<<endl<<"Первый: "<<&first<<endl<<"Последний: "<<&last<<endl<<"Текущий: "<<&current<<endl;
del_list();
system("pause");
}
, но если я в нём меняю одну переменную вместо
C++
1
2
3
4
5
6
if (!first)
{
first = current;
}
else last->next = current;
last = current;
на
C++
1
2
3
4
5
6
if (!first)
{
first = current;
}
else first->next = current;
first = current;
программа выводит только одно значение. Помогите пожалуйста.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2014, 09:21
Ответы с готовыми решениями:

Программа всегда выводит одно и тоже значение при разных вводимых данных
Не думаю, что дело в коде, но значение всегда выводилось n = 2 и pos = 2. ...

Функция rand в цикле выводит одно и то же значение
Всем привет! В общем, прилагаю условие задачи и мой написанный код :) Проблема,...

В двухмерный массив array[1][1] можно поместить только одно значение?
Хотел уточнить,в двухмерный массив array можно поместить только одно...

Программа выводит только целую часть числа
//Найти среднее арифметическое среди // простых чисел, расположенных после...

Программа выводит только первую строку текста
// yourcat.cpp: определяет точку входа для консольного приложения. // ...

7
MrHant
0 / 0 / 1
Регистрация: 16.11.2014
Сообщений: 11
16.11.2014, 10:18 2
Цитата Сообщение от qweeqweqwe Посмотреть сообщение
if (!first)
{
first = current;
}
else first->next = current;
first = current;
прогу без коментов, цели создания, изменения даже не читал но очевидна проблема в выделенных строчках: Текущим становится первый элемент, таким образом твой список не увеличивается. Тогда может стоить две строки после элс в фигурные скобки засунуть. Но повторюсь смысла не вижу в этих изменениях
0
qweeqweqwe
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 36
16.11.2014, 10:36  [ТС] 3
MrHant, Даны указатели P1, P2 и P3 на первый, последний и текущий элементы двусвязного списка (если список является пустым, то P1 = P2 = P3 = nil). Также дано число N (> 0) и набор из N чисел. Описать тип TList – запись с полями First, Last и Current типа PNode (поля указывают соответственно на первый, последний и текущий элементы списка) — и процедуру InsertLast(L, D), которая добавляет новый элемент со значением D в конец списка L (L – входной и выходной параметр типа TList, D – входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в конец исходного списка данный набор чисел (в том же порядке) и вывести новые адреса его первого, последнего и текущего элементов. В ней нужно просто поменять: добавляет новый элемент со значением D в конец списка L на элемент со значением D в начало списка L
0
MrHant
0 / 0 / 1
Регистрация: 16.11.2014
Сообщений: 11
16.11.2014, 11:27 4
тогда процедура добавления будет выглядить так:
C++
1
2
3
4
5
6
7
8
9
10
void add_element()
{
double x = (rand()%10)/10.0;
current = new pNode;
current->info = x;
if (first)
{
current->next = first;
first=current;
}
Естественно вместо рандомного x можно принять x как параметр чтобы добавлять какой-то конкретный элемент

А также если будут утечки памяти (обычно при закрытии программы или выполнении деструктора), значит нужно поэлементно перегонять весь список.
0
qweeqweqwe
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 36
16.11.2014, 12:13  [ТС] 5
MrHant, при любом значении лист пуст
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4608 / 2422 / 674
Регистрация: 18.10.2014
Сообщений: 4,135
16.11.2014, 12:17 6
Цитата Сообщение от qweeqweqwe Посмотреть сообщение
C
1
#define nil NULL;
А это что за счастье такое? Раз уж вам хочется так поизвращаться, так хотя бы уберите оттуда ';'
0
MrHant
0 / 0 / 1
Регистрация: 16.11.2014
Сообщений: 11
16.11.2014, 12:23 7
Лучший ответ Сообщение было отмечено qweeqweqwe как решение

Решение

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А это что за счастье такое? Раз уж вам хочется так поизвращаться, так хотя бы уберите оттуда ';'
Да парень походу с какого-то без башенного форума скопипастил код

Добавлено через 4 минуты
Цитата Сообщение от qweeqweqwe Посмотреть сообщение
MrHant, при любом значении лист пуст
C++
1
2
3
4
5
6
7
8
9
10
void add_element()
{
    double x = (rand() % 10) / 10.0;
    current = new pNode;
    current->info = x;
    
        current->next = first;
        first = current;
    
}
поправил
теперь значения заносить как надо
0
qweeqweqwe
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 36
16.11.2014, 12:32  [ТС] 8
MrHant, спасибо за помощь
0
16.11.2014, 12:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2014, 12:32

Не используя if присвоить переменной значение 0, если из трех чисел только одно положительное
Не могу разобраться как это правильно расписать Не используя оператор if,...

Выводит только максимальное значение массива, вместо минимального - 0. Почему?
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { ...

Программа, которая считывает текст из файла, и выводит на экран только цитаты
Написать программу, которая считывает текст из файла и выводит на экран только...


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

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

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