Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции, как правильно делать? Правельный пример функции 
:(
    Опции темы
EmO
  Дата 16.2.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Сижу уже целый день, и не могу найти правильные примеры функций. В многих книгах все примеры не работают.

Вот например:
Код

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    int chislo = 0; // присваиваем переменной значение 0
    cout << "Введите число";
    int a;
    cin >> a;
    return chislo; // возвращаем значение в chislo
}
int vivod()
{
    int v = main(); //берем из функции значения chislo и присваиваем переменной y
    cout << "Ваше число:"<<v; // Выводим на экран число введенное пользователем
    return 0;
}


Ввожу число и окно закрывается. 

В других книгам примеры тоже не рабочие. Может не так надо записывать код? Подскажите пожалуйста, заранее спасибо =)
PM MAIL ICQ   Вверх
azesmcar
Дата 16.2.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(EmO @  16.2.2010,  16:14 Найти цитируемый пост)
Сижу уже целый день, и не могу найти правильные примеры функций. В многих книгах все примеры не работают.

Охренеть, это из какой книги??? smile 

по поводу твоего вопроса, программа работает, просто ты результата не видишь. Добавь в конце system("pause");

Добавлено через 1 минуту и 45 секунд
Наверное неправильно переписал, скорее всего так
Код

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
using namespace std;
int vivod()
{
    setlocale(LC_ALL,"Russian");
    int chislo = 0; // присваиваем переменной значение 0
    cout << "Введите число";
    int a;
    cin >> a;
    return chislo; // возвращаем значение в chislo
}
int main()
{
    int v = vivod(); //берем из функции значения chislo и присваиваем переменной y
    cout << "Ваше число:"<<v; // Выводим на экран число введенное пользователем
    system("pause");
    return 0;
}

PM   Вверх
EmO
Дата 16.2.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Программа, работает, но есть проблема. Я нажимаю например 2 а мне выводит в конце 0.

P.S. А разве есть разница между места main() и vivod()? Ну, где они должны стоять?
PM MAIL ICQ   Вверх
azesmcar
Дата 16.2.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(EmO @  16.2.2010,  16:31 Найти цитируемый пост)
Программа, работает, но есть проблема. Я нажимаю например 2 а мне выводит в конце 0.

а ... ну да smile возвращаешь chislo а вводишь в a.
вот так попробуй
Код

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
using namespace std;
int vivod()
{
    setlocale(LC_ALL,"Russian");
    int chislo = 0; // присваиваем переменной значение 0
    cout << "Введите число";
    cin >> chislo;
    return chislo; // возвращаем значение в chislo
}
int main()
{
    int v = vivod(); //берем из функции значения chislo и присваиваем переменной y
    cout << "Ваше число:"<<v; // Выводим на экран число введенное пользователем
    system("pause");
    return 0;
}


Цитата(EmO @  16.2.2010,  16:31 Найти цитируемый пост)
P.S. А разве есть разница между места main() и vivod()? Ну, где они должны стоять? 

а что, ты еще не успел прочитать про функцию main? А что ты читал?
PM   Вверх
EmO
Дата 16.2.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Спасибо, azesmcar. Читал о main, но так толком и не понял. Надо перечитать smile
PM MAIL ICQ   Вверх
azesmcar
Дата 16.2.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(EmO @  16.2.2010,  16:40 Найти цитируемый пост)
Спасибо, azesmcar. Читал о main, но так толком и не понял. Надо перечитать smile 

что тут может быть непонятного? работа программы должна с чего-то начинаться, она начинается с функции main.
PM   Вверх
EmO
Дата 16.2.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Но функция main тут последняя, в ней программа заканчивает свою работу.
PM MAIL ICQ   Вверх
RatHat
Дата 16.2.2010, 16:54 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



бгыгыгы, ну да, как обычно, примеры в книгах не работают, авторы книг - лопухи, а Страуструп нифига не шарит в С++  smile))

--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
bsa
Дата 16.2.2010, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(EmO @  16.2.2010,  16:52 Найти цитируемый пост)
Но функция main тут последняя, в ней программа заканчивает свою работу.
Функция main() - это та функция, в которую передается управления после запуска программы. Вызов остальных функций нужно делать прямо или косвенно уже из main(). Как только завершается работы функции main() тут же программа тоже прекращает свою работу.

PM   Вверх
EmO
Дата 16.2.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



bsa, спасибо. Теперь я понял =)
PM MAIL ICQ   Вверх
bsa
Дата 16.2.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



EmO, и вообще, в твоей программе нужно подключать только:
Код
#include <iostream> //для std::cin, std::cout, std::endl
#include <clocale> //для std::setlocale
#include <cstdlib> //для std::system

PM   Вверх
EmO
Дата 16.2.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Начал дальше двигаться по функциям и у меня опятьпоявились вопросы и проблемы=)

Вот код функции с аргументом:

Код

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
using namespace std;
double square (double doubleVar) // Находим квадрат числа.
{
    return doubleVar*doubleVar;
}
int sumSequance()//Просим ввести число и находим их квадрат.
{
    int acumulator = 0;
    for(;;)// Создаем бесконечный цикл в котором просим ввести число и получем это число.
    {
    double dValue;
    cout<<"Введите следующие число: ";
    cin>>dValue;
    }
    if(dValue<0)
    {
        break;
    }
    int value = square(dValue);// Находим квадрат
    acumulator = acumulator + value;
}
int main ()// Выводим общую сумму.
    {
        int acumulatedValue;
        do
        {
            cout<<"Введите следующую последовательность";
            acumulatedValue = sumSequance();
            cout<<"\nОбщая сумма равна"<<acumulatedValue<<"\n";
        }
        while (acumulatedValue != 0);
        cout<<"Программа завершена\n";
        system ("pause");
        return 0;
}
}


Мне вылазят ошибки:

Цитата

------ Построение начато: проект: test, Конфигурация: Debug Win32 ------
Компиляция...
test.cpp
c:\documents and settings\admin\мои документы\visual studio 2008\projects\test\test\test.cpp(19) : error C2065: dValue: необъявленный идентификатор
c:\documents and settings\admin\мои документы\visual studio 2008\projects\test\test\test.cpp(21) : error C2043: недопустимый break
c:\documents and settings\admin\мои документы\visual studio 2008\projects\test\test\test.cpp(23) : error C2065: dValue: необъявленный идентификатор
c:\documents and settings\admin\мои документы\visual studio 2008\projects\test\test\test.cpp(40) : error C2059: синтаксическая ошибка: }
c:\documents and settings\admin\мои документы\visual studio 2008\projects\test\test\test.cpp(40) : error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
c:\documents and settings\admin\мои документы\visual studio 2008\projects\test\test\test.cpp(40) : error C2059: синтаксическая ошибка: }
Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm"
test - ошибок 6, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========



Вопрос: Почему не видит dValue, хотя переменная обьявлена?
              Почему недопустимый break? Если не выполнится указаное, то нужно прервать цикл?

PM MAIL ICQ   Вверх
bilbobagginz
Дата 16.2.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Цитата(EmO @  16.2.2010,  21:50 Найти цитируемый пост)
Вопрос: Почему не видит dValue, хотя переменная обьявлена?

у каждой переменной есть "область видимости" (scope)
если переменная определена внутри блока  { .. },
то вне этого блока переменная не существует.
ты определил переменную внутри блока начатого в for(),
и пытаешься после выхода из этого блока ея использовать.
для этого, в твоем случае нужно определить переменную dValue над блоком {}, т.е. внутри блока начавшегося в начале функции sumSequance():
Код

    double dValue; // т.е. НАД блоком {}
    for(;;)// Создаем бесконечный цикл в котором просим ввести число и получем это число.
    {

    cout<<"Введите следующие число: ";
    cin>>dValue;
    }

однако мне не понятна логика создания бесконечного цикла:
данная переменная будет всегда иметь последнее введенное значение... зачем цикл?

P.S.
имя sumSequance - имеет опечатку, правильнее будет sumSequence.



Это сообщение отредактировал(а) bilbobagginz - 16.2.2010, 23:23


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
EmO
Дата 16.2.2010, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2009

Репутация: нет
Всего: нет



Этот код пример из книги,я его пытаюсь понять, но он не компилиться.

А зачем безконечный цикл я сам хочю понять smile

Но, вот почему не допустимый break?
PM MAIL ICQ   Вверх
bsa
Дата 17.2.2010, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



EmO, выкинь книгу. Я тебе дал ссылку на часто задаваемые вопросы, там указаны ПРАВИЛЬНЫЕ КНИГИ, которые проверены не одним человеком.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.