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

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

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

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

27.12.2012, 10:58. Просмотров 578. Ответов 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 и выдавать квадрат этого числа. Не надо писать, что для этого нужно просто умножить введённое число на само себя, ведь то задача для закрепления материала по массивам, поэтому используются именно массивы. Проблема в том, что программа не работает как следует:



Меня так же интересует почему в условии if написано sqrs[i][0], а при выводе на экран sqrs[x][1]. Почему [0] и почему [1]?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 10:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятная задача на массивы из книги Герберта Шилдта (C++):

Книги Герберта Шилдта - C++
Здравствуйте! Закончил 1 курс, по программированию на С++ остановились на классах, наследовании и пр. для дальнейшего изучения языка хочу...

Не работает программа из книги Герберта Шилдта. - C++
Подскажите и мне тоже из этой книги не работает программа. #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include&lt;conio.h&gt; using namespace...

Не работает программа из книги Герберта Шилдта. - C++
При вводе кода из вышеупомянутой книги, выдает 3 ошибки: 1) error C2440: '=' : cannot convert from 'char ' to 'char' 2)error C2446:...

Какую именно книгу Герберта Шилдта стоит прочитать? - C++
Хотел узнать какую именно книгу нужно почитать у такого автора как Г.Шилдт(у него их много по с++)и какие лучше не читать? Плюсом было бы...

Книги Г.Шилдта в каком порядке нужно или какие книги для изучения с++ - C++
Скажите в каком порядке надо читать книги Г.Шилдта для изучения с++ . Возможно сначала придется с учить , или как лучше ? Или подскажите...

Книги Шилдта - C++
Скажите пожалуйста в чем разница между двумя его книгами: -&quot;Самоучитель С++&quot; -&quot;С++. Базовый курс&quot; Желательно мнение читавших. А...

7
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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 - его квадрат.
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
...........
основы самые программирования
1
Mr.ILLUMINOR
4 / 4 / 0
Регистрация: 13.04.2012
Сообщений: 37
27.12.2012, 11:12  [ТС] #4
Спасибо. Обидно, конечно, за ошибки в купленной книге, но за себя сильней обидно. Мог бы и сам разобраться, если бы лучше усвоил масссивы.
0
Schizorb
27.12.2012, 11:15
  #5

Не по теме:

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

1
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;
}
1
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";
        }
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
27.12.2012, 11:30 #8
Результат будет такой же. Но второе логичнее кажется. Только можно добавить break, раз мы число нашли, цикл можно завершить.
1
27.12.2012, 11:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2012, 11:30
Привет! Вот еще темы с ответами:

Кто читал книги Г. Шилдта, отзовитесь - C++
Вообщем случайно забрел в книжный и там купил &quot;Полный справочник по С++ Г. Шилдт&quot;. Пришел домой решил почитать мнения людей о этой книге, я...

Чем отличаются между собой 3 книги Шилдта по С++? - C++
Читаю сейчас его книгу &quot;Руководство для начинающих&quot;, дальше хотел прочитать ещё его две книги &quot;Базовый курс&quot; и &quot;Полный справочник&quot;. Но не...

Указатели на структуры. Программа-пример из книги Шилдта - C++
Здравствуйте. Прошу проверить, правильно ли я поняла значение каждой строчки, т.к. в книге построчного объяснения не дается. Еще хотелось...

Объясните работу рекурсивной функции из книги Г. Шилдта - C++
Здравствуйте.Вопрос такой ,самостоятельно изучаю с++ по книге Герберта Шилда,дошел до темы рекурсия ,в книге есть такой пример: #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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