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

Найти количество чисел. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
09.10.2011, 11:02     Найти количество чисел. #1
Добрый день,
помогите пожалуйста составить программу:
Вводятся числа a и b. Найти количество таких чисел в диапазоне [a;b], которые являются точными квадратами.

У меня получилось, что-то вроде этого, ноооо опять же, меня терзают смутные сомнения
Спасибо!

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include<conio.h>
using namespace std;
int main(){
float a,b;
cin >> a >> b;
for(float i=a; i<=b)
 
cout << i << endl;
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 11:02     Найти количество чисел.
Посмотрите здесь:

C++ Задана последовательность из n чисел. Найти количество чисел больше своего номера
Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе C++
Дана последовательность чисел. Найти количество различных чисел в этой последовательности C++
Дана последовательность чисел. Найти количество различных чисел в этой последовательности C++
Дан двумерный массив целых чисел, найти количество чисел, кратных N C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 11:27     Найти количество чисел. #2
Вы свою программу вообще запускали?
Строка
C++
1
for(float i=a; i<=b)
должна выдавать ошибку на этапе компиляции еще, потому что в заголовке цикла for должно быть 3 части, а у вас только 2. Пропущена часть, в которой изменяется i. Даже если вы хотите оставить эту часть пустой, а i менять в теле цикла, все равно должна стоять ;
C++
1
for(float i=a; i<=b ; )
Но скорее всего, у вас оно должно иметь вид
C++
1
for(float i=a; i<=b ; i+=step)
где step - шаг изменения i
И по-моему, по задаче, у вас числа a и b должны быть целыми, i - целое. Тогда можно в качестве изменения i использовать конструкцию ++i. В цикле нужно проверять, что i является точным квадратом, т.е. из него извлекается корень, и только эти числа печатать, а не все
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 11:29     Найти количество чисел. #3
У вас бред какой-то написан.
У меня как-то так получилось
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
 
int main()
{
    int left, right, count = 0;
    std::cin >> left >> right;
    for (int i = sqrt(left) ; i * i <= right ; ++i)
        if ( i * i >= left )
            ++count;
    std::cout << count;
}
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
09.10.2011, 11:41  [ТС]     Найти количество чисел. #4
Цитата Сообщение от diagon Посмотреть сообщение
У вас бред какой-то написан.
У меня как-то так получилось
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
 
int main()
{
    int left, right, count = 0;
    std::cin >> left >> right;
    for (int i = sqrt(left) ; i * i <= right ; ++i)
        if ( i >= left )
            ++count;
    std::cout << count;
}
Я ещё только учусь, вот и бред пока получается
У меня почему-то выдаёт ошибку при компиляции, ругается на строку 8 error C2668: 'sqrt' : ambiguous call to overloaded function
????
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 11:57     Найти количество чисел. #5
Попробуйте так
C++
1
sqrt(1. * left)
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
09.10.2011, 12:11  [ТС]     Найти количество чисел. #6
Цитата Сообщение от diagon Посмотреть сообщение
Попробуйте так
C++
1
sqrt(1. * left)
Вроде бы заработало, а какую команду написать типо
C++
1
getch ();
в таком виде должна быть другая команда?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 12:12     Найти количество чисел. #7
Цитата Сообщение от Mutlu Посмотреть сообщение
Вроде бы заработало, а какую команду написать типо
C++
1
getch ();
в таком виде должна быть другая команда?
Ничего не понял... Какая другая команда? Что вы вообще подразумеваете под командой?
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
09.10.2011, 12:14  [ТС]     Найти количество чисел. #8
Цитата Сообщение от diagon Посмотреть сообщение
Ничего не понял... Какая другая команда? Что вы вообще подразумеваете под командой?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cmath>
#include <stdio.h>
 
int main()
{
    int left, right, count = 0;
    std::cin >> left >> right;
    //for(int i=a; i<=b ; i++)
    for (int i=sqrt(1.*left);i*i<=right;++i)
        if (i>=left);
            ++count;
    std::cout << count;
    getch();
    
    
}
Он ругается, что getch не задекларирован, что не так там?
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 12:19     Найти количество чисел. #9
для getch() нужна библиотека conio.h, а не stdio.h
И в строке
C++
1
if (i>=left);
не нужна ;
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
09.10.2011, 12:38  [ТС]     Найти количество чисел. #10
Цитата Сообщение от aeshes Посмотреть сообщение
для getch() нужна библиотека conio.h, а не stdio.h
ТОЧНО!!!!!
Спасибо!

Добавлено через 18 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;
int main(){
    int left, right, count = 0;
    cin >> left >> right;
    for (int i=sqrt(1.*left);i*i<=right;++i)
            ++count;
    cout << count;
    getch();
}

Не те результаты он выдаёт, что-то он другое считает...
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 12:43     Найти количество чисел. #11
Наверное, я плохо написала
Нужно было не всю строку
C++
1
if (i>=left);
удалить, а только ; из нее
Программа как раз считает число полных квадратов, например, на отрезке [2;17] ответ должен быть 3 (числа 4, 9, 16 - являются полными квадратами чисел 2,3,4 соответственно)
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
09.10.2011, 12:52  [ТС]     Найти количество чисел. #12
Цитата Сообщение от aeshes Посмотреть сообщение
Наверное, я плохо написала
Нужно было не всю строку
C++
1
if (i>=left);
удалить, а только ; из нее
Программа как раз считает число полных квадратов, например, на отрезке [2;17] ответ должен быть 3 (числа 4, 9, 16 - являются полными квадратами чисел 2,3,4 соответственно)
Под числа 2 и 17 подходит, 2 и 25 тоже работает, а если завожу от 0 до 9, по идее должно быть 2, но почему-то выдаёт 4?
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 13:16     Найти количество чисел. #13
потому что подходят числа 0, 1, 4, 9 - полные квадраты 0,1,2,3
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
10.10.2011, 12:00  [ТС]     Найти количество чисел. #14
Цитата Сообщение от aeshes Посмотреть сообщение
потому что подходят числа 0, 1, 4, 9 - полные квадраты 0,1,2,3
С числами 5 и 10 выдаёт почему-то 0?
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
10.10.2011, 15:21     Найти количество чисел. #15
Попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cmath>
#include <conio.h>
 
int main()
{
        int left, right, count = 0;
        std::cin >> left >> right;
        //for(int i=a; i<=b ; i++)
        for (int i=sqrt(1.*left);i*i<=right;++i)
                if (i*i>=left)
                        ++count;
        std::cout << count;
        getch();
        
        
}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.10.2011, 15:25     Найти количество чисел. #16
Цитата Сообщение от Mutlu Посмотреть сообщение
С числами 5 и 10 выдаёт почему-то 0?
А у меня единичку
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diagon@shadeware:~$ cat test.cpp
#include <iostream>
#include <cmath>
 
int main()
{
        int left, right, count = 0;
        std::cin >> left >> right;
        for (int i = sqrt(left) ; i * i <= right ; ++i)
                if ( i * i >= left )
                        ++count;
        std::cout << count;
}
diagon@shadeware:~$ g++ test.cpp
diagon@shadeware:~$ ./a.out
5 10
1
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
10.10.2011, 15:36     Найти количество чисел. #17
diagon, ну да, там в ошибочном варианте было пропущено в условии i*i>=left
После поправки стало тоже 1 писать)
Mutlu
11 / 11 / 1
Регистрация: 26.09.2011
Сообщений: 185
10.10.2011, 17:30  [ТС]     Найти количество чисел. #18
У меня получилось вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;
int main(){
    int a, b, res=0;
    cout << "Please type first number ";
    cin >> a;
    cout << "Please type second number ";
    cin >> b;
    for (int i=a;i<=b;i++) {
    float z=sqrt(1.0*i);
    if (z ==(int) z) res++;}
    cout << res ; 
    
    getch();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2011, 17:45     Найти количество чисел.
Еще ссылки по теме:

В массиве целых чисел найти количество чисел с наименьшим количеством цифр C++
Найти количество двух- и количество трехразрядных чисел в заданной последовательности C++
C++ Найти произведение всех положительных чисел массива, и количество отрицательных чисел

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.10.2011, 17:45     Найти количество чисел. #19
Зачем делать такую проверку
C++
1
2
if (i*i>=left)
       ++count;
в цикле, если один граничный случай можно до цикла обработать, да и цикл совсем не нужен, количество элементов через разность легко найти

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <math.h>
#include <conio.h>
 
int main()
{
        int left, right, count = 0, i;
        std::cin >> left >> right;
        i = sqrt(1.0*left);
        if (i*i >= left)
          ++count;
        count += sqrt(1.0*right) - i;
        std::cout << count;
        getch();
}
Yandex
Объявления
10.10.2011, 17:45     Найти количество чисел.
Ответ Создать тему
Опции темы

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