Здравствуйте rex79, Вы писали:
R>если кто может объяснить поподробнее,,,,,,,,,,,,
ну, подробно обьяснять пока что не буду, лучше я тебе код в нормалном виде представлю
#include<stdio.h>
#define ROWS 6
#define CHARS 6
main()
{
int row;
char ch;
for(row=0;row<ROWS;row++) //сначала проходит этот цикл
{
for(ch='A';ch<('A'+CHARS);ch++) //*Затем крутится этот цикл пока не закончится, затем опять выполняется внешний ,увеличивая на 1 row *//
printf("%c",ch);
printf("\n");
}
return 0;
}
#include<stdio.h>
#define ROWS 6
#define CHARS 6
main()
{
int row;
char ch;
for(row=0;row<ROWS;row++) //*сначала проходит этот цикл , выполняется 1 раз, и затем переходит на внутренний *//
{
for(ch='A';ch<('A'+CHARS);ch++) //*Затем крутится этот цикл пока не закончится, затем опять выполняется внешний ,увеличивая на 1 row *//
printf("%c",ch);
printf("\n");
}
return 0;
}
Давай разберем твой код, команду for (кол-во) команда, можно заменить на последовательное выполнение командыкол-во раз. Для данного случая это будет так:
//1-ый ряд for(ch='A';ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
//2-ый ряд for(ch='A';ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
//3-ий ряд for(ch='A';ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
//4-ый ряд for(ch='A';ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
//5-ый ряд for(ch='A';ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
//6-ой ряд for(ch='A';ch<('A'+CHARS);ch++)
printf("%c",ch);
printf("\n");
Теперь можно развернуть каждый внутренний for:
//1-ый ряд
printf("%c",'A'); //первый символ
printf("%c",'B'); //второй символ
printf("%c",'C'); //третий символ
printf("%c",'D'); //четвертый символ
printf("%c",'E'); //пятый символ
printf("%c",'F'); //шестой символ
printf("\n");
(...)
//6-ой ряд
printf("%c",'A');
printf("%c",'B');
printf("%c",'C');
printf("%c",'D');
printf("%c",'E');
printf("%c",'F');
printf("\n");
Здравствуйте Юнусов Булат, Вы писали:
ЮБ>Часто еще путают ROW и COL, причем даже люди у которых с англицким вроде неслабо ЮБ>Идентификаторы меняешь на Y X — понимается легче
(а уж вектор-столбец и вектор-строка... это ваще мрак)
Здравствуйте rex79, Вы писали:
R>Привет мужики.
R>Я учусь программировать на С сам дома(собираюсь постуавть на следующий год)
R>Я тут немогу пешить проимер со вложенными циклами for- янепонимаю как они работают
R>Вот пример с книги
R>#include<stdio.h> R>#define ROWS 6 R>#define CHARS 6 R>main() R>{ R>int row; R>char ch; R>for(row=0;row<ROWS;row++) R>{ R>for(ch='A';ch<('A'+CHARS);ch++) R>printf("%c",ch); R>printf("\n"); R>} R>return 0;
R>прога выдаёт такое
R>ABCDEF R>ABCDEF R>ABCDEF R>ABCDEF R>ABCDEF R>ABCDEF
R>что и требуется......
R>НО я не понимаю как это работает....
R>если кто может объяснить поподробнее,,,,,,,,,,,,
R>большое спосибо[email]rex79 mailru.com[/email]
Мужики,Спосибо большое!!!!!!
Так значит сначало произходит внешний цикл,затем он пригает на внутренний и когда заканчиваеться он снова пригает на внешний OK?
но уменя вчастности возник вопрос с условием второго цикла ch<('A'+CHARS);
Я несовсем его понимаю
Здравствуйте rex79, Вы писали:
R>но уменя вчастности возник вопрос с условием второго цикла ch<('A'+CHARS);
... R>я непонимаю как работает условие.......
Здравствуйте George_Seryakov, Вы писали:
GS>Здравствуйте rex79, Вы писали:
R>>но уменя вчастности возник вопрос с условием второго цикла ch<('A'+CHARS); GS>... R>>я непонимаю как работает условие.......
GS>Приучайся смотреть дебаггером работающий код. Проясняет.
Да смотрел я дебагером-нихрена не понятно.......
он паказывает что проходит первый цикл,и навтором онисполняет условие,,,но непаказывает переход на перыый цикл...
Здравствуйте rex79, Вы писали:
R>>>но уменя вчастности возник вопрос с условием второго цикла ch<('A'+CHARS);
... R>>>я непонимаю как работает условие.......
GS>>Приучайся смотреть дебаггером работающий код. Проясняет.
R>Да смотрел я дебагером-нихрена не понятно.......
Но ты, я надеюсь, понимаешь, что это твоя проблема? Должно быть понятно.
Здравствуйте rex79, Вы писали: R>for(ch='A';ch<('A'+CHARS);ch++) R>я непонимаю как работает условие.......
Сначала ch присваивается 'A', дальше проверяется условие, ch < ('A' + CHARS) Которое по другому можно представить согласно таблицы кодов ASCII так: 65 < (65 + 6)
По таблице ASCII (65 + 6) == ('A' + CHARS) == G == 71(номер кода по таблице ASCII).
Дальше ch++, происходит увеличение на следующую букву и ch становится равной B == 66, и так будет chувеличиваться на 1-у(к примеру согласно таблицы ASCII)пока условие будет верно 65 < (65 + 6) или ch < ('A' + CHARS) .
Здравствуйте rex79, Вы писали:
R>Привет мужики.
R>Я учусь программировать на С сам дома(собираюсь постуавть на следующий год)
R>Я тут немогу пешить проимер со вложенными циклами for- янепонимаю как они работают
R>Вот пример с книги
R>#include<stdio.h> R>#define ROWS 6 R>#define CHARS 6 R>main() R>{ R>int row; R>char ch; R>for(row=0;row<ROWS;row++) R>{ R>for(ch='A';ch<('A'+CHARS);ch++) R>printf("%c",ch); R>printf("\n"); R>} R>return 0;
R>прога выдаёт такое
R>ABCDEF R>ABCDEF R>ABCDEF R>ABCDEF R>ABCDEF R>ABCDEF
R>что и требуется......
R>НО я не понимаю как это работает....
R>если кто может объяснить поподробнее,,,,,,,,,,,,
R>большое спосибо[email]rex79 mailru.com[/email]
Спосибо всем!!!!!!
Прогу вроде как написал
да только хотелось рекамендациибчто и где можно сделать лучше,,,
да и какие допущенны ошибки
R>да вот беда ейчас надо по заданию напечатать примерно таким образом
R>F R>FE R>FED R>FEDC R>FEDCB R>FEDCBA
R>что то не пойму ,как зто сделать,,,,, R>помогите,,
#include <iostream.h>
#include <conio.h>
const R = 7;
void main()
{
clrscr(); //очистка экрана
char ch = 'F';
for(int i=1;i<R;i++)
{
for (int j=ch;j>ch-i;j--)
cout<<char(j); // это вывод на экран
cout<<endl; //перевод каретки на новую строку
}
}
Извини, но я терпеть не могу printf().
Re[2]: Помогите со вложенными циклами!!!!!!!!!!!!
От:
Аноним
Дата:
11.05.02 12:48
Оценка:
Здравствуйте rex79, Вы писали:
R>что то не пойму ,как зто сделать,,,,, R>помогите,,
Уважаемый rex79!
Не сочтите за грубость, но вопросы, которые Вы задаете, мягко сказать, ... ну Вы поняли, да? Непонимание того, о чем Вы спрашиваете свидетельствует о полном нежелании (не исключаю, отсутствие возможности) прочитать самую тоненькую брошурку по С/С++. И раз уж Вам так все терпеливо рассказывают и расставляют по полочкам, мой Вам совет, ставьте людям оценки (это нужно нажать на 1,2 или 3 в заголовке сообщения).
Здравствуйте Аноним, Вы писали:
А>Здравствуйте rex79, Вы писали:
R>>что то не пойму ,как зто сделать,,,,, R>>помогите,,
А>Уважаемый rex79! А>Не сочтите за грубость, но вопросы, которые Вы задаете, мягко сказать, ... ну Вы поняли, да? Непонимание того, о чем Вы спрашиваете свидетельствует о полном нежелании (не исключаю, отсутствие возможности) прочитать самую тоненькую брошурку по С/С++. И раз уж Вам так все терпеливо рассказывают и расставляют по полочкам, мой Вам совет, ставьте людям оценки (это нужно нажать на 1,2 или 3 в заголовке сообщения).
вы конечно правы-я впервом топике темы написал,что учусь я дома посамоучителю,та что понимаете ,что я неочень схватываю тему
А оченки в педь буду ваставлять,коль они имеют для вас большое значение...
R>вы конечно правы-я впервом топике темы написал,что учусь я дома посамоучителю,та что понимаете ,что я неочень схватываю тему R>А оченки в педь буду ваставлять,коль они имеют для вас большое значение...
А по какому самоучителю учишься? Может тебе попалась просто плохая книга? От первой книги какую прочтешь по С++ многое зависит. А вообще-то конечно до таких вещей полезно дойти самому. Кстати, очень правильно советовали пользоваться отладчиком, в частности режимом пошагового выполнения программы. Сразу видно будет, в какой последовательности программа выполняется.
Здравствуйте Аноним, Вы писали:
А>Здравствуйте rex79, Вы писали:
R>>что то не пойму ,как зто сделать,,,,, R>>помогите,,
А>Уважаемый rex79! А>Не сочтите за грубость, но вопросы, которые Вы задаете, мягко сказать, A>... ну Вы поняли, да? Непонимание того, о чем Вы спрашиваете свидетельствует о полном нежелании (не исключаю, отсутствие возможности) прочитать самую тоненькую брошурку по С/С++.
Тут дело, наверное, не в C++. А в отсутствии алгоритмического мышления.
C++ не самый простой язык для изучения. rex79, может тебе сначала попробовать что-нибудь попроще, типа BASIC'a или Pascal'я. Выработать на них навыки составления простых алгоритмов, а уже потом переходить на C++
Re[4]: Помогите со вложенными циклами!!!!!!!!!!!!
От:
Аноним
Дата:
12.05.02 21:19
Оценка:
Здравствуйте rex79, Вы писали:
А>>Уважаемый rex79! А>>Не сочтите за грубость, но вопросы, которые Вы задаете, мягко сказать, ... ну Вы поняли, да? Непонимание того, о чем Вы спрашиваете свидетельствует о полном нежелании (не исключаю, отсутствие возможности) прочитать самую тоненькую брошюрку по С/С++. И раз уж Вам так все терпеливо рассказывают и расставляют по полочкам, мой Вам совет, ставьте людям оценки (это нужно нажать на 1,2 или 3 в заголовке сообщения).
R>вы конечно правы-я впервом топике темы написал,что учусь я дома посамоучителю,та что понимаете ,что я неочень схватываю тему R>А оченки впредь буду ваставлять,коль они имеют для вас большое значение...
Тут есть некоторое недопонимание. Оценки имеют бОльшее значение для тебя, и вот почему:
Когда "Отцы-Основатели" :) создали в форумах систему оценок (баллов, "спасибов", как угодно), они привнесли в форум дух соревновательности и конкуренции. Утверждение может показаться очень спорным, особенно тем, кому оценки действительно не нужны :), но так оно есть. А конкуренция всегда идет на пользу потребителю — тебе. Ставя оценки ты поддерживаешь этот дух, продвигая отвечающих тебе людей в Тор-е. И дело не в игре на человеческом тщеславии, просто... Повисишь в форуме подольше (а это наверное самый лучший в РуНете :super: ) поймешь о чем я.
К модераторам:
Можете стирать этот постинг к чертовой матери, просто так написал.
Re[3]: Помогите со вложенными циклами!!!!!!!!!!!!
От:
Аноним
Дата:
13.05.02 06:52
Оценка:
Здравствуйте Xenia, Вы писали:
R>>да вот беда ейчас надо по заданию напечатать примерно таким образом
R>>F R>>FE R>>FED R>>FEDC R>>FEDCB R>>FEDCBA
R>>что то не пойму ,как зто сделать,,,,, R>>помогите,, X>
X>#include <iostream.h>
X>#include <conio.h>
X>const R = 7;
X>void main()
X>{
X> clrscr(); //очистка экрана
X> char ch = 'F';
X> for(int i=1;i<R;i++)
X> {
X> for (int j=ch;j>ch-i;j--)
X> cout<<char(j); // это вывод на экран
X> cout<<endl; //перевод каретки на новую строку
X> }
X>}
X>
Здравствуйте Xenia, Вы писали:
X>Здравствуйте Аноним, Вы писали:
А>>это вообще не программа на C++ X>Обоснуйте :shuffle:
Инструкция
const R = 7;
неправильная, т.к. в C++ нет больше неявного int. В C99 его тоже нет.
void main() это тоже ошибка и в C и в C++. Функция main() всегда должна возвращать int.
Я не помню, к сожалению, есть ли в стандартной библиотеке заголовок <iostream.h>, но я бы его все-таки не стал использовать.
Здравствуйте Аноним, Вы писали: А>Инструкция А>const R = 7; А>неправильная, т.к. в C++ нет больше неявного int. В C99 его тоже нет. А>void main() это тоже ошибка и в C и в C++. Функция main() всегда должна возвращать int. А>Я не помню, к сожалению, есть ли в стандартной библиотеке заголовок <iostream.h>, но я бы его все-таки не стал использовать.
На счет const — пожалуй вы правы. С остальным не соглашусь. Цитата из MSDN:
Alternatively, the main and wmain functions can be declared as returning void (no return value). If you declare main or wmain as returning void, you cannot return an exit code to the parent process or operating system using a return statement; to return an exit code when main or wmain are declared as void, you must use the exit function
А вот пример от туда же:
The following example shows how to use the argc, argv, and envp arguments to main:
[code] #include <iostream.h>
#include <string.h> void main( int argc, char *argv[], char *envp[] )
{
int iNumberLines = 0; // Default is no line numbers.
// If more than .EXE filename supplied, and if the
// /n command-line option is specified, the listing
// of environment variables is line-numbered.
// Walk through list of strings until a NULL is encountered.
for( int i = 0; envp[i] != NULL; ++i )
{
if( iNumberLines )
cout << i << ": " << envp[i] << "\n";
}
}
[\code]
Что касается iostream.h, то лично я не понимаю, почему бы его не использовать. Он есть и в Borland C++ и в VC++. И вот что по этому поводу написано у Пауля Киммела (точная цитата):
...Теперь рассмотрим, что случится, когда мы захотим напечатать целое число. Вот версия С:
int num = 10;
printf("%d",num); А вот эквивалент С++:
int num = 10;
cout<<num;
Здравствуйте Xenia, Вы писали:
X>На счет const — пожалуй вы правы. С остальным не соглашусь. Цитата из MSDN:
X>Alternatively, the main and wmain functions can be declared as returning void (no return value). If X>...
MSDN описывает нестандартные особенности (расширения) компилятора VC. 'void main' — одно из таких расширений. С точки зрения С и С++ объявление функци 'main' с типом возврата 'void' — некорректно.
X>Что касается iostream.h, то лично я не понимаю, почему бы его не использовать. Он есть и в Borland C++ и в VC++. И вот что по этому поводу написано у Пауля Киммела (точная цитата): X>...Теперь рассмотрим, что случится, когда мы захотим напечатать целое число. X>Вот версия С: X>int num = 10; X>printf("%d",num); X>А вот эквивалент С++: X>int num = 10; X>cout<<num;
Здравствуйте Андрей Тарасевич, Вы писали:
АТ>MSDN описывает нестандартные особенности (расширения) компилятора VC. 'void main' — одно из таких расширений. С точки зрения С и С++ объявление функци 'main' с типом возврата 'void' — некорректно.
А на что это влияет? Мне теперь уже интересно. Серьезно.
АТ>И где же здесь 'iostream.h' ???
Он тут подразумевается. Еще одна цитата из Киммела:
Объекты cin и cout — это экземпляры классов istream_withassign и ostream_withassign соответственно. Это означает, что где-то существуют спецификация этих классов и определение этих двух объектов. Это "где-то" находится в заголовочном файле iostream.h Включив его (директивой #include) в программу, вы даете ей возможность осуществлять ввод-вывод.
По моему, библиотеки для того и существуют, чтобы облегчить жизнь программисту, и их использование не является отступлением от правил языка. Иначе можно до маразма дойти. И кстати, у то Киммела во ВСЕХ примерах main возвращает void.
Здравствуйте Xenia, Вы писали:
АТ>>MSDN описывает нестандартные особенности (расширения) компилятора VC. 'void main' — одно из таких расширений. С точки зрения С и С++ объявление функци 'main' с типом возврата 'void' — некорректно. X>А на что это влияет? Мне теперь уже интересно. Серьезно.
На портабельность проекта, разумеется. MSVC проглотит и вернет системе 0. Другой компилятор выдаст предупреждение и вернет системе мусор. Третий компилятор вообше откажется компилировать.
АТ>>И где же здесь 'iostream.h' ??? X>Он тут подразумевается. Еще одна цитата из Киммела: X> X>Объекты cin и cout — это экземпляры классов istream_withassign и ostream_withassign соответственно. Это означает, что где-то существуют спецификация этих классов и определение этих двух объектов. Это "где-то" находится в заголовочном файле iostream.h Включив его (директивой #include) в программу, вы даете ей возможность осуществлять ввод-вывод. X> X>По моему, библиотеки для того и существуют, чтобы облегчить жизнь программисту, и их использование не является отступлением от правил языка. Иначе можно до маразма дойти.
Объекты 'cin' и 'cout' в С++ — это экземпляры класс-типов 'istream' и 'ostream'. Которые, в свою очередь, являются typedef-ами для специализаций шаблонов 'basic_istream' и 'basic_ostream'. Описаны эти экземпляры в загловочном файле <iostream>. Именно <iostream>, а не <iostream.h>. А <iostream.h> — это один из заголовочных файлов старинной версии I/O билиотеки С++, которая была выброшена на свалку и заменена нынешней ее версией. Нет больше в библиотеке С++ файла <iostream.h>. Об этом, собственно, и речь.
X>И кстати, у то Киммела во ВСЕХ примерах main возвращает void.
Тем хуже для Киммела.
Best regards,
Андрей Тарасевич
Re[9]: Помогите со вложенными циклами!!!!!!!!!!!!
От:
Аноним
Дата:
15.05.02 05:13
Оценка:
Здравствуйте Xenia, Вы писали:
X>Здравствуйте Андрей Тарасевич, Вы писали:
АТ>>MSDN описывает нестандартные особенности (расширения) компилятора VC. 'void main' — одно из таких расширений. С точки зрения С и С++ объявление функци 'main' с типом возврата 'void' — некорректно. X>А на что это влияет? Мне теперь уже интересно. Серьезно.
На переносимость. Дело в том, что в C и в C++ main() всегда должна была возвращать int, с первого дня существования этих языков. Например компилятор g++ (по карайней мере последняя версия) выдает сообщение об ошибке, когда видит void main().
АТ>>И где же здесь 'iostream.h' ??? X>Он тут подразумевается. Еще одна цитата из Киммела: X> X>Объекты cin и cout — это экземпляры классов istream_withassign и ostream_withassign соответственно. Это означает, что где-то существуют спецификация этих классов и определение этих двух объектов. Это "где-то" находится в заголовочном файле iostream.h Включив его (директивой #include) в программу, вы даете ей возможность осуществлять ввод-вывод. X> X>По моему, библиотеки для того и существуют, чтобы облегчить жизнь программисту, и их использование не является отступлением от правил языка. Иначе можно до маразма дойти. И кстати, у то Киммела во ВСЕХ примерах main возвращает void.
Давным-давно этот заголовок действительно назывался iostream.h. Но потом его переименовали в iostream. Это было связано с тем, что теперь все имена стандартной библиотеки находятся в пространстве имен std, а раньше этого не было. Если изменилось поведение, должно было измениться и имя.
Что касается цитат из книг, то существует огромное количество книг по C++, которые либо устарели, либо написаны людьми, которые сами плохо знают C++, либо и то и другое одновременно. А с тем, что нужно пользоваться библиотеками, никто не спорит.
Кстати, в стандарте ничего не сказано о том, как должны быть реализованы стандартные заголовки. Поэтому называть iostream заголовочным файлом тоже неверно.