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

Не могу понять разницу! do-while - C++

Восстановить пароль Регистрация
 
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
29.08.2010, 15:16     Не могу понять разницу! do-while #1
Цикл for работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <math.h>
#include <conio.h>
 
using namespace std;
 
int main() {
char ch='a';
int alfa[25];
int i=0;
for(i=0;i<=25;i++)
{
    alfa[i]=ch;
    ch++;
}
for(i=0;i<=25;i++)
cout<<char(alfa[i])<<" ";
return 0;
}
цикл do-while не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <math.h>
#include <conio.h>
 
using namespace std;
 
int main() {
char ch='a';
int alfa[25];
int i=0;
do
{
    alfa[i]=ch;
    i++;
    ch++;
} while(ch<='z');
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2010, 15:16     Не могу понять разницу! do-while
Посмотрите здесь:

C++ не могу понять...
C++ Не могу понять ошибку
C++ Не могу понять
C++ Не могу понять
C++ не могу понять
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
29.08.2010, 15:31     Не могу понять разницу! do-while #2
Цитата Сообщение от art_z Посмотреть сообщение
цикл do-while не работает:
А по конкретнее?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.08.2010, 15:35     Не могу понять разницу! do-while #3
art_z,
Что конкретно не работает?

Добавлено через 27 секунд
Ну вот, опередили)))
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
29.08.2010, 15:37     Не могу понять разницу! do-while #4
Хотя, если нужно, чтобы while работал точно также как и for, измени условие
C++
1
while (ch < 'z');
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
29.08.2010, 15:50     Не могу понять разницу! do-while #5
у вас ошибка, массив должен быть alfa[26], так как 26 букв будет, у вас даже в первом коде ошибка int alfa[25] а циклом проходите до 26 элемента for(i=0;i<=25;i++)
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
29.08.2010, 21:17  [ТС]     Не могу понять разницу! do-while #6
Немного модифицировал код:

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
#include <iostream>
#include <math.h>
#include <conio.h>
 
using namespace std;
 
int main() {
char ch='a';
int alfa[25];
int i=0;
for(i=0;i<=25;i++)
{
    alfa[i]=ch;
    ch++;
}
cout<<"Codes: \n\n";
for(i=0;i<=25;i++)
cout<<alfa[i]<<" ";
cout<<"\n\nChars: \n\n";
for(i=0;i<=25;i++)
cout<<char(alfa[i])<<" ";
 
cout<<"\n\n\n"<<"alfa[25]="<<alfa[25];
cout<<"\n\ncode of z is: "<<int('z');
return 0;
}
Результат который я не могу понять:

Codes:

97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
118 119 120 121 16777338

Chars:

a b c d e f g h i j k l m n o p q r s t u v w x y z


alfa[25]=16777338

code of z is: 122

code symbol 16777338: z


Как код символа ‘z’ равен 122, но и 16777338 одновременно??? Почему сбился счет с 121 на 1677733 ??? Кто может объясните я запутался!
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
29.08.2010, 21:45     Не могу понять разницу! do-while #7
Цитата Сообщение от art_z Посмотреть сообщение
Как код символа ‘z’ равен 122, но и 16777338 одновременно??? Почему сбился счет с 121 на 1677733 ??? Кто может объясните я запутался!
Читай пост выше. http://www.cyberforum.ru/showthread.php?p=930880
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
29.08.2010, 22:00  [ТС]     Не могу понять разницу! do-while #8
Цикл начинается с 0, и до 25!!!

(0=a),..,(25=z) !!!

C++
1
2
3
4
5
последние строки кода должны быть:
 
cout<<"\n\n\n"<<"alfa[25]="<<alfa[25];
cout<<"\n\ncode of z is: "<<int('z');
cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
Результат корректный весь алфавит отобразился, но:

C++
1
cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
Результат символ 'z' и для 122 тоже 'z';
как так?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 22:05     Не могу понять разницу! do-while #9
art_z, Альфа должно быть 26...
0,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. Сколько элементов? Вот столько и должно быть в массиве. Последний будет естественно alpha[25], но так как начинается с нуля общее кол-во 26.

По поводу
C++
1
cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
Возникает переполнение типа char который определен то ли -128 127, то ли -127 128. Следовательно при большем будет вызван последний символ. Последний символ является z. Хотя как-то криво объяснил... У z ведь код 122.
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
29.08.2010, 22:09  [ТС]     Не могу понять разницу! do-while #10
Понял))))))) спс)))

C++
1
cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
почему это работает это адрес в памяти тогда или что?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 22:11     Не могу понять разницу! do-while #11
art_z, Переполнение. Но почему z самому интересно. Надо погуглить

C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
   std::cout<<(16777338%128);
   std::cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
}
Проверяйте. 122 остаток от деления 16777338 на 128. Поэтому выводит z. Меняем последнее число в 16777338 на 7 выходит y. И так далее. Всему виной переполнение

Или вот так. Тут остаток от деления на 256. Результат одинаковый

C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
   std::cout<<(16777338%256);
   std::cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
}
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
29.08.2010, 22:30  [ТС]     Не могу понять разницу! do-while #12
=)) Теперь доволен))) спасибо ))) я б не понял)))

Добавлено через 12 минут
и на 512 и на 1024...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2010, 22:32     Не могу понять разницу! do-while
Еще ссылки по теме:

не могу понять C++
Не могу понять, почему? C++
C++ не могу понять

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 22:32     Не могу понять разницу! do-while #13
art_z, Но если без юникода то все таки лучше на 128. Если с юникодом на 256. Более не рекомендуется
Yandex
Объявления
29.08.2010, 22:32     Не могу понять разницу! do-while
Ответ Создать тему
Опции темы

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