С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
4 / 4 / 2
Регистрация: 03.12.2009
Сообщений: 71

Некорректное выполнение программы

07.10.2010, 20:30. Показов 982. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include"stdafx.h" 
#include<iostream> 
#include<math.h> 
using namespace std; 
 
// Структура: 
struct tree 
{ 
char eng; //слово 
int count; //количество обращений 
tree *left; 
tree *right; 
}; 
char temp_eng; 
int temp_count; 
int level=0; 
// Функциясоздания первого элемента 
tree *first (char eng, int count); 
// Функцияпоиска и добавления элемента 
tree *search_insert (tree *root, char eng, int count); 
// Функцияпоказадерева 
void print_tree(tree *p, int level); 
 
// Функцияфрмирования первого элемента дерева: 
tree *first (char temp_eng, int count) 
{ 
tree *pv=new tree; 
pv->eng=temp_eng; 
pv->count=temp_count; 
pv->left=0; 
pv->right=0; 
return pv; 
} 
// Функцияпоиска и добавления элемента в дерево: 
tree *search_insert (tree *root, char temp_eng, int temp_count) 
{ 
tree *pv=root, *prev; 
bool found=false; 
//поиск подереву 
while(pv&&!found) { 
prev=pv; 
if(temp_eng==pv->eng) found = false; 
else if (temp_count < pv->count) pv=pv->left; 
else pv=pv->right; 
} 
if (found) return pv; 
//созданиенового узла 
tree *pnew=new tree; 
pnew->eng=temp_eng; 
pnew->count=temp_count; 
pnew->left=0; 
pnew->right=0; 
if(temp_count < prev->count) 
prev->left=pnew; //присоединение к левому поддереву предка 
else prev->right=pnew; //присоединение к правомуподдереву предка 
return root; 
} 
// Функция показа дерева 
void print_tree(tree *p, int level) 
{if (p) 
{ 
print_tree(p->left, level+1); 
for (int i=0; i<level; i++) 
cout<<" "; 
cout<<p->eng<<endl; 
for (int i=0; i<level; i++) 
cout<<" "; 
cout<<p->count<<endl; 
print_tree (p->right, level+1); 
} 
} 
 
// Главнаяфункция: 
int main() 
{ 
int vibor; 
tree *root=NULL; 
do { 
cout<<"Najmite: "<<endl; 
cout<<"1| Dobavitslovo v slovar"<<endl; 
cout<<"2| Vihod"<<endl; 
cout<<"3| Vivestiderevo na ekran"<<endl; 
cin>>vibor; 
switch (vibor) 
{ 
case 1:{cout<<"Vvedite angliskoe slovo: "<<endl; 
cin>>temp_eng; 
cout<<"Vvediteznachenie schetchika: "<<endl; 
cin>>temp_count; 
//создание первого элемента дерева 
if (!root)root=first(temp_eng, temp_count); 
//создание элементо-потомков дерева 
else root=search_insert (root, temp_eng, temp_count);  
}; break; 
case 2: return 0; break; 
case 3: print_tree (root, 0); break; 
default: cout<<"Нужно нажать клавишу от 1 до4"<<endl; 
break; 
} 
} 
while(vibor!=3); 
system("pause"); 
return 0; 
}


Англо-русский словарь построен как бинарный список (двоичное
дерево).
Каждая компонента содержит английское слово,соответствующее
ему русское слово и счетчик количества обращений к данной компоненте.
Первоначально бинарный список был сформирован согласно английскому алфавиту. В процессе эксплуатации словаря при каждом обращении
к компоненте в счетчик обращений добавлялась единица.

Составить программу, которая:

-обеспечивает начальный ввод словаря с конкретными значениями
счетчиков обращений;
-формирует новое представление словаря в виде двоичного дерева
по следующему алгоритму:
а) в старом словаре ищется компонента с наибольшим значением
счетчика обращений;
б) найденная компонента заносится в новый словарь и удаляется
из старого;
в) переход кп. а) до исчерпания исходного словаря.

-производит распечатку исходного и нового словарей.

Программа должна обеспечивать диалог с помощью меню ,
ввод/вывод в окна и контроль ошибок при вводе.

Указание: использовать динамические структуры.



Вообщем в кратце, после ввода слова не адёт ввести значение счётчика! сразу переходит к меню!
в прикреплённом файле скрин!

как это ликвидировать?
Миниатюры
Некорректное выполнение программы  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2010, 20:30
Ответы с готовыми решениями:

Некорректное выполнение программы
Суть проблемы: при выполнении программы выдаются корявые значения (-1.INF). Понимаю, что в программе где-то допущена ошибка, но сам уже...

Постепенное выполнение программы/зависание программы при выполнении
Собственно есть вопрос, возможно очень даже глупый, но все же спрошу: почему при выполнении большого кол-ва операций программа повисает, а...

Некорректное обновление программы на клиентской рабочей станции
Ребята очень нужна Ваша помощь! Разрабатываю программу обновления ПО. На компьютере где я ее запускаю у пользователя отсутствуют...

5
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
07.10.2010, 22:50
вероятно, в потоке ввода остается код перевода каретки.
попробуй так
C++
1
2
3
4
cin>>temp_eng; 
cin.get()
cout<<"Vvediteznachenie schetchika: "<<endl; 
cin>>temp_count;
0
4 / 4 / 2
Регистрация: 03.12.2009
Сообщений: 71
08.10.2010, 00:48  [ТС]
а fflush(stdin)
может в буфере проблема?

Добавлено через 14 минут
к сожалению ваш вариант не работает....
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.10.2010, 08:11
вообще-то fflush для небуферизированного ввода, насколько я помню.
для scanf то есть.
еще можно попробовать cin.clear() или cin.sync() или даже cin.ignore(cin.rdbuf()->in_avail())
0
4 / 4 / 2
Регистрация: 03.12.2009
Сообщений: 71
08.10.2010, 15:20  [ТС]
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include"stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;
 
// Структура:
struct tree
{
char eng;
char rus;
int count; //количество обращений
tree *left;
tree *right;
};
char temp_eng[30];
char temp_rus[30];
int temp_count;
int level=0;
// Функциясоздания первого элемента
tree *first (char eng, char rus, int count);
// Функцияпоиска и добавления элемента
tree *search_insert (tree *root, char eng, char rus, int count);
// Функцияпоказадерева
void print_tree(tree *p, int level);
 
// Функцияфрмирования первого элемента дерева:
tree *first (char temp_eng,char temp_rus, int count)
{
tree *pv=new tree;
pv->eng=temp_eng;
pv->rus=temp_rus;
pv->count=temp_count;
pv->left=0;
pv->right=0;
return pv;
}
// Функцияпоиска и добавления элемента в дерево:
tree *search_insert (tree *root, char temp_eng,char temp_rus, int temp_count)
{
tree *pv=root, *prev;
bool found=false;
//поиск подереву
while(pv&&!found) {
prev=pv;
if(temp_eng==pv->eng) found = false;
if(temp_rus==pv->rus) found = false;
else if (temp_count < pv->count) pv=pv->left;
else pv=pv->right;
}
if (found) return pv;
//созданиенового узла
tree *pnew=new tree;
pnew->eng=temp_eng;
pnew->rus=temp_rus;
pnew->count=temp_count;
pnew->left=0;
pnew->right=0;
if(temp_count < prev->count)
prev->left=pnew; //присоединение к левому поддереву предка
else prev->right=pnew; //присоединение к правомуподдереву предка
return root;
}
// Функция показа дерева
void print_tree(tree *p, int level)
{if (p)
{
print_tree(p->left, level+1);
for (int i=0; i<level; i++)
cout<<" ";
cout<<p->eng<<endl;
cout<<" - ";
cout<<p->rus<<endl;
for (int i=0; i<level; i++)
cout<<" ";
cout<<p->count<<endl;
print_tree (p->right, level+1);
}
}
 
// Главнаяфункция:
int main()
{
int vibor;
tree *root=NULL;
do {
cout<<"Najmite: "<<endl;
cout<<"1| Dobavitslovo v slovar"<<endl;
cout<<"2| Vihod"<<endl;
cout<<"3| Vivestiderevo na ekran"<<endl;
cin>>vibor;
switch (vibor)
{
case 1:{cout<<"Vvedite angliskoe slovo: "<<endl;
cin>>temp_eng;
cout<<"Vvedite perevod slova: "<<endl;
cin>>temp_rus;
cout<<"Vvediteznachenie schetchika: "<<endl;
cin>>temp_count;
//создание первого элемента дерева
if (!root)root=first(temp_eng[30], temp_rus[30], temp_count);
//создание элементо-потомков дерева
else root=search_insert (root, temp_eng[30],temp_rus[30], temp_count);
}; break;
case 2: return 0; break;
case 3: print_tree (root, 0); break;
default: cout<<"Nuzno vibrat punkt ot 1 do 3"<<endl;
break;
}
}
while(vibor!=3);
system("pause");
return 0;
}
я сделал так что к temp_eng и temp_rus добавил [30] и получил temp_eng[30] и temp_rus[30]

и тепреь программа стала делать следующее
можно ввести английское слово, его перевод, и счётчик
но если ещё раз выбрать 1 и ввести ещё одно слово со значением то в конце программа повиснет...

если ввести английское слово его перевод и счётчик 1 раз, то при выборе действия 2 он выводит только номер счётчика....

и тогда может проблема не в потоке ввода а в чём то другом?
но я не могу понять в чём(
Миниатюры
Некорректное выполнение программы   Некорректное выполнение программы  
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
08.10.2010, 18:23
Возможно, есть и еще глюки.
Но вот так - должно глючить немеряно.
Нумерация элементов в массиве начинается с 0, так что элементы temp_eng[30] и temp_rus[30] не существуют.
Это ссылки за предел массива на непонятно какие данные.

Добавлено через 6 минут
Кстати, я не изучал ваш исходный код, но вот взялся посмотреть...
Хочу заметить, что
char temp_eng; - это объявление переменной типа char: то-есть ОДНОГО СИМВОЛА.
И ввод, типа
cin>>temp_eng; - введет ОДИН СИМВОЛ.
Не удивительно, что исходная программа не работала.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2010, 18:23
Помогаю со студенческими работами здесь

Чистый графический проект (некорректное имя программы)
Вот при создании проекта win32(не пустого) создаётся много мусора, всякие предкомпилированные заголовки и прочая ерунда... Хотел убрать...

Некорректное выполнение программы
Доброго времени суток,столкнулся с проблемой:вроде результат должен быть &quot;100&quot;,но у меня показывает &quot;5050&quot; или так и должно...

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

Некорректное выполнение условия
Здравствуйте уважаемые форумчане. У меня возникла проблема при выполнении лабораторной работы. Суть проблемы закоючается в следующем: при...

Некорректное выполнение цикла FOR
Добрый день. Я новичок в микроконтроллерах и скорее всего что-то еще не понимаю. У меня возникла проблема с циклом (порт В...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru