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

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

Войти
Регистрация
Восстановить пароль
 
Mr.ILLUMINOR
4 / 4 / 0
Регистрация: 13.04.2012
Сообщений: 37
#1

Непонятная задача на массивы из книги Герберта Шилдта - C++

27.12.2012, 10:58. Просмотров 502. Ответов 7
Метки нет (Все метки)

Решил заняться изучением C++. Для этих целей купил себе книгу "C++ для начинающих. Шаг за шагом" автора Герберта Шилдта (2011 год). В ней есть следующая задача на массивы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>;
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    int sqrs[10][2] = { {1,1}, {2,4}, {3,9}, {4,16}, {5,25}, {6,36}, {7,49}, {8,64}, {9,81}, {10,100} }, x, i;
    cout << "Введите число от 1 до 10: ";
    cin >> x;
    for (i=0; i<=10; i++)
    {
        if (sqrs[i][0] == x) break;
        cout << "Квадрат " << x << " равен ";
        cout << sqrs[x][1] << "\n";
    }
    system("pause");
    return 0;
}
Программа должна запрашивать у пользователя число от 1 до 10 и выдавать квадрат этого числа. Не надо писать, что для этого нужно просто умножить введённое число на само себя, ведь то задача для закрепления материала по массивам, поэтому используются именно массивы. Проблема в том, что программа не работает как следует:

http://i52.***********/big/2012/1227/...256e1c702c.jpg

Меня так же интересует почему в условии if написано sqrs[i][0], а при выводе на экран sqrs[x][1]. Почему [0] и почему [1]?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
27.12.2012, 11:07     Непонятная задача на массивы из книги Герберта Шилдта #2
C++
1
2
3
4
5
6
7
8
9
for (i=0; i<10; i++)
{
    if (sqrs[i][0] == x)
    {        
        cout << "Квадрат " << x << " равен ";
        cout << sqrs[i][1] << "\n";
        break;
    }
}
-Индекс должен быть i, а не x.
-break сделай после того, как вывел на экран (или выводи на экран уже после цикла)
-В условии цикла тоже ошибка, выход за пределы массива был.

Добавлено через 1 минуту
Цитата Сообщение от Mr.ILLUMINOR Посмотреть сообщение
Почему [0] и почему [1]?
Потому что создан массив из 10 строк и 2 столбцов. В столбце с индексом 0 - само число, в столбце с индексом 1 - его квадрат.
Alex_La
17 / 17 / 2
Регистрация: 28.06.2010
Сообщений: 77
27.12.2012, 11:10     Непонятная задача на массивы из книги Герберта Шилдта #3
Автор не много видимо ошибся. рабочий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        setlocale(LC_ALL,"Russian");
    int sqrs[10][2] = { {1,1}, {2,4}, {3,9}, {4,16}, {5,25}, {6,36}, {7,49}, {8,64}, {9,81}, {10,100} }, x, i;
    cout << "Введите число от 1 до 10: ";
    cin >> x;
    for (i=0; i<=10; i++)
    {
        if (sqrs[i][0] == x)
        {
        cout << "Квадрат " << x << " равен ";
        cout << sqrs[x-1][1] << "\n";
        }
    }
    system("pause");
х-1 надо при выводе, т.к. отсчет с 0 идет
0 и 1. в памяти массив представляется как:
.... 0 1
-------
0 | 1 1
1 | 2 4
2 | 3 9
...........
основы самые программирования
Mr.ILLUMINOR
4 / 4 / 0
Регистрация: 13.04.2012
Сообщений: 37
27.12.2012, 11:12  [ТС]     Непонятная задача на массивы из книги Герберта Шилдта #4
Спасибо. Обидно, конечно, за ошибки в купленной книге, но за себя сильней обидно. Мог бы и сам разобраться, если бы лучше усвоил масссивы.
Schizorb
27.12.2012, 11:15
  #5

Не по теме:

Mr.ILLUMINOR, странная книга, если в таком маленьком примере по крайней мере 3 косяка..((

WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
27.12.2012, 11:16     Непонятная задача на массивы из книги Герберта Шилдта #6
Может задание - исправить код?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    int sqrs[10][2] = { {1,1}, {2,4}, {3,9}, {4,16}, {5,25}, {6,36}, {7,49}, {8,64}, {9,81}, {10,100} }, x, i;
    cout << "Ââåäèòå ÷èñëî îò 1 äî 10: ";
    cin >> x;
    for (i=0; i<10; i++)
    {
        if (sqrs[i][0] != x) continue;
        cout << "ГЉГўГ*äðГ*ГІ " << x << " Г°Г*ГўГҐГ* ";
        cout << sqrs[i][1] << "\n";
    }
    system("pause");
    return 0;
}
Mr.ILLUMINOR
4 / 4 / 0
Регистрация: 13.04.2012
Сообщений: 37
27.12.2012, 11:27  [ТС]     Непонятная задача на массивы из книги Герберта Шилдта #7
Самое интересное, что данная программа идёт именно как пример работы с двумерными массивами ("C++ для начинающих. Шаг за шагом" Герберта Шилдта, издательства Эком за 2011 год, на странице 160). Будьте осторожны!

Добавлено через 6 минут
А есть ли принципиальная разница между

C++
1
2
3
if (sqrs[i][0] != x) continue;
        cout << "Квадрат " << x << " равен ";
        cout << sqrs[i][1] << "\n";
и (я сделал так)

C++
1
2
3
4
5
if (sqrs[i][0] == x)
        {
            cout << "Квадрат " << x << " равен ";
            cout << sqrs[i][1] << "\n";
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2012, 11:30     Непонятная задача на массивы из книги Герберта Шилдта
Еще ссылки по теме:

Транспортная задача, непонятная ошибка в коде! C++
C++ Объясните работу рекурсивной функции из книги Г. Шилдта
C++ Задача из книги Дейтлов
Задача из книги Страуструпа C++
C++ Задача из книги Страуструпа (4.6.3)

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

Или воспользуйтесь поиском по форуму:
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
27.12.2012, 11:30     Непонятная задача на массивы из книги Герберта Шилдта #8
Результат будет такой же. Но второе логичнее кажется. Только можно добавить break, раз мы число нашли, цикл можно завершить.
Yandex
Объявления
27.12.2012, 11:30     Непонятная задача на массивы из книги Герберта Шилдта
Ответ Создать тему
Опции темы

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