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

Некомпилится простой код! - C++

Восстановить пароль Регистрация
 
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
09.02.2012, 23:10     Некомпилится простой код! #1
Привет! Сразу к делу. Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdlib>
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    unsigned long fibo[50];
    fibo[0] = 1;
    fibo[1] = 1;
    char str[1000000] = "11";
    for(int i = 2; i<=50; i++){
            fibo[i] =  fibo[i-1]+fibo[i-2]; 
            strcat(str, (const char *)fibo[i]);    
    }
    
    cout << str <<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Он успешно компилится на dev C++
Выдает segmentation fauled в онлайн-интерпретаторе кода. В компиляторе после запуска сразу "программа не отвечает". В чем же проблема? Уже 2 часа кручу этот жалкий код и никак понять не могу. Заранее благодарю за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2012, 23:10     Некомпилится простой код!
Посмотрите здесь:

Код какой то простой игры в язике С++ C++
Помогите улучшить простой код C++
C++ простой код
Простой код но выдает ошибку C++
WTF не работает простой код на Visual studio 2008(баг?) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_LoneR_
 Аватар для _LoneR_
90 / 90 / 9
Регистрация: 15.01.2011
Сообщений: 494
09.02.2012, 23:18     Некомпилится простой код! #2
Цитата Сообщение от Илларион Посмотреть сообщение
(int argc, char *argv[])
попробуйте убрать со скобок оставив их пустыми. А вы на чём его писали?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
09.02.2012, 23:22     Некомпилится простой код! #3
ошибка в строке с strcat'ом. Операция "(const char*) fibo[i]" вовсе не преобразуют число в строку, как ты это задумал. В си со строками всё несколько сложнее

Добавлено через 51 секунду
Коль скоро ты на Си++ работаешь, то вместо char'ов лучше используй std::string - тебе будет проще и понятнее
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
09.02.2012, 23:32     Некомпилится простой код! #4
for(int i = 2; i <= 49; i++)
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
09.02.2012, 23:37  [ТС]     Некомпилится простой код! #5
Evg, переделал со строками. Стало
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <locale.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    unsigned long fibo[50];
    fibo[0] = 1;
    fibo[1] = 1;
    string str = "11";
    for(int i = 2; i<=50; i++){
            fibo[i] =  fibo[i-1]+fibo[i-2]; 
            str+=fibo[i];    
    }
    
    cout << str <<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Но на выходе выдает какую-то крокозябру, видимо кодировка подкачивает... setlocale не помогает...
Мне-то в общем, нужно все числа Фибоначи записать в одну строку. Решаю просто следующую задачу
9 Цифры Фибоначчи
по мотивам задачи №2 районного тура IX городской олимпиады школьников Санкт-Петербурга по информатике, 1994 г.

Время на тест — 10 секунд.

Все числа Фибоначчи выписали подряд:
1 1 2 3 5 8 13 21 34 55 ...

По данному числу N найдите в этом ряду N-ю цифру.
Входные данные

Единственное натуральное число N<106.
Выходные данные

Цифра с номером N в этом ряду.
Пример входных данных
10
Пример выходных данных
1
Записать эти числа подряд, это один из этапов выполнения алгоритма, а я и на этом застрял пока....
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
09.02.2012, 23:44     Некомпилится простой код! #6
На счет кракозябр
Попробуйте
C++
1
setlocale(0, "rus");
Добавлено через 1 минуту
Ошибка.

Цитата Сообщение от Илларион Посмотреть сообщение
for(int i = 2; i<=50; i++)
Это не верно.
У вас массив объявлен как
Цитата Сообщение от Илларион Посмотреть сообщение
unsigned long fibo[50];
Значит в нем 50 элементов с индексами от 0 до 49ти

Добавлено через 1 минуту
Цитата Сообщение от Илларион Посмотреть сообщение
str+=fibo[i];
И наверное стоит число все таки в символ заделать
Пишите так (хотя точно не уверен. Давно не использовал сишную std. Возможно она берет в += только строки, но не конкретные символы.):
C++
1
str += fibo[i] + '0';
Ну и еще стоит пробел внутрь запихать... Иначе все сольется.
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
09.02.2012, 23:52  [ТС]     Некомпилится простой код! #7
Проблема не в конкатенации оказалось. Написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdlib>
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    unsigned long fibo[50];
    fibo[0] = 1;
    fibo[1] = 1;
    char str[1000000] = "11";
    for(int i = 2; i<=49; i++){
            fibo[i] =  fibo[i-1]+fibo[i-2]; 
            cout << (const char*)fibo[i] <<endl;  
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Ошибка не ушла
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
09.02.2012, 23:57     Некомпилится простой код! #8
Цитата Сообщение от Илларион Посмотреть сообщение
(const char*)fibo[i]
Еще разок прочитайте пост Evg =)
И используйте вот это...

C++
1
cout << fibo[i] + '0' <<endl;
Добавлено через 3 минуты
А хотя нет, я и правда слишком давно не юзал std)
Используйте просто

C++
1
cout << fibo[i] <<endl;
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
09.02.2012, 23:58  [ТС]     Некомпилится простой код! #9
Ура! Вроде как решил! Вы не поверите, но это такой бред оказался!!!
при написании cout << (const char*)fibo[i] <<endl; выдается segment faulture, а при
cout << fibo[i] <<endl; все работает на ура и без ошибок!
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.02.2012, 00:01     Некомпилится простой код! #10
Какая неожиданность!!!
Впредь лучше по-внимательнее читать советы
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
10.02.2012, 00:13  [ТС]     Некомпилится простой код! #11
Ура всем благодарен за помощь! Получил отличный рабочий код!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    unsigned long fibo[50];
    fibo[0] = 1;
    fibo[1] = 1;
    char str[1000000] = "11";
    char str1[1000000];
    for(int i = 2; i<=50; i++){
            fibo[i] =  fibo[i-1]+fibo[i-2]; 
            strcat(str, _ultoa(fibo[i], str1, 10));    
    }
    
    cout << str <<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.02.2012, 00:15     Некомпилится простой код! #12
C++
1
2
3
4
for(int i = 2; i<=50; i++){
            fibo[i] =  fibo[i-1]+fibo[i-2]; 
            strcat(str, _ultoa(fibo[i], str1, 10));    
    }
1) Исправьте таки наконец ВЕРХНЮЮ ГРАНИЦУ СЧЕТЧИКА ЦИКЛА
2) Мдэ...

Не по теме:

3) Только что про внимательность говорили...

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.02.2012, 00:40     Некомпилится простой код! #13
На С
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void){
    unsigned first = 1, second = 1, count = 50, result;
    
    printf("1 1 ");
    while ( count-- > 2 ){ /* 2 числа у нас уже есть */
        result = first + second;
        first = second;
        second = result;
        printf("%u ", result);
    }
    printf("\n");
    
    return 0;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.02.2012, 09:35     Некомпилится простой код! #14
Цитата Сообщение от Илларион Посмотреть сообщение
Получил отличный рабочий код!
Но, к сожалению, нихрена ты не понял о сути ошибки в своём первоначальном примере. А это печально
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
10.02.2012, 11:38  [ТС]     Некомпилится простой код! #15
Цитата Сообщение от Evg Посмотреть сообщение
Но, к сожалению, нихрена ты не понял о сути ошибки в своём первоначальном примере. А это печально
Все прекрасно понял. Неправильно использовал приведение типа. Нужно делать это через функцию, а не явным образом
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.02.2012, 14:25     Некомпилится простой код! #16
Цитата Сообщение от Илларион Посмотреть сообщение
Все прекрасно понял. Неправильно использовал приведение типа. Нужно делать это через функцию, а не явным образом
А почему нужно делать через функцию?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2012, 14:40     Некомпилится простой код!
Еще ссылки по теме:

C++ не компилит простой код c++
C++ Исправить простой код с оператором cout
Есть код, нужно перевести на долее понятливый(простой язык) C++

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
10.02.2012, 14:40     Некомпилится простой код! #17
C++
1
cout << (const char*)fibo[i] <<endl;
fibo[i] - это число.
(char*)fibo[i] - интерпретирует число как адрес символа.
Yandex
Объявления
10.02.2012, 14:40     Некомпилится простой код!
Ответ Создать тему
Опции темы

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