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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
#1

Вывод результата на экран - C++

20.04.2012, 23:58. Просмотров 2259. Ответов 44
Метки нет (Все метки)

Всем привет, нуждаюсь в помощи!
Написал прогу, она еще не на 100% готова, но при прекопиляции дает ошибку в последних 2 строках кода

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
#include <conio.h>
#include "iostream"
#include "fstream"
using namespace std;
 
struct List
{
    char ar[100];
};
 
void main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("C:\\data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)           /// сдесь ошибка
        cout << *ar[i];         //// сдесь ошибка
}
помогите правильно виводить масив, в котором в будущем при обработке входной инфы будет результат

Коротко по програме:
Вх данные местяться в data.txt , я их копирую в прогу, работаю с ними, по формуле делаю хеш-таблицу, и в масиве ar[i] будет меститься сама таблица, но при виводе на экран - прога получает crash, помогите пжл)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 23:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод результата на экран (C++):

Вывод результата - C++
решил такую задачу, мозг кипит, потому прошу: РАЗЪЯСНИТЕ как вывести ответ не просто числа а именно чтобы указывалось значение Z1 и Z2 ...

Вывод результата - C++
Прошу совета. Сперва думал, что где-то в коде ошибка, но потом создал элементарную программу, типа 2+3 и вывел ответ на экран. Естественно...

Вывод результата - C++
Как вывести результат этой программы в excel, чтобы , то что было в черном окошке , выводилось еще и в екселе? #include &quot;stdafx.h&quot; ...

Корректный вывод результата - C++
Здравствуйте, нужна помощь в корректном(красивый, в данном случае) выводе результата на экран. Написал алгоритм Дейкстры #include...

Вывод результата поиска - C++
Программа считывает из файла данные, потом осуществляет поиск по Id - номеру и должна вывести строку с Id, именем, фамилией и пр., но в...

некорректный вывод результата - C++
Суть программы: Пользователь вводит число (например 4), программа печатаем квадрат со сторонами соответственно 4*4 в виде * (звездочек)....

44
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 18:56 #16
ты пишешь в начале char *ar[37]; это ты создаешь массив указателей а не строку

а в этом коде:
Цитата Сообщение от zewer Посмотреть сообщение
Код C++
1
ar[h] = l->ar;
запихаю слово в масив под номер h
ты указываешь этим указателем на эту строку т.е. присваиваешь указателю с индексом[h] из массива указателей адрес строки если я все правильно понял

так вот попробуй в конце там где у тебя ошибка написать
C++
1
2
or (int i = 0; i < m; i++)           /// сдесь ошибка
        cout << (*ar)[i];
вот так
у меня заработало после этого
0
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
21.04.2012, 19:05  [ТС] #17
Цитата Сообщение от Xavier Посмотреть сообщение
ты пишешь в начале char *ar[37]; это ты создаешь массив указателей а не строку

а в этом коде:

ты указываешь этим указателем на эту строку т.е. присваиваешь указателю с индексом[h] из массива указателей адрес строки если я все правильно понял

так вот попробуй в конце там где у тебя ошибка написать
C++
1
2
or (int i = 0; i < m; i++)           /// сдесь ошибка
        cout << (*ar)[i];
вот так
у меня заработало после этого
у меня ничего. Еще меня беспокоит одна проблема, у меня в строках:
C++
1
2
3
4
5
        if (ar[h] == NULL)
        {
            ar[h] = l->ar; // ошибка 
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
проха не заходит в if, т.е. наверное надо брать не char *ar[37]; а char ar[37]; потомучто в масиве походу не будет даже данных
но тогда в :
C++
1
ar[h] = l->ar;
будет ошибка

попробуй вот такой код:

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
#include <conio.h>
#include "iostream"    //////        Варіант:
#include "fstream"     /////    Хеш-ф-ія: 12.   h(key) = [7*(кількість символів в ключі)] % 37;
using namespace std;   /////    Колізія: 14.    методом рехешування з функцією повторного хешування 
                       /////    hi(key) = ( h(key) + p • i^2 ) % m ,  
//#define m 37           /////    де p – послідовність випадкових цілих чисел: p1 = 2, р2 = 5, p3 = 1, р4 = 3,  ... (за потребою, продовжити цей ряд);
 
struct List
{
    char ar[100];
};
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    char ar[37];
    ifstream in("C:\\data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(in && !in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar; // ошибка 
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
            //while (  );
        }
        key = 0;
    }
    in.close();
    for(int i = 0; i < 36; i++)           /// сдесь ошибка
        cout << ar[i];
    return 0;
}
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 19:09 #18
Цитата Сообщение от zewer Посмотреть сообщение
ar[h] = l->ar; // ошибка
конечно ошибка теперь ты создаешь одну строку char ar[37] а потом этим кодом пытаешься запихнуть
в ar[h] (т.е. отдельный 37-ой символ ) целую строку
0
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
21.04.2012, 19:12  [ТС] #19
Цитата Сообщение от Xavier Посмотреть сообщение
конечно ошибка теперь ты создаешь одну строку char ar[37] а потом этим кодом пытаешься запихнуть
в ar[h] (т.е. отдельный 37-ой символ ) целую строку
а как сделать чтоб был масив строк? и по выбраном № строки (тоесть по номере h) и пхать туда слово?
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 19:18 #20
for(int i = 0; i < 36; i++) /// сдесь ошибка
cout << (*ar)[i];
интересно почему у тебя не работает такой вариант потому что создав массив указателей char *ar[37] и указывая отдельным указателем из этого массива на строку ты получаешь массив строк.

Еще есть вариант создать двумерный массив это тоже будет массив строк ar[нужное кол-во строк][37]

У меня вот такой код запускается и не вылетает

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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
struct List
{
    char ar[100];
};
 
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)           
        cout << (*ar)[i];         
}
0
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
21.04.2012, 19:21  [ТС] #21
Цитата Сообщение от Xavier Посмотреть сообщение
for(int i = 0; i < 36; i++) /// сдесь ошибка
cout << (*ar)[i];
интересно почему у тебя не работает такой вариант потому что создав массив указателей char *ar[37] и указывая отдельным указателем из этого массива на строку ты получаешь массив строк.

Еще есть вариант создать двумерный массив это тоже будет массив строк ar[нужное кол-во строк][37]
можете замутить у себя весь код и просмотреть будет ли писать в конечный масив результат? и скинуть весь код, если да) может я что то туплю.
да и текст файла я давал, сделайте пжл, а то у меня не получаеться ))
Kutaev Olexandr Valentynovych 3 7 1993 Kyivstar 0 6 7 1 8 8 9 3 2 8 Lvivska Lviv Tychyny 13 3 IKTA EOM KI-23 21 4 2012
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 19:24 #22
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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
struct List
{
    char ar[100];
};
 
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)
        cout << (*ar)[i];
}
вот этот код полностью работает у меня с теми данными что ты давал
0
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
21.04.2012, 19:25  [ТС] #23
Цитата Сообщение от Xavier Посмотреть сообщение
for(int i = 0; i < 36; i++) /// сдесь ошибка
cout << (*ar)[i];
интересно почему у тебя не работает такой вариант потому что создав массив указателей char *ar[37] и указывая отдельным указателем из этого массива на строку ты получаешь массив строк.

Еще есть вариант создать двумерный массив это тоже будет массив строк ar[нужное кол-во строк][37]

У меня вот такой код запускается и не вылетает

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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
struct List
{
    char ar[100];
};
 
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)           
        cout << (*ar)[i];         
}
у меня вылетает, попобуйте указать адрес файла, и записать в сам файл инфу что я давал, и посмотрите пжл, будет ли работать? и так же дожно вивести какуюту инфу, а не просто работать без ошибки)
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,796
Записей в блоге: 17
21.04.2012, 19:29 #24
Что значит вылетает?
Ошибки какие выдает компилятор?
0
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
21.04.2012, 19:33  [ТС] #25
Цитата Сообщение от Xavier Посмотреть сообщение
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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
struct List
{
    char ar[100];
};
 
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)
        cout << (*ar)[i];
}
вот этот код полностью работает у меня с теми данными что ты давал
а на экран в результате что выводит? эти данные должн розмезаться в масиве по номере h, их розмещает и виводит на экран коректно?

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Что значит вылетает?
Ошибки какие выдает компилятор?
никаких ошибок, просто происходит краш программы

[IMG]http://i081.***********/1204/88/cd28ed68a1a7.jpg[/IMG]
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 19:35 #26
повторюсь вот код все работает
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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
struct List
{
    char ar[100];
};
 
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("C:\\data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)
        cout << (*ar)[i];
}
добавил путь к файлу опять же все норм

прикрепил изображение с тем что выводит
0
Миниатюры
Вывод результата на экран  
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 19:37 #27
Цитата Сообщение от zewer Посмотреть сообщение
никаких ошибок, просто происходит краш программы
попробуй запустить в режиме отладки(debug) оно должно показать где происходит ошибка
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,796
Записей в блоге: 17
21.04.2012, 19:38 #28
zewer, блин так там скорее всего у вас бесконечный цикл из за того что файла нет в нужном месте, а проверку на открытие вы не предусмотрели (хотя я указал вам на эту ошибку!!!)
0
zewer
1168 / 861 / 89
Регистрация: 07.01.2011
Сообщений: 6,211
21.04.2012, 19:39  [ТС] #29
Цитата Сообщение от Xavier Посмотреть сообщение
повторюсь вот код все работает
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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
struct List
{
    char ar[100];
};
 
int main ()
{
    setlocale (LC_ALL,"Ukrainian");
    List *l;
    int h;
    int key = 0;
    int tmp;
    int m = 37;
    char *ar[37];
    ifstream in("C:\\data.txt",ios::in);
    cout << "\t\t\tХеш-таблиця № 1\n";
 
    while(!in.eof())
    {
        cout << "\n\n";
        l = new List [100];
        in >> l->ar;
        cout << "Зчитане слово: " << l->ar;
        while ( l->ar[key] != NULL )
            key++;
        cout << "\nСлово (ключ) мiстить " << key << " слiв\n";
        h = (7*key)%37;
        cout << "\th(key) = " << h << "\n\n";
        if (ar[h] == NULL)
        {
            ar[h] = l->ar;
            cout << "\tСлово занесено у хеш-таблицю\n";
        }
        else
        {
            cout << "Слово не може бути занесеним у хеш-таблицю, оскiльки виявлено колiзiю\n";
        }
        key = 0;
    }
    in.close();
    for (int i = 0; i < m; i++)
        cout << (*ar)[i];
}
добавил путь к файлу опять же все норм

прикрепил изображение с тем что выводит
меня интересует что выводит в самом конце на месте выводу конечного массива с уже расставленными данными
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
21.04.2012, 19:40 #30
Цитата Сообщение от Avazart Посмотреть сообщение
а проверку на открытие вы не предусмотрели
конечно надо проверять открывается ли файл Avazart прав

попробуй написать после открытия файла
C++
1
2
3
if (!in) {
        std::cout<<"Can not open the file!!\n";
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 19:40
Привет! Вот еще темы с ответами:

Неправильный вывод результата - C++
Всем Доброго времени суток, извините за такое название темы, другого не придумал.. Проблема в том, что я не могу понять как вывести...

Вывод дробного результата - C++
как сделать так,чтобы если получается дробный результат он и выводился,а не целое число? #include &lt;iostream&gt; using namespace std; ...

не правильный вывод результата - C++
Доброго времени суток! Возникла проблема мне нужно чтобы программа проверяла, представляют ли элементы введенного с клавиатуры массива...

Считывание строки и вывод результата - C++
Строка является корректным идентификатором, если она содержит только строчные или прописные латинские буквы, цифры, символ &quot;_&quot;, и не...


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

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

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