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

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

Войти
Регистрация
Восстановить пароль
 
Bloodshed
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 18
#1

Функция void - C++

12.11.2013, 02:55. Просмотров 515. Ответов 10
Метки нет (Все метки)

Составить функцию типа void для решения представленной ниже задачи:
Определить является ли число простым. формальные параметры - число и признак, который равен 1,если число простое, и 0, если иначе.
Вот мой код ,но он как-то неправильно работает с двузначными числами:
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
#include <iostream>
#include <math.h>
using namespace std;
void F1(int n)
{   
    
     float end = sqrt((float)n);
     
     for (int i=2; i <= end; ++i) {
        if (n%i == 0) {
        cout << "Число не простое" << endl;   
        }
        else cout << "Число простое" << endl;
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n;
    cin>>n;
    F1(n);
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 02:55     Функция void
Посмотрите здесь:

Функция void - C++
Составить функцию типа void для решения представленной ниже задачи: Определить является ли число простым. формальные параметры - число и...

Что делает функция void gotoxy? - C++
Объясните, пожалуйста, что делает эта функция и что делает каждая строка. void gotoxy(short x,short y) { COORD Coor; ...

Функция с указателем на void** не получается вернуть данные? - C++
Здорова! Есть код: #include &lt;iostream&gt; using std::cout; struct IMotion { virtual int&amp; get_val()=0; };

Указатели на функцию. Задача 2: функция предикат с void указателем - C++
Сумму элементов массива, лежащих в пределах (a &lt;b)

Что и почему дописать в int main() чтобы функция void вернула значение - C++
Что и почему дописать в int main() чтобы функция void вернула значение? #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream.h&gt;...

Ошибка компиляции: error C2562: main: функция типа "void" - C++
Возникла проблема, при компиляции выдает ошибку &quot;1&gt;c:\users\user\documents\visual studio 2012\projects\lab1\lab1\lab1.cpp(30): error C2562:...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,055
12.11.2013, 03:19     Функция void #2
как то так :-D
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
int F1(int n)
{
    int result = 1;
    int end = (int)floor(pow((float)n,.5));
    for (int i=2; i <= end; ++i) 
    {
        if (n%i) 
        {
            result=0;
            break;
        }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n;
    cin>>n;
    if (F1(n) == 0) 
    {
        cout << "Число не простое" << endl;
    }
    else cout << "Число простое" << endl;
    return 0;
}
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
12.11.2013, 03:30     Функция void #3
насчёт исходного задания - формальным параметром грубо говоря считается объявление (для твоего примера привожу):

C++
1
2
3
4
5
6
...
void F1(int a);
 
void F1(int n)
{
....
но, читаем дальше фразу "формальные параметры - число и признак"

тут не спроста множественное число, а у тебя только один параметр и тот фактический, а не формальный, нужно задать и второй, хотя бы типа bool

далее - насчёт самой задачи в этой реализации, только в одном я не уверен, чисто математическое мышление мне подсказало что вместо "i<=end" надо "i <= ceil(end)" но тут я сильно не уверен, в общем лучше уточните, то откуда вы это содрали, но в любом случае это максимум на одну итерацию больше и на сложность алгоритма никак не влияет, так что я бы поменял, насчёт самой функции - всё очевидно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void F1(int n)
{   
    float end = sqrt((float)n);
 
    for (int i=2; i <= ceil(end); ++i)
    {
    if (n%i == 0) {
    cout << "not prost" << endl;
    break; 
    }
    else cout << "prost" << endl;
    break;
}
}
но это только ответ на то, почему у вас не работает на больших числах сия фигня)
она вам вообще не пригодится если в F1 таки задать именно формальные параметры, а не просто int n
Сергей Т.
2 / 2 / 0
Регистрация: 29.05.2012
Сообщений: 7
12.11.2013, 03:31     Функция void #4
Проверка числа на простоту
Вот еще вариант. Здесь только приведение типов дописать в sqrt надо
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
12.11.2013, 03:34     Функция void #5
агерон
Цитата Сообщение от агерон Посмотреть сообщение
как то так :-D
...
[/CPP]
вы меня удивили, задание то читали??? прочитайте первую строчку задания)))
Составить функцию типа void для решения представленной ниже задачи
и пишете
int F1(int n)
да, отличный void
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,055
12.11.2013, 03:54     Функция void #6
abit, о хосподи.... :-D, а ты понятие вариативности решения знаешь или как??
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
 
#include <iostream>
#include <math.h>
 
using namespace std;
 
void F1(int n, int &flag)
{
    flag = 1;
    int end = (int)floor(pow((float)n,.5));
    for (int i=2; i <= end; ++i) 
    {
        if (n%i==0) 
        {
            result=0;
            break;
        }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n, flag;
    cin>>n;
   F1(n, &flag);
    if (flag == 0) 
    {
        cout << "Число не простое" << endl;
    }
    else cout << "Число простое" << endl;
    return 0;
}
придирок больше не предвидится?
P. S. запомни каждый имеет право на ошибку и мало того код писался в Notepad++ т. к. подобные задачи не решал уже лет 5, а студию с С++ подымать на виртуалке ради 5 строк кода не имело смысла
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
12.11.2013, 04:09     Функция void #7
агерон
а не хосподи, я антитеист,
во первый тема называлась функция void, что тут можно было ожидать)))
и сразу приступлю к разбору Вашего решения... только ради смеха, не более
1) где формальные параметры
C++
1
2
3
using namespace std;
 
void F1(int n, int &flag)
я вижу только фактические в объявлении функции
2) зачем int &flag а не bool &flag
3) нафиг сия конструкция
C++
1
2
3
for (int i=2; i <= end; ++i) 
    {
        if (n%i)
тут же очевидно проще
4)
C++
1
2
result=0;
break;
это тихий ужас, убрать смело, видимо FPC навеял, я не знаю как вы это придумали, но всё же это нереально в станадртах C++, у нас есть как бы flag а не неизвестный result

продолжать не буду, да и вообще у меня не студии ни нотепада не было никогда)))
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,055
12.11.2013, 04:51     Функция void #8
кхм... видимо ты из тех кто на изуть знает все стандарты С++ ?, знаешь теперь я разберу твои "разборы"

1) функции "void" в стандарте не существует есть возвращаемое значение "void"
2) формальные определения функции именно в данном случае - зло т. к. загромождают код и мешает его восприятию
3) typedef bool смотрел?
4) ошибка, исправил, но если учитывать что данное дело я вообще писал как бы без компилятора...
5) повторюсь писалось без компилятора, компилятор на раз такие штуки вылавливает

будешь еще искать ошибки в 20 строчках кода? если да то могу тебе подкинуть на аудит такую конструкцию
C++
1
2
3
4
void F2(char* s1, char *s2)
{
    while (*s1++=*s2++);
}
смело указывай мои ошибки :-DDDD
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
12.11.2013, 05:54     Функция void #9
агерон,
Не ругайся)
стандартов наизусть я не знаю конечно
1) про функцию void не я придумал, это название темы, понятно что её не существует, просто я не взял в кавычки))) и кстати сейчас специально для тебя возьму твой текст:
Цитата Сообщение от агерон Посмотреть сообщение
на изуть
пишется слитно - наизусть, слова изусть не существует, как и функции void, это была цитата, как и цитата названия темы, и твоего несуществующего слова
2) по заданию парню надо формальное определение, ты его не сделал в своём решении, опыть же не я придумал
3) смотрел и у тебя в коде не увидел, да и вообще bool и int битово разные вещи
4) я вообше компилятором пользуюсь редко, у меня кстати что дома, что на работе linux и никаких студий и нотепадов нет, более скажу - то, что я написал всегда компилируется и работает, научился от haskell писать корректный код для компилятора
5) повторю - haskell меня приучил писать код сходу, никаких компиляторов не надо)

и нет, не буду) я поглядел на это и понял, что бесполезно))) тут не серьёзный код
Bloodshed
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 18
12.11.2013, 06:52  [ТС]     Функция void #10
[QUOTE=агерон;5322389]abit, о хосподи.... :-D, а ты понятие вариативности решения знаешь или как??
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
 
#include <iostream>
#include <math.h>
 
using namespace std;
 
void F1(int n, int &flag)
{
    flag = 1;
    int end = (int)floor(pow((float)n,.5));
    for (int i=2; i <= end; ++i) 
    {
        if (n%i==0) 
        {
            result=0;
            break;
        }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n, flag;
    cin>>n;
   F1(n, &flag);
    if (flag == 0) 
    {
        cout << "Число не простое" << endl;
    }
    else cout << "Число простое" << endl;
    return 0;
}
придирок больше не предвидится?
P. S. запомни каждый имеет право на ошибку и мало того код писался в Notepad++ т. к. подобные задачи не решал уже лет 5, а студию с С++ подымать на виртуалке ради 5 строк кода не имело смысла[/Q

Спасибо, но ошибки в строке result=0;, F1(n, &flag); и в void F1(int n, int &flag) выдаёт

Добавлено через 1 минуту
Цитата Сообщение от агерон Посмотреть сообщение
abit, о хосподи.... :-D, а ты понятие вариативности решения знаешь или как??
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
 
#include <iostream>
#include <math.h>
 
using namespace std;
 
void F1(int n, int &flag)
{
    flag = 1;
    int end = (int)floor(pow((float)n,.5));
    for (int i=2; i <= end; ++i) 
    {
        if (n%i==0) 
        {
            result=0;
            break;
        }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n, flag;
    cin>>n;
   F1(n, &flag);
    if (flag == 0) 
    {
        cout << "Число не простое" << endl;
    }
    else cout << "Число простое" << endl;
    return 0;
}
придирок больше не предвидится?
P. S. запомни каждый имеет право на ошибку и мало того код писался в Notepad++ т. к. подобные задачи не решал уже лет 5, а студию с С++ подымать на виртуалке ради 5 строк кода не имело смысла
Спасибо, но ошибки в строке result=0;, F1(n, &flag); и в void F1(int n, int &flag) выдаёт
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 05:28     Функция void
Еще ссылки по теме:

Исправить ошибку error C2562: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...

Функции, ошибка C2562: tabl: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...

void - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; //using namespace std; void main(void) { char alphabet; //33 буквы плюс NULL NULL...

void - C++
Объясните пожалуйста как работает спецификатор тип void в функии когда он употребляется вкачестве имени типа... Добавлено через 1...


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

Или воспользуйтесь поиском по форуму:
abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.11.2013, 05:28     Функция void #11
Bloodshed,
суть в этом:
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
#include <iostream>
#include <сmath>
 
using namespace std;
 
void F1(int n, char &flag);
 
void F1(int n, char &flag)
{
    flag = 1;
    if (n==1) {return;}
    else if (n==2) {flag=0; return;}
    else if (n==3) {flag=0; return;}
    else if (n==4) {return;}
        else if (n==5) {flag=0; return;}
        else if (n==6) {return;}
    else
    {
    int end = (int)floor(pow((float)n,.5))+1;
    for (int i=2; i < end; ++i) 
    {
        if (n%i==0)  {flag=0; return;}
    }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int n;
    char flag;
    cin>>n;
    F1(n, flag);
    if (flag == 1) 
    {
        cout << "Число не простое" << endl;
    }
    else cout << "Число простое" << endl;
    return 0;
}
это рабочий код с небольшими допущениями
разбирайся и упрощай)
Yandex
Объявления
15.11.2013, 05:28     Функция void
Ответ Создать тему
Опции темы

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