что такое переменная счетчик
Персональная страничка
Диканева Тараса
Викторовича
8.1. Переменные счетчики
Часто требуется подсчитать, сколько раз во время вычислений наступает то или иное событие (выполняется то или иное условие). Для этого вводится вспомогательная переменная, которой в начале присваивается нулевое значение, а после каждого наступления события она увеличивается на единицу.
Пример 1. Пользователь вводит 10 чисел. Определить, сколько из них являются одновременно четными и положительными.
Пример 2: Пользователь вводит 10 чисел. Проверить, упорядочены ли они по возрастанию.
В разделе, посвященном переменным флагам, эта задача решена с помощью логической переменой. Решим ее теперь с помощью счетчика. Последовательность будет упорядочена, если нет ситуаций, когда последующее число меньше предыдущего. Подсчитаем количество таких ситуаций, и если оно окажется нулевым, то последовательность упорядочена.
Пример 3. Вычисление площади сложных фигур методом Монте-Карло.
Метод Монте-Карло позволяет приближенно подсчитать площадь произвольной плоской фигуры. Для этого плоскую фигуру следует поместить внутрь простой, площадь которой легко подсчитать (например, внутрь квадрата). Затем следует случайным образом генерировать координаты точек так, чтобы они с равной вероятностью оказывались в любом месте квадрата. При этом следует подсчитать, какая доля случайных точек окажется внутри фигуры. При достаточно большом числе точек отношение количества точек, попавших внутрь фигуры, к общему количеству будет равно отношению площадей фигуры и квадрата.
Как стать программистом
Обучение основам программирования на C для чайников.
Страницы
Последние новости
YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy
Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4
Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS
воскресенье, 20 ноября 2011 г.
Занятие 7.Циклические конструкции. Цикл со счетчиком for.Уроки программирования для чайников.Язык Си.
Прочитайте улучшенную версию этого урока «Цикл со счётчиком for».
Здесь записано условие при котором будет выполняться тело цикла. Т.е. цикл будет работать пока условие истинно. Например:
Здесь записывается как изменяется переменная-счетчик после каждого выполнения тела цикла. Например:
Начнем с 4 строки, всё остальное вам уже должно быть ясно после ознакомления с предыдущими уроками.
Изначально имеется программа (код юзера Dispose, с моими небольшими изменениями):
Листинг 7.6
Если теперь запустить нашу полученную программу то можно посмотреть, какое окончание прибавляет программа к какому количеству коров.
Иллюстрация работы программы листинг 7.8 |
Напоследок хочу заметить что тело цикла может содержать в себе другие циклы, т.е. могут быть вложенные циклы.И опять же советую вам использовать в теле цикла составной оператор.
На этом на сегодня всё.
Резюме урока:
81 комментарий :
Видимо для for сложно какое либо задание придумать.
Суета, мой милый друг, суета.=) Всё будет, обязательно.
Добрый день!
«Напоследок хочу заметить что тело цикла может содержать в себе другие циклы, т.е. могут быть вложенные циклы.»
процитировал Ваши выкдадки. А если без вложенных циклов не обойтись?
Нам задали вот такую задачу: надо построить равнобедренный треугольник из символов *.число строк вводит пользователь.я не прошу написать программу, а просто схематически объяснить синтаксис построения 3-х составного for.
Владимир.
Здравствуйте. Решение 1 задачи.
#include
int main()
<
int a,b,c,d,i;
printf(«Vvedite chetyre chisla\n»);
scanf(«%d %d %d %d»,&a,&b,&c,&d);
if(ab) <
for(i=a;i>b;i—)
if(i%d==c) printf(«%d\n»,i);
>
return 0;
Код такой же но программа не работает, почему.
такой код и не будет работать, в условии if написана чушь ведь. наверное не все символы вставились.
#include (stdio.h)
int main(void)
<
int a, c, n, f;
printf(«Vvedite celoje chislo do 10:»);
scanf(«%d», &a);
#include (stdio.h)
int main(void)
<
int x, y, a, b;
printf(«Vvedite 2 chisla: \n»);
scanf(«%d %d», &a, &b);
<
for (x=1;x Ответить Удалить
//Первая задача
#include;
int main(void)
<
int a,b,c,d,p,i;
//float i;
printf(«Vvedite chetyre chisla: \n»);
scanf(«%d%d%d%d»,&a,&b,&c,&d);
for(i=a;i d)) printf(«%d\n»,i);
>
//Вторая задача
#include;
int main(void)
<
int N,i,p=1;
printf(«Vvedite chislo N ot 1 do 10: \n»);
scanf(«%d»,&N);
for(i=1;i Ответить Удалить
//Третья задача
#include
#include
int main(void)
<
int c1,c2,x,y;
printf(«Vvedite dva chisla cherez probel:\n»);
scanf(«%d%d»,&c1,&c2);
for(x=1;x Ответить Удалить
Задание №2
#include
int main()
<
int n, x, xfact=1;
printf(«Vvedite tseloye chislo x Ответить Удалить
#include
int main()
<
Задание №4
int n, N, Nsumm=0;
printf(«Vvedite tseloye chislo N Ответить Удалить
Задание №3
Вариант 1
#include
#include
int main()
<
float a, b, x, y;
printf(«Vvedite dva chisla a(summa), b(proizvedeniye)\n»);
scanf(«%f%f», &a,&b);
if((a*a) Ответить Удалить
Что такое summ и temp? и в каком уроке про них рассказывалось?
Это просто названия переменных. Переменные можно называть так, как тебе удобно. Для компа нет разницы что переменная «а», что «summ».
Большое спасибо, все очень нравится, читаю и занимаюсь с удовольствием) Автор молодца!
Спасибо, мне приятно. )
#include
int main()
<
int N,i,summ=0;
printf(«vvedite chislo N Ответить Удалить
Задание 1
#include
int main()
<
int a,b,c,d,i,e;
printf(«vvedite 4 chisla cherez probel\n»);
scanf(«%d %d %d %d»,&a,&b,&c,&d);
if (d==0) printf («error»);
else
<
if (a>b)
<
i=b;
b=a;
a=i;
>
for(i=a;i Ответить Удалить
Ну функция scanf считается устаревшей типа и небезопасной.Поэтому компилятор предлагает вам её улучшенный аналог. Не обращайте внимания, на данном этапе это не важно.)
Задание 2
#include
int main()
<
int a,b=1,i;
printf(«vvedite celoe chislo N ne bolee 10 \n»);
scanf(«%d»,&a);
if ((a>10)||(a Ответить Удалить
Хорошо, мне нравится. Особенно трюк с вычитанием из а. )))
задание 4
#include
int main()//summa
<
int a,b,c=0;
printf(«vvedite natural’noe chislo N 10000)||(a Ответить Удалить
Как же вы не заметили арифметическую прогрессию тут? ))) А так все в порядке. ))
А можете изменить программу так, чтобы числа выводились только один раз?
Если хотите, чтобы я проверял код, соблюдайте пожалуйста формат ввода и вывода. =))
Не то 🙂
Задание 2:
#include»stdio.h>»
#include»iostream»
int main()
<
setlocale(LC_ALL,»RUS»);
int nN,a,summ=1,fak;
printf(«Введите число от 1 до 10:\n»);
scanf(«%d»,&nN);
if ((nN 10))
<
printf(«Неверное число\n»);
system(«pause»);
return(0);
>
else
for (a=1;a Удалить
С факториалом верно, только много всего лишнего.
И вот еще. Если ыы хотите использовать переменную a в цикле, так и объявляйте её прямо там. Так как она объявлена у вас, она создается и занимает память все время работы программы. Тут это не критично, но все равно, лучше сразу привыкать к хорошему. )
Переделал код юзера «обморк» добавив цикл и отрицательные числа, они ведь тоже могут быть введены. Получилось не рационально зато работает.
#include «stdio.h»
#include «math.h»
int main ()
<
float x, y, b;
float a, D;
printf («\t Vvedite chisla a b chtoby a=x+y, b=x*y \n»);
scanf («%f %f», &a, &b);
D=pow( a, 2)-4*b;
Думаю Вы намудрили. Код обморока, был основан на применении теоремы Виета. Он работал и для отрицательных чисел. Или я что-то не заметил, тогда приведите пример, когда его программа не работает. =))
Первое задание:
#include «stdio.h»
int main ()
<
int a, b, c, d, x, y, z, n_c_ne_ravno_y=2;
printf («\t vvedite 4 celih chisla \n»);
scanf («%i %i %i %i», &a, &b, &c, &d);
Хорошо. Только не нужно было это выводить. Если таких чисел нет, по каким либо причинам, то программа должна просто завершить работу. )
Добрый день.
7-2
int main()//summa
<
int a,b,c=0;
printf(«vvedite natural’noe chislo N 10000)||(a Ответить Удалить
И еще вопрос, почему вы не используете объявление переменной-счетчика внутри цикла, а объявляете её в самом начале?
7-2 вот правильная
int main()
<
int a, i, proiz=1;
printf(«Vvedite chislo ot 1 do 10\n»);
scanf(«%d»,&a);
if ((a 10)) printf(«ERROR\n»);
else
for(i=1;i Удалить
7-2 хорошо
7-3 правильно, но не оптимально. Можно сделать попроще. Сейчас вы перебираете b*b вариантов, подумайте как можно сократить это число используя тот факт, что сумма чисел должна давать a.
Про цикл.
Ошибки тут нет, но так уже не программируют. Переменную можно объявить и инициализировать прямо внутри цикла.Пример по ссылке: http://pastebin.ru/tM8rrpVE
Задание №1
#include
int main(void)
<
int a,b,c,d,ost,i;
printf(«Vvedite chisla a,b,c,d cherez probel:»);
scanf(«%i %i %i %i»,&a,&b,&c,&d);
printf(«Proverka %i %i %i %i»,a,b,c,d);
Vvedite chisla a,b,c,d cherez probel:1 10 2 3
Proverka 1 10 2 3
2 chislo s ostatkom 2
5 chislo s ostatkom 2
8 chislo s ostatkom 2
Это вот результат работы вашей программы. А я хочу, чтобы экран выглядел вот так
1 10 2 3
2 5 8
Это называется формат выходных данных. =)) А так, все хорошо.
Не понял, а как у Eugene Fessplay, программа без работает? Попробовал у меня только с ней работает.
stdio.h почему-то не вывелась
Как у Eugene программа работает без stdio.h. Пробовал без нее не пашит
Задача 1
#include
int main(void)
<
int a, b, c, d;
printf(«Vvedite 4 celih chisla cherez probel, primer 5 9 151 10\n»);
scanf(«%i %i %i %i», &a, &b, &c, &d);
for(a; a Ответить Удалить
Задача 2
#include
int main(void)
<
int a, b=1, c;
printf(«Vvedite chislo ot 1 do 10\n»);
scanf(«%i», &a);
if (a 10)
printf(«ERROR\n»);
else <
if (a==1)
printf(«%i!=%i\n», a, a);
else <
for(c=1; c Ответить Удалить
int main()<
int a, b, c, d, N;
printf («Задача найти число от a до b при деление на d даёт c результат\na=»);
scanf («%d»,&a);
printf («b=»);
scanf («%d»,&b);
printf («d=»);
scanf («%d»,&d);
printf («c=»);
scanf («%d»,&c);
for (a;a Ответить Удалить
Как-то не так работает эта программа. ввожу 1 10 1 2
Хочу получить 1 3 5 7 9
Но ваша программа делает что-то другое. И соблюдайте пожалуйста формат ввода и вывода.
int main()<
float a;
int b, x, y;
printf («Задача:найти x и y\nx и y должны быть целыми числами\nx*y:»);
scanf («%f», &a);
printf(«x+y:»);
scanf («%d», &b);
if (a>=1000000 || b>=2000)<
printf(«Ошибка:x*y > 10^6 или x+y >2000 «);>
else <
for(x=1;x Ответить Удалить
про коров не совсем верно показывает с циклом for
#include
#include
int main(void)
<
float c, b, d, x, y;
printf(«Vvedite summu chisel x i y\n»);
scanf(«%f», &b);
printf(«Vvedite proizvedrnie chisel x i y\n»);
scanf(«%f», &c);
if((b>1000)||(c>1000))
<
printf(«CHISLA MENSHE 1000. \n»);
>
else
<
d=b*b-4*c;
x=((b+sqrt(d))/2);
y=((b-sqrt(d))/2);
printf(«Pervoe chislo ravno %f\nVtoroe chislo ravno %f\n», x, y);
>
return(0);
>
Библиотеки stdio.h и math.h не отобразились(((
#include
int main (void)
<
unsigned int N, i, sum=0;
printf(«Vvedite chislo ot 1 do 10 000\n»);
scanf(«%d», &N);
if(N Ответить Удалить
Задание 4 (так тоже можно или только с помощью for?)
#include
int main (void)
<
int d,n,n1,summ;
scanf(«%d»,&n);
d=1;
n1=1;
summ=((2*n1+d*(n-1))/2)*n;
printf(«summa chisrl =%d»,summ);
return(0);
>
Здравствуйте. Просмотрите пожалуйста код заданий. Вроде все работает, но т.к. благодаря цыклу, нашел сразу же в своей прошлой задаче про коров ошибку, думаю что и в этих мог где-то накосячить.
Задание 1
int main (void)
<
int a,b,c,d,e,n;
scanf («%d %d %d %d», &a,&b,&c,&d);
for (n=a;n 0)
<
y1=((-a+sqrt(d))/2)*(-1);
y2=((-a-sqrt(d))/2)*(-1);
x1=a-y1;
x2=a-y2;
printf («x=%f\ny=%f\n», x1,y1);
>
else
<
if (d==0)
<
y1=-a/2;
x1=a-y1;
printf(«x=%f\ny=%f», x1,y1);
>
else
printf («reshenie nevozmogno\n»);
>
return (0);
>
Задание 4
int main (void)
<
int a,n,x=0;
scanf(«%d», &a);
for (n=1;n Ответить Удалить
1 задание
#include
#include
int main (void)
<
int a,b,c,d,i;
printf(«Vvedite 4etire celih chisla cherez probel: \n»);
scanf(«%d%d%d%d»,&a,&b,&c,&d);
if(d==0)printf(«EROR\n»);
i=c*d;
if(i>=a&&i =a&&i Ответить Удалить
2 задание
#include
int main ()
<
int n,p,i=1;
printf(«Vvedite chislo N ot 1 do 10:\n»);
scanf(«%d»,&n);
if((n>10)||(n 10)printf(«ERROR\n»);
>
printf(«%d\n»,i);
return(0);
>
Доброго времени суток. Начну с того что я не правильно понял 1 задание. Подумал, что надо выводить все остатки от деления, а не числа дающие остаток. Листинг прилагаю:
# include ;
int main (void) <
int a, b, c, d, i;
printf («\nVvedite A, B, C, D\n»);
scanf («%d %d %d %d»,&a, &b, &c, &d);
for (i=a;i Удалить
Что такое переменная счетчик
Цикл с параметром (со счетчиком) FOR.
Этот цикл спользуется в том случае, если некоторую последовательность действий надо выполнить несколько раз и известно число повторений. Тело цикла будет выполняться заданное (заранее известное) число раз: 10, 20,100, n раз – это указывается в условии задачи.
В этом цикле обязательно указываются следующие параметры:
Имя переменной, в которой хранится число повторений цикла (переменной цикла или счетчика цикла). В качестве перемнной должна выступать порядковая (перечисляемая) переменная, использование переменных типа real не допускается.
Начальное значение — выражение, определяющее начальное значение переменной-счетчика циклов.
Конечное значение — выражение, определяющее конечное значение переменной-счетчика циклов (условие завершения цикла).
В данном случае роль счетчика играет переменная i, она изменяется в заданном диапазоне от начального значения a1 до конечного значения a2 (считает). По умолчанию шаг изменения цикла равен одному, т.е. каждый раз после прохождения тела цикла счетчик увеличивается на единицу.
Обычно в качестве выражений, определяющих значения начального и конечного состояния счетчика циклов, используют переменные или константы. В этом случае последовательность операторов, находящаяся между begin и end будет выполнена (а2-а1+1) раз.
Алгоритм, соответствующий циклу FOR, выглядит следующим образом:
В операторе For значение счетчика может не только увеличиваться, но и уменьшаться — обратная форма цикла. В этом случае оператор выглядит так:
Условие выполнения тела данного цикла: i a1, а шаг изменения счетчика – (-1).
Пример 1. Написать программу, которая вычисляет сумму 4 произвольных чисел, вводимых с клавиатуры.
Что такое переменная счетчик
Цикл — это набор команд, которые многократно выполняются до тех пор, пока выполняется (или не выполняется) некоторое условие.
В паскале существуют 3 способа организации цикла (типа):
1) Цикл со счетчиком
2) Цикл с постусловием
3) Цикл с предусловием
Рассмотрим первый тип — цикл со счетчиком.
Данный тип используется в случаях, когда известно количество повторений (итераций) в цикле. В Паскале цикл со счетчиком выглядит так:
где i — переменная-счетчик; a — начальное значение переменной i; b — конечное значение переменной i.
Набор команд, которые выполняются в цикле называют телом цикла.
Переменная i изменяется от 1 до 4 (с шагом 1). Пока i будет изменятся — будет выполняться команда writeln(‘Привет’).
На экране мы увидим:
Привет
Привет
Привет
Привет
Если цикл будет выглядеть так:
Мы увидим тот же результат, что и в предыдущем примере. Убедимся, используя формулу: (105-102)+1 = 4. Цикл выполнится 4 раза.
Вопрос! Что мы увидим после выполнения следующего кода программы?
Привет
Пока
Привет
Пока
НЕТ! На экране мы увидим следующее:
Привет
Привет
Привет
Привет
Пока
В цикле будет выполнятся только одно действие writeln(‘Привет’). только оно относится к телу цикла. Команда writeln(‘Пока’) — вне тела цикла.
Как сделать так, чтобы обе команды входили в тело цикла?
Необходимо использовать ОПЕРАТОРНЫЕ СКОБКИ!
Теперь тело цикла состоит из двух команд.
Рассмотрим несколько классических примеров использования цикла со счетчиком.
Задача 1.
Посчитать сумму чисел от 1 до 100. (1+2+3+…+100) (не используя формулу суммы членов арифметической прогрессии)
Задача, как вы уже поняли, решается с помощью цикла со счетчиком. Мы можем изменять переменную-счетчик в цикле от 1 до 100. Это даст нам ряд чисел, которые нужно сложить:
Объявим дополнительно переменную S. В эту переменную будем записывать сумму на каждом шаге цикла. До выполнения цикла S=0.
i | S=0 |
1 | 0+1=1 |
2 | 1+2=3 |
3 | 3+3=6 |
4 | 6+4=10 |
5 | 10+5=15 |
6 | 15+6=21 |
На каждом шаге цикла переменная S будет изменяться с прибавлением текущего значения переменной i
(Новое значение S:= текущее значение S + текущее значение i)
Программа будет иметь вид:
Задача 2.
Посчитать сумму пяти введенных с клавиатуры чисел
Результат представить в виде:
Введите 1-е число 5 Введите 2-е число 6 Введите 3-е число 7 Введите 4-е число 10 Введите 5-е число 10 Сумма равна 38 |
Начнем наши рассуждения.
Нам необходимо ввести 5 чисел, следовательно можем использовать цикл со счетчиком
Что же должно выполняться в цикле?
1) Вывод на экран диалогового сообщения для пользователя («Введите 1-е число и т.д.)
2) Ввод числа а
3) Сложение числа а к некоторой переменной S (аналогично Задаче 1)
Задача 3.
Найти сумму нечетных чисел от 1 до 1000.
Задача аналогична задаче 1. Отличие в том, что на числа накладывается условие: числа должны быть нечетными.
Определить четность можно, используя оператор MOD — остаток от деления.
Таким образом к переменной S будут прибавляться только те i, которые удовлетворяют условию.
если бы условие было сложным, например: найти сумму нечетных чисел и чисел, которые делятся на 10 — мы бы использовали запись:
Т.е. помимо нечетных чисел в сумме будут участвовать числа, которые делятся на 10 (использовали OR для объединения двух множеств).