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

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

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

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

29.08.2010, 15:16. Просмотров 743. Ответов 12
Метки нет (Все метки)

Цикл 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++
Здравствуйте! Помогите, пожалуйста, понять разницу в коде: int b = 5; int a(float(b)); cout &lt;&lt; a &lt;&lt; endl; И int...

Не могу понять разницу в написании - C++
Подскажите, пожалуйста, это равнозначные записи? И в чем вообще смысл варианта 1? int a; 1. int * const &amp;b=a; 2. int *...

Стек на основе массива структур - эт как понять читаю литературу и не могу понять! - C++
Стек статически (на основе массива структур). Пример структура &quot;Товар&quot; которая включает в себя: № по каталогу(ключ), Название, цена, срок...

Не могу сделать полиморфизм. Не могу до конца понять пример по этому поводу - C++
Есть такая задача: Класс Animal должен быть абстрактным, имеет имя и вес. Класс Reptile имеет habitate, который держит в себе среду...

не могу понять - C++
как сделать так чтобы B двигался по массиву? #include&lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int...

не могу понять - C++
есть такой код void addElement(const T&amp; elem){ *(_pointer) = elem; // int t1 = _pointer &lt; &amp;_deque_data; // int t2 =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
29.08.2010, 15:31 #2
Цитата Сообщение от art_z Посмотреть сообщение
цикл do-while не работает:
А по конкретнее?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.08.2010, 15:35 #3
art_z,
Что конкретно не работает?

Добавлено через 27 секунд
Ну вот, опередили)))
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
29.08.2010, 15:37 #4
Хотя, если нужно, чтобы while работал точно также как и for, измени условие
C++
1
while (ch < 'z');
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
29.08.2010, 15:50 #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  [ТС] #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
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
29.08.2010, 21:45 #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  [ТС] #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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.08.2010, 22:05 #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  [ТС] #10
Понял))))))) спс)))

C++
1
cout<<"\n\n"<<"code symbol 16777338: "<<char(16777338);
почему это работает это адрес в памяти тогда или что?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.08.2010, 22:11 #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  [ТС] #12
=)) Теперь доволен))) спасибо ))) я б не понял)))

Добавлено через 12 минут
и на 512 и на 1024...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.08.2010, 22:32 #13
art_z, Но если без юникода то все таки лучше на 128. Если с юникодом на 256. Более не рекомендуется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2010, 22:32
Привет! Вот еще темы с ответами:

не могу понять ошибку - C++
#include &lt;iostream&gt; using namespace std; int main(); { double a=0, b-0, c=0; cout &lt;&lt;&quot;a&quot;; cin &gt;&gt; a; cout &quot;b&quot;...

Не могу понять ошибку - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; int main () { double x,a,d,h,t,e,g,b,c,z,y,s,rezylt; не могу понять чем программе sqrt...

Не могу понять код - C++
Напишите, пожалуйста, что означает каждая строчка кода #include &lt;stdio.h&gt; #include &lt;string.h&gt; char s,t,c1,c2; bool...

Не могу понять синтаксис C++ - C++
как понять данные строки кода, вроде бы наследование, а вроде бы и нет, так как в начале стоит конструктор ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.08.2010, 22:32
Ответ Создать тему
Опции темы

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