Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2012, 08:10   #1
PiloD
 
Аватар для PiloD
 
Регистрация: 15.09.2012
Сообщений: 3
По умолчанию Вопрос по (Си) от начинающего №1

Здравствуйте..

Сильно о себе слюней пускать не буду.. 24года родом из Уркаыны...

Я на 70% сис админ.. 4 года работал в этом говне и решил что надо изменять что-то в жизни, ибо тут нет никакого развития.. Кроме новых патчей на свичи и сами свичи.. =/ Не интересно.. Хочу романтики, хочу создавать и смотреть как оно работает =D ...

Уволился нах*р... 5 месяцев отходил марально от 4х лет рабства.. Вот скачал 120 книг по Cи C++ С# и Visual C++ .. Собираюсь выучить это все по очереди.. Знакомых программеров не ахти потому буду старатся вам тут выносить мозг если можно и требовать помощи =D

Сейчас начал с книги: The C programming Language (Brian W. Kernighan, Dennis M. Ritchie)

Первый термоядерный вопрос по Cи;

В чем разнциа между функциями While и For ...

То что через функцию For код более читабельный и его реально меньше.. Понятно... Но на Русском можно услышать их разницу? А то в книге я 5-8 раз перечитал их разницу и пришлось перезагружать мозги =/

Дальше читать не могу/хочу пока не пойму разницу =(


Результат одинаковы в обоих программах..

Пример фунции While:

Код:
#include <stdio.h>

main()
{
    float fahr, celsius;
    int lower, upper, step;

    lower = 0;   /* нижняя граница таблицы температур */ 
    upper = 300; /* верхняя граница */ 
    step = 20;   /* шаг */

    fahr = lower;
    while (fahr <= upper) { 
        celsius = (5.0/9.0) * (fahr-32.0);
        printf(“%3.0f %6.1f\n”, fahr, celsius);
        fahr = fahr + step;
    }
}

Код:
Пример функции For:

#include <stdio.h>

{
    int fahr;
    for (fahr = 0; fahr <= 300; fahr = fahr + 20)
        printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}

Последний раз редактировалось Stilet; 15.09.2012 в 08:38.
PiloD вне форума Ответить с цитированием
Старый 15.09.2012, 08:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но на Русском можно услышать их разницу?
while только проверяет условие, for же имеет секцию инициализации и итерации, в которых что-то инициализируется до выполнения цикла, и скажем увеличивается\уменьшается после выполнения блока цикла т.е. в конце каждой итерации (прохода по циклу)
В Си особой разницы в использовании той или этой конструкции нет. Используй на свой вкус.
Цитата:
и его реально меньше
Да??? Любопытное наблюдение.
Код:
main()
{
    float fahr = 0;
    while (fahr <= 300)         printf(“%3.0f %6.1f\n”, fahr += 20,  (5.0/9.0) * (fahr-32.0));
    
}
По твоему этот код больше чем тот что ты привел с циклом for?
I'm learning to live...

Последний раз редактировалось Stilet; 15.09.2012 в 08:47.
Stilet вне форума Ответить с цитированием
Старый 15.09.2012, 08:49   #3
PiloD
 
Аватар для PiloD
 
Регистрация: 15.09.2012
Сообщений: 3
По умолчанию

Большое спасибо за помошь!

Ойойойоо... Прости прости не заметил что ты изменил код!

Нет не больше.. Но больше чем то что в моем первом посте.. Я же по книге двигаюсь.. А тут приходится судить по тому что показывают =/

Мне главное было услышать в чем их разница.. За что и благодарен!

Последний раз редактировалось PiloD; 15.09.2012 в 09:05.
PiloD вне форума Ответить с цитированием
Старый 15.09.2012, 12:13   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

С технической точки зрения разницы между ними практически нет. Однако, цикл for обычно используется, когда нужно пробежать некоторый интервал из начала в конец (или из конца в начало). Например, пробежать по каждому элементу массива - перебираем все индексы от 0 до N-1. Потом еще увидите, как можно в for пробегать не по числам, а, например, по указателям или итераторам. Но все равно традиционное его применение - пробегать некоторый ряд с четко заданным началом, концом и правилом перехода к следующему объекту из ряда.

Цикл while чаще выбирают, когда мы должны выполнять некоторые действия "до посинения" (или до наступления другого терминального события). Например, пользователь вводит строки одну за другой, мы их обрабатываем, до тех пор, пока он не введет строку "exit". Или нам нужно раскидать элементы массива в случайном порядке. У нас есть исходный массив (например, чисел), есть такой же длины массив для записи результата, и есть еще один массив той же длины с элементами типа bool, в которых мы помечаем, выбран уже был элемент начального массива таким образом или нет. Для каждого элемента итогового массива рандомом генерим индекс элемента исходного, который мы хотим в него поместить, до тех пор, пока не окажется, что этот элемент еще не брали. Ну или то же самое в коде:
Код:
int InArr[N];
int OutArr[N];
bool selected[N];   //По умолчанию все false - ничего не выбрано
for (int i = 0; i < N; ++i)
 {
 int index;
 while (selected[index = rand() % N]);   //Тут даже тело цикла пустое, мы прямо в условии генерируем значение index и тут же проверяем выбранность. По-другому было бы неудобно
 OutArr[i] = InArr[index];
 selected[index] = false;
 }
Принципиально же for можно использовать как while, а while как for.
Код:
for (int i = 0; i < N; ++i)
 {
 dosomething();
 }

int i = 0;
while (i < N)
 {
 dosomething();
 ++i;
 }
Код:
bool flag = false;
while (flag)
 {
 do_something_else();
 }
for (bool flag = false; flag; )
 {
 do_something_else();
 }
Но так обычно никто не делает просто потому, что один больше подходит для одного, другой для другого, да и вообще так принято, и если ваш код будет читать кто-то другой, ему так будет понятнее.
Ну и бонусом - два варианта "бесконечных циклов" (выход из которых производится только вызовом break внутри цикла или закрытием всей программы). Пользуйтесь любым:
Код:
for ( ; ; )
 {
 //...
 }

while (true)
 {
 //...
 }
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос начинающего CarmaC Общие вопросы по Java, Java SE, Kotlin 1 03.12.2011 08:50
Вопрос от начинающего ProGus Microsoft Office Excel 1 10.08.2010 14:30
вопрос по php от начинающего sleeper_Izh PHP 15 11.07.2008 10:19