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

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

Войти
Регистрация
Восстановить пароль
 
 
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
#1

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

09.02.2012, 23:10. Просмотров 882. Ответов 16
Метки нет (Все метки)

Привет! Сразу к делу. Вот код
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 часа кручу этот жалкий код и никак понять не могу. Заранее благодарю за помощь!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2012, 23:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некомпилится простой код! (C++):

простой код - C++
В книге Герберта Шилдта код первой программы выглядит так #include &lt;iostream&gt; using namespace std; int main() { ...

Объясните простой код - C++
int a = (b = 5, b + 5); что это за запись такая.

не компилит простой код c++ - C++
Вот этот код не компилится. Почему, ума не прилажу :-( Подскажите в чём проблема? Английский ещё плохо знаю, не посылайте плиз на...

Помогите улучшить простой код - C++
Задача: Из-за высокой цены бензина водители озабочены затратами топлива своих аытомобилей. Один водитель взял в рейс несколько емкостей...

Простой код но выдает ошибку - C++
Почему у меня не видет вторую переменную day #include &lt;math.h&gt; #include &lt;iostream&gt; using namespace std; void main() { int...

Код какой то простой игры в язике С++ - C++
Кто может скиньте пожалуйста код какой то простой игры в язике С++. Пожалуйста.

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

Добавлено через 51 секунду
Коль скоро ты на Си++ работаешь, то вместо char'ов лучше используй std::string - тебе будет проще и понятнее
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
09.02.2012, 23:32 #4
for(int i = 2; i <= 49; i++)
0
Илларион
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
Записать эти числа подряд, это один из этапов выполнения алгоритма, а я и на этом застрял пока....
0
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';
Ну и еще стоит пробел внутрь запихать... Иначе все сольется.
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;
}
Ошибка не ушла
0
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;
0
Илларион
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; все работает на ура и без ошибок!
0
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.02.2012, 00:01 #10
Какая неожиданность!!!
Впредь лучше по-внимательнее читать советы
0
Илларион
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;
}
0
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) Только что про внимательность говорили...

0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 947
Регистрация: 25.07.2009
Сообщений: 10,707
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;
}
0
Evg
Эксперт CАвтор FAQ
17808 / 6014 / 388
Регистрация: 30.03.2009
Сообщений: 16,528
Записей в блоге: 26
10.02.2012, 09:35 #14
Цитата Сообщение от Илларион Посмотреть сообщение
Получил отличный рабочий код!
Но, к сожалению, нихрена ты не понял о сути ошибки в своём первоначальном примере. А это печально
0
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
10.02.2012, 11:38  [ТС] #15
Цитата Сообщение от Evg Посмотреть сообщение
Но, к сожалению, нихрена ты не понял о сути ошибки в своём первоначальном примере. А это печально
Все прекрасно понял. Неправильно использовал приведение типа. Нужно делать это через функцию, а не явным образом
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2012, 11:38
Привет! Вот еще темы с ответами:

Нужно написать код к простой функции - C++
Нужно написать код для функции: у=sin(x)*cos(x)-3x^2

Исправить простой код с оператором cout - C++
Добрый день! Помогите пожалуйста исправить ошибки в этом коде. Изучаю С++ совсем недавно и ещё не все ошибки могу разобрать, т.к....

Простой калькулятор: Не работает код, как это исправить? - C++
Здравствуйте! Вот имеется такой код, взят отсюда, https://code-live.ru/post/cpp-variables-and-datatypes/#more и он как бы получается не...

Есть код, нужно перевести на долее понятливый(простой язык) - C++
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #define N1 8 #define N2 9 bool isascend(int* pn, int n); int main() ...


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

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

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