<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Образовательные материалы &#187; Kirill Schurakhtenkov</title>
	<atom:link href="http://kshu.su/?author=2&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://kshu.su</link>
	<description>Ещё один сайт на WordPress</description>
	<lastBuildDate>Thu, 06 Feb 2025 15:28:59 +0000</lastBuildDate>
	<language>ru-RU</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>Относительность движения</title>
		<link>http://kshu.su/?p=263</link>
		<comments>http://kshu.su/?p=263#comments</comments>
		<pubDate>Wed, 15 Jun 2022 13:43:19 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Физика]]></category>

		<guid isPermaLink="false">http://kshu.su/?p=263</guid>
		<description><![CDATA[Урок 1. Теория Вспомним, что механическое движение – это изменение положения тела относительно других тел с течением времени. Относительное положение Если мы свяжем с любым телом свою систему координат, то любое тело можно считать за ТО, значит одно и то же тело может занимать различное положение относительно других тел. Например, положение ручки на столе различное [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">
<p>	<span id="more-263"></span></p>
<div class="Header2"><strong>Урок 1. Теория</strong></div>
<p class="Content2">Вспомним, что <i>механическое движение</i> – это изменение положения тела относительно других тел с течением времени.</p>
<div class="Header3"><strong>Относительное положение</strong></div>
<p class="Content2">Если мы свяжем с любым телом свою систему координат, то любое тело можно считать за ТО, значит одно и то же тело может занимать различное положение относительно других тел. Например, положение ручки на столе различное относительно стола и двери.</p>
<div class="Header3"><strong>Относительное движение и скорость</strong></div>
<p class="Content2">Но относительно не только положение, но и движение. Например, пассажир в стоящем поезде полагает, что он движется если будет смотреть в окно на движущийся поезд. А на самом деле он движется относительно поезда, но не относительно земли.</p>
<p class="Content2">Поскольку, скорость – это характеристика движения, то и она также относительна. А что нам даёт относительное движение и относительная скорость?</p>
<p class="Content2">Пусть есть неподвижная СО, например земля, пусть есть другая подвижная СО, которая движется относительно неподвижной и нам известно её движение (мы знаем её скорость и направление). Мы можем, находясь в неподвижной СО, определить движение тела относительно движущейся СО.</p>
<p class="Content2">Или наоборот: мы знаем движение подвижной СО, знаем движение тела относительно подвижной СО, тогда мы можем найти движение тела относительно неподвижной СО, т.е. относительно земли.</p>
<div class="Header3"><strong>Задача</strong></div>
<p class="Content2">Рассмотрим движение тела относительно двух разных СО, движущихся относительно друг друга: одна СО неподвижна, другая движется равномерно и прямолинейно.</p>
<p class="Content2">Река, два берега, известно течение реки, плот плывёт вдоль течения, к плоту причалена лодка. На берегу и на плоту есть наблюдатели, оба наблюдают за лодкой. Лодка отчаливает от плота и движется к противоположному берегу равномерно и прямолинейно:</p>
<div id="block10x10center"><img src="../wp-content/uploads/physics/08-01.png"/></div>
<p class="cntTah9Grey">На интерактиве даны плот, который привязан к пирсу(зелёный прямоугольник), а к плоту причалена лодка. После нажатия на <b>Move</b> плот отвязывается от пирса, а лодка отчаливает от плота. Движение на интерактиве можно рассмотреть относительно трёх различных СО.</p>
<p>	<!--html5&#038;css&#038;js--></p>
<div id="total">
<div id="canvas"><canvas id="cv" width=580 height=420>This browser doesn&#8217;t support HTML 5 canvas!</canvas></div>
<div id="panel">
<div style="top:15px;"><input type="radio" id="rbAbs" name="bg" value=""><label for="rbAbs" id="lbA">Abs</label></div>
<div style="top:40px;"><input type="radio" id="rbPer" name="bg" value=""><label for="rbPer" id="lbP">Per</label></div>
<div style="top:65px;"><input type="radio" id="rbOtn" name="bg" value=""><label for="rbOtn" id="lbO">Otn</label></div>
<div style="top:15px; left:60px;"><button id="bStartStop" style="background-color: #00dd00;"></button></div>
<div style="top:55px; left:60px;"><button id="bReset" style="background-color: #0080f0;">Reset</button></div>
</p></div>
</p></div>
<p class="Content2">Нарисуем векторы перемещений лодки в двух СО: относительно берега и относительно плота:</p>
<div id="block10x10center"><img src="../wp-content/uploads/physics/08-02.png"/></div>
<ol class="align_justify">
<li>Поскольку берег неподвижный, то первый вектор назовём <i>абсолютным перемещением</i>: <span class="arrowTimes11">S</span><sub>абс</sub>.</li>
<li>Поскольку плот движется, то второй вектор назовём <i>относительным перемещением</i>: <span class="arrowTimes11">S</span><sub>отн</sub>.</li>
<li>Река перенесла плот, а вместе с ней и лодку. Получим <i>переносный вектор</i>: <span class="arrowTimes11">S</span><sub>пер</sub>.</li>
</ol>
<p class="Content2">Получили знакомую, по векторной сумме, тройку векторов:</p>
<p class="Content2"><span class="arrowTimes11">S</span><sub>абс</sub> = <span class="arrowTimes11">S</span><sub>отн</sub> + <span class="arrowTimes11">S</span><sub>пер</sub></p>
<p class="Content2">Поскольку в механике очень важно описывать движение, то нужно знать векторы скорости. Их легко получить, потому что эти перемещения совершены за одинаковый промежуток времени <i>t</i>, тогда разделим каждое перемещение на эти промежутки, получим три вектора скорости:</p>
<p class="Content2"><span class="arrowTimes11">S</span><sub>абс</sub>/<i>t</i> = <span class="arrowTimes11">S</span><sub>отн</sub>/<i>t</i> + <span class="arrowTimes11">S</span><sub>пер</sub>/<i>t</i></p>
<p class="Content2">или:</p>
<p class="Content2"><span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>пер</sub></p>
<p class="Content2">Это закон сложения скоростей. Он звучит так:</p>
<p class="cntTah11Blue">Скорость тела относительно неподвижной СО равна векторной сумме скорости тела относительно движущейся СО и скорости движущейся СО относительно неподвижной.</p>
<p class="cntTah9Grey">Закон сложения скоростей написан в векторной форме, это значит, что его можно использовать для самых разных случаев. Рассмотрим два простых, которые мы часто видим в жизни.</p>
<div class="Header3"><strong>Задача</strong></div>
<p class="Content2">Скорый поезд обгоняет электропоезд. Мы едем в электропоезде. Скорость электропоезда 60 км/ч, а – скорого 90 км/ч. Найдите скорость скорого поезда относительно электропоезда.</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-03.png" /></div>
<p class="Content2">Дано: <span class="Content2Symbol">u</span><sub>э</sub> = 60 км/ч, <span class="Content2Symbol">u</span><sub>с</sub> = 90 км/ч. Найти: <span class="arrowSymbol11">u</span><sub>отн</sub></p>
<p class="cntTah9Grey">!!! Нужно уметь определять как связаны скорости <span class="Content2Symbol">u</span><sub>э</sub> и <span class="Content2Symbol">u</span><sub>с</sub> к величинам закона сложения скоростей !!!</p>
<p class="cntTah9Grey">Поведём аналогию движения лодки и плота с движениями поездов: мы едем в электропоезде, а относительно нас едет скорый, тогда электропоезд сравниваем с плотом, а скорый поезд с лодкой.</p>
<p class="Content2">Движение электропоезда обозначим как вектор переносной скорости: <span class="arrowSymbol11">u</span><sub>э</sub> = <span class="arrowSymbol11">u</span><sub>пер</sub> (это скорость той СО, в которой находимся мы). А движение скорого – как вектор абсолютной скорости: <span class="arrowSymbol11">u</span><sub>с</sub> = <span class="arrowSymbol11">u</span><sub>абс</sub> (её увидел бы наблюдатель на дороге).</p>
<p class="cntTah9Grey"><span class="arrowSymbol9">u</span><sub>отн</sub> – это скорость, которую видит пассажир электропоезда, когда смотрит на скорый. Или скорость, которую видит пассажир скорого поезда, когда смотрит на электропоезд.</p>
<p class="cntTah9Grey"><span class="arrowSymbol9">u</span><sub>пер</sub>=<span class="arrowSymbol9">u</span><sub>э</sub> – это скорость, которую видит наблюдатель на земле, когда смотрит на электропоезд. Или скорость, которую видит пассажир электропоезда, когда смотрит на стоящего наблюдателя.</p>
<p class="cntTah9Grey"><span class="arrowSymbol9">u</span><sub>абс</sub>=<span class="arrowSymbol9">u</span><sub>с</sub> – это скорость, которую видит наблюдатель на земле, когда смотрит на скорый поезд. Или скорость, которую видит пассажир скорого поезда, когда смотрит на стоящего наблюдателя.</p>
<p class="Content2">Подставим в закон сложения скоростей наши векторы:</p>
<p class="Content2"><span class="arrowSymbol11">u</span><sub>с</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>э</sub></p>
<p class="Content2">Мы ищем скорость скорого поезда относительно электропоезда – это <span class="arrowSymbol11">u</span><sub>отн</sub></p>
<p class="Content2">Тогда: <span class="arrowSymbol11">u</span><sub>отн</sub> = <span class="arrowSymbol11">u</span><sub>с</sub> – <span class="arrowSymbol11">u</span><sub>э</sub></p>
<p class="cntTah9Grey">Т.к. это векторы, то полученная формула справедлива как для попутного, так и для встречного движения. Докажем это:</p>
<p class="Content2">Рассмотрим два случая: попутное и встречное движение.</p>
<p class="Content2"><i>а</i>) Попутное движение. Уберём векторы, для этого нарисуем ось и спроецируем векторы:</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-04.png" /></div>
<p class="Content2"><span class="Content2Symbol">u</span><sub>отн x</sub> = <span class="Content2Symbol">u</span><sub>с x</sub> – <span class="Content2Symbol">u</span><sub>э x</sub></p>
<p class="Content2">Т.к. направления скоростей совпадают с направлением ОХ, то их проекции равны модулям скорости:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>отн x</sub> = <span class="Content2Symbol">u</span><sub>с</sub> – <span class="Content2Symbol">u</span><sub>э</sub> = 90 км/ч – 60 км/ч = 30 км/ч</p>
<p class="cntTah9Grey">Итак, пассажир электропоезда видит две вещи: 1 скорость скорого поезда 30 км/ч, 2 эта скорость вдоль оси <i>x</i>.</p>
<p class="cntTah9Grey">Последняя формула ничего не говорит о том, где находится скорый – за или перед электропоездом, потому что она говорит только об относительной скорости, которая везде одинакова!</p>
<p class="cntTah9Grey">Формула с проекциями не зависит от того куда едет электропоезд и/или скорый поезд, потому что она совпадает с векторной формулой. Значит её можно учесть в случае <i>б</i>)</p>
<p class="Content2"><i>б</i>) Встречное движение. Электропоезд движется туда же, а скорый – навстречу ему. Скорости те же. Спроецируем их на ось <i>х</i>:</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-05.png" /></div>
<p class="Content2"><span class="Content2Symbol">u</span><sub>отн x</sub> = <span class="Content2Symbol">u</span><sub>с x</sub> – <span class="Content2Symbol">u</span><sub>э x</sub></p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>отн x</sub> = –<span class="Content2Symbol">u</span><sub>с</sub> – <span class="Content2Symbol">u</span><sub>э</sub> = 90 км/ч – 60 км/ч = 30 км/ч</p>
<p class="cntTah9Grey">Минус говорит о движении против оси <i>x</i>.</p>
<p class="Content2">Мы доказали, что векторная формула годиться для двух случаев, т.е. она не зависит от направления.</p>
<div class="Header2"><strong>Урок 2. Решение задач</strong></div>
<div class="Header3"><strong>Задача 1</strong></div>
<p class="Content2">За 4 ч моторная лодка проходит против течения расстояние 48 км. За какое время она пройдёт обратный путь, если скорость течения равна 3 км/ч?</p>
<div class="row">
<div class="column">
<p class="Content2"><i>t</i><sub>пр</sub>, <i>&#8467;</i>, <span class="Content2Symbol">u</span><sub>т</sub></p>
<p  class="Content2"><i>t</i><sub>по</sub>-?</p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-06.png" />
</div>
<div class="column">
<p class="Content2"><span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>пер</sub></p>
</div>
</div>
<p class="cntTah9Grey"><span class="Content2Symbol">u</span><sub>отн</sub> – скорость лодки относительно воды, <span class="Content2Symbol">u</span><sub>пер</sub> – скорость реки.</p>
<p class="cntTah9Grey">На рисунке длины векторов скорости получаются путём сложения вектора скорости реки и векторов скоростей лодок относительно воды.</p>
<p class="cntTah9Grey">Если направление течения совпадает с направлением лодки, то обе скорости складываются, и полученная сумма связывается с <i>&#8467;</i> и <i>t</i><sub>по</sub>:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>л</sub> + <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i> / <i>t</i><sub>по</sub> (1)</p>
<p class="cntTah9Grey">Если лодка движется против течения, то <span class="Content4Symbol">u</span><sub>отн</sub> и <span class="Content4Symbol">u</span><sub>пер</sub> направлены противоположно . Например, если лодка проходит на 10 м влево относительно воды, но вода течёт вправо на 2 м, получается, что лодка прошла 10-2 м, т.е. скорости вычитаются, и полученная разность связывается с <i>&#8467;</i> и <i>t</i><sub>пр</sub>:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>л</sub> &#8212; <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i> / <i>t</i><sub>пр</sub> (2)</p>
<p class="cntTah9Grey">Законов сложения расстояний или времён нет, но есть закон сложения скоростей, поэтому можно связать скорости с теми величинами, которые есть. Вычтем одно равенство из другого – (1) &#8212; (2):</p>
<p class="Content2">(<span class="Content2Symbol">u</span><sub>л</sub> + <span class="Content2Symbol">u</span><sub>т</sub>) &#8212; (<span class="Content2Symbol">u</span><sub>л</sub> &#8212; <span class="Content2Symbol">u</span><sub>т</sub>) = <i>&#8467;</i> / <i>t</i><sub>по</sub> &#8212; <i>&#8467;</i> / <i>t</i><sub>пр</sub></p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>л</sub> + <span class="Content2Symbol">u</span><sub>т</sub> &#8212; <span class="Content2Symbol">u</span><sub>л</sub> + <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i> / <i>t</i><sub>по</sub> &#8212; <i>&#8467;</i> / <i>t</i><sub>пр</sub></p>
<p class="Content2">2<span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i> / <i>t</i><sub>по</sub> &#8212; <i>&#8467;</i> / <i>t</i><sub>пр</sub></p>
<p class="cntTah9Grey">мы связали друг с другом все величины, которые у нас есть</p>
<p class="Content2">2<span class="Content2Symbol">u</span><sub>т</sub> + <i>&#8467;</i> / <i>t</i><sub>пр</sub> = <i>&#8467;</i> / <i>t</i><sub>по</sub></p>
<p class="Content2">(2<span class="Content2Symbol">u</span><sub>т</sub>&#183;<i>t</i><sub>пр</sub> + <i>&#8467;</i>) / <i>t</i><sub>пр</sub> = <i>&#8467;</i> / <i>t</i><sub>по</sub></p>
<p class="Content2"><i>t</i><sub>по</sub> = <i>t</i><sub>пр</sub>&#183;<i>&#8467;</i>/(2<span class="Content2Symbol">u</span><sub>т</sub>&#183;<i>t</i><sub>пр</sub> + <i>&#8467;</i>)</p>
<p class="cntTah9Grey">по формуле видно, что дробь безразмерная величина</p>
<div class="Header3"><strong>Задача 2</strong></div>
<p class="Content2">Моторная лодка за 1,5 ч доставляет почту из города в посёлок, расположенный ниже по течению реки. Сколько времени займёт обратный путь, если скорость движения лодки относительно воды в 4 раза больше скорости течения реки?</p>
<div class="row">
<div class="column">
<p class="Content2"><i>t</i><sub>по</sub>, <i>n</i>,</p>
<p  class="Content2"><span class="Content2Symbol">u</span><sub>л</sub>=<i>n</i><span class="Content2Symbol">u</span><sub>т</sub> </p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-06.png" />
</div>
<div class="column">
<p class="Content2"><span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>пер</sub></p>
</div>
</div>
<p class="cntTah9Grey">Добавим на рисунок <i>&#8467;</i> и <span class="Content2Symbol">u</span><sub>т</sub>, их нет в условии, но в природе они есть, и они связаны с законом сложения скоростей.</p>
<p class="Content2">Рассмотрим две абсолютные скорости, которые видны с берега – по течению и против. По течению – это сумма скорости лодки относительно воды (<span class="Content2Symbol">u</span><sub>отн</sub>) и скорости течения (<span class="Content2Symbol">u</span><sub>пер</sub> она же <span class="Content2Symbol">u</span><sub>т</sub>)</p>
<p class="cntTah9Grey">Свяжем эти абсолютные скорости с теми величинами, которые есть в задаче – <i>t</i><sub>по</sub>:</p>
<p class="Content2">По течению: <span class="Content2Symbol">u</span><sub>л</sub> + <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i>/<i>t</i><sub>по</sub></p>
<p class="Content2">Против течения: <span class="Content2Symbol">u</span><sub>л</sub> &#8212; <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i>/<i>t</i><sub>пр</sub></p>
<p class="cntTah9Grey">Свяжем скорости лодки и течения:</p>
<p class="Content2"><i>n</i><span class="Content2Symbol">u</span><sub>т</sub> + <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i>/<i>t</i><sub>по</sub></p>
<p class="Content2"><i>n</i><span class="Content2Symbol">u</span><sub>т</sub> &#8212; <span class="Content2Symbol">u</span><sub>т</sub> = <i>&#8467;</i>/<i>t</i><sub>пр</sub></p>
<p class="Content2">вынесем за скобки <span class="Content2Symbol">u</span><sub>т</sub>:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>т</sub>(<i>n</i>+1) = <i>&#8467;</i>/<i>t</i><sub>по</sub>(1)</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>т</sub>(<i>n</i>-1) = <i>&#8467;</i>/<i>t</i><sub>пр</sub>(2)</p>
<p class="Content2">(1)/(2):</p>
<p class="Content2">[<span class="Content2Symbol">u</span><sub>т</sub>(<i>n</i>+1)/<span class="Content2Symbol">u</span><sub>т</sub>(<i>n</i>-1)] = (<i>&#8467;</i>/<i>t</i><sub>по</sub>)&#183;(<i>t</i><sub>пр</sub>/<i>&#8467;</i>)</p>
<p class="Content2"><i>t</i><sub>пр</sub> = <i>t</i><sub>по</sub> &#183; (<i>n</i>+1)/(n-1) = 1,5ч&#183;5/3 = 0,5&#183;5 = 2,5ч</p>
<div class="Header3"><strong>Эксперимент</strong></div>
<p class="Content2">Для дроби из предыдущей задачи:</p>
<p class="Content2"><i>t</i><sub>пр</sub> = <i>t</i><sub>по</sub>&#183;(<i>n</i>+1)/(<i>n</i>-1)</p>
<p class="Content2">изучите случаи когда:</p>
<p class="Content2">а) лодка быстрая,</p>
<p class="Content2">б) лодка медленная,</p>
<p class="Content2">в) скорость лодки равна скорости течения.</p>
<p class="Content2">Решение:</p>
<p class="Content2">а) Лодка быстрая – это значит, что скорость лодки во много раз больше(>>) скорости течения:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>л</sub> >> <span class="Content2Symbol">u</span><sub>т</sub>, значит <i>n</i> >> 1</p>
<p class="Content2">Говорят, что <i>n</i> такая огромная, что её единица особо не увеличивает и особо не уменьшает. Следовательно, единицей можно пренебречь, поэтому дробь стремится к единице, тогда:</p>
<p class="Content2"><i>t</i><sub>пр</sub> &#8776; <i>t</i><sub>по</sub></p>
<p class="Content2">Такая лодка будет плыть одинаковое расстояние против и по течению за почти одинаковое время.</p>
<p class="Content2">б) Лодка медленная – это значит, что скорость лодки едва больше скорости течения, а <i>n</i> едва больше 1:</p>
<p class="Content2"><i>n</i> &#8776; 1, <i>n</i> > 1</p>
<p class="Content2">перепишем дробь для <i>n</i>:</p>
<p class="Content2"><i>t</i><sub>пр</sub> = <i>t</i><sub>по</sub>&#183;2 / малое число</p>
<p class="Content2">Поскольку в знаменателе малое число, то <i>t</i><sub>пр</sub> – большое число, значит:</p>
<p class="Content2"><i>t</i><sub>пр</sub> >> <i>t</i><sub>по</sub></p>
<p class="Content2">в) если скорости лодки и течения равны, это значит, что <i>n</i> = 1 и знаменатель равен нулю. В таких случаях дробь равна бесконечности, тогда время возврата <i>t</i><sub>пр</sub> увеличивается до бесконечности, и лодка будет стоять на месте, потому что течение будет её возвращать на столько, на сколько она проплыла.</p>
<p class="Content2">
<div class="Header3"><strong>Задача 3</strong></div>
<p class="Content2">Стоящий на эскалаторе человек поднимается за 2 мин, а бегущий по эскалатору — за 40 с. За какое время этот человек поднимется по неподвижному эскалатору?</p>
<div class="row">
<div class="column">
<p class="Content2"><i>t</i><sub>э</sub>, <i>t</i><sub>чэ</sub>, </p>
<p  class="Content2"><i>t</i><sub>ч</sub>-?</p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-07.png" />
</div>
<div class="column">
<p class="Content2"><span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>пер</sub></p>
</div>
</div>
<p class="cntTah9Grey">Добавим на рисунок величину <i>&#8467;</i>, её нет в задаче, но в природе она есть, и она связана с законом сложения скоростей.</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>э</sub> = <i>&#8467;</i> / <i>t</i><sub>э</sub> (скорость эскалатора или скорость стоящего человека, её видит наблюдатель за пультом эскалатора, когда смотрит на ступеньки или на неподвижного человека, ещё это <span class="Content2Symbol">u</span><sub>пер</sub>)</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>ч</sub> = <i>&#8467;</i> / <i>t</i><sub>ч</sub> (скорость человека по неподвижному эскалатору или скорость, которую видит стоящий на эскалаторе человек, когда смотрит на бегущего по эскалатору, ещё это <span class="Content2Symbol">u</span><sub>отн</sub>)</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>л</sub> + <span class="Content2Symbol">u</span><sub>э</sub> =  <i>&#8467;</i> / <i>t</i><sub>чэ</sub> (скорость, которую видит наблюдатель за пультом эскалатора, когда смотрит на бегущего по эскалатору, ещё это <span class="Content2Symbol">u</span><sub>абс</sub>)</p>
<p class="cntTah9Grey">(Для простоты, величины в скобках: <span class="Content2Symbol">u</span><sub>абс</sub>, <span class="Content2Symbol">u</span><sub>отн</sub> и <span class="Content2Symbol">u</span><sub>пер</sub> указаны без векторов, на  самом деле, каждая величина может быть знаковой и беззнаковой, всё зависит от того где бежит человек: относительно стоящего за ним, или перед ним, поэтому в строгом смысле, величины эти – векторы)</p>
<p class="Content2">В третье уравнение подставим правые части первого и второго</p>
<p class="Content2"><i>&#8467;</i> / <i>t</i><sub>ч</sub> + <i>&#8467;</i> / <i>t</i><sub>э</sub> = <i>&#8467;</i> / <i>t</i><sub>чэ</sub></p>
<p class="Content2">&#183; 1 / <i>&#8467;</i></p>
<p class="Content2">1 / <i>t</i><sub>ч</sub> + 1 / <i>t</i><sub>э</sub> = 1 / <i>t</i><sub>чэ</sub> </i></p>
<p class="Content2">1 / <i>t</i><sub>ч</sub> = 1 / <i>t</i><sub>чэ</sub> &#8212; 1 / <i>t</i><sub>э</sub> </i></p>
<p class="Content2">1 / <i>t</i><sub>ч</sub> = (<i>t</i><sub>э</sub> &#8212; <i>t</i><sub>чэ</sub>) / <i>t</i><sub>э</sub></i>&#183;<i>t</i><sub>чэ</sub></p>
<p class="Content2"><i>t</i><sub>ч</sub> = <i>t</i><sub>чэ</sub></i>&#183;<i>t</i><sub>э</sub> / (<i>t</i><sub>э</sub> &#8212; <i>t</i><sub>чэ</sub>)</p>
<div class="Header2"><strong>Урок 3. Решение задач. (одномерный случай)</strong></div>
<div class="Header3"><strong>Задача 4</strong></div>
<p class="Content2">Эскалатор метро спускает идущего по нему вниз человека за 1 мин. Если человек будет идти вдвое быстрее, то он спустится за 45 с. Сколько времени спускается человек, стоящий на эскалаторе?</p>
<div class="row">
<div class="column">
<p class="Content2"><i>t</i><sub>1</sub>, <i>t</i><sub>2</sub>, <i>n</i>,</p>
<p  class="Content2"><span class="Content2Symbol">u</span><sub>2</sub>=<i>n</i><span class="Content2Symbol">u</span><sub>1</sub> </p>
<p  class="Content2"><i>t</i><sub>0</sub>-?</p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-08.png" />
</div>
<div class="column">
<p class="Content2"><span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>пер</sub></p>
</div>
</div>
<p class="cntTah9Grey">Добавим на рисунок величину <i>&#8467;</i> и <span class="Content2Symbol">u</span><sub>э</sub>, их нет в условии, но в природе они есть, и они связаны с законом сложения скоростей.</p>
<p class="cntTah9Grey"><i>t</i><sub>0</sub> – время спуска человека, скорость которого = 0</p>
<p class="Content2">Свяжем величины, которые даны в условии задачи с величинами, которые есть на рисунке:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>1</sub> + <span class="Content2Symbol">u</span><sub>э</sub> = <i>&#8467;</i>/<i>t</i><sub>1</sub> (скорость, которую видит наблюдатель за пультом эскалатора, когда смотрит на идущего по эскалатору)</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>2</sub> &#8212; <span class="Content2Symbol">u</span><sub>э</sub> = <i>&#8467;</i>/<i>t</i><sub>2</sub> (скорость, которую видит наблюдатель за пультом эскалатора, когда смотрит на вдвое быстрее идущего по эскалатору)</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>э</sub> = <i>&#8467;</i>/<i>t</i><sub>0</sub> (скорость эскалатора или скорость стоящего человека, её видит наблюдатель за пультом эскалатора, когда смотрит на ступеньки или на неподвижного человека)</p>
<p class="Content2">Перепишем первые два уравнения с учётом третьего и заменим <span class="Content2Symbol">u</span><sub>2</sub> на <i>n</i><span class="Content2Symbol">u</span><sub>1</sub>:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>1</sub> + <i>&#8467;</i>/<i>t</i><sub>0</sub> = <i>&#8467;</i>/<i>t</i><sub>1</sub> &#8212; (1)</p>
<p class="Content2"><i>n</i><span class="Content2Symbol">u</span><sub>1</sub> + <i>&#8467;</i>/<i>t</i><sub>0</sub> = <i>&#8467;</i>/<i>t</i><sub>2</sub> &#8212; (2)</p>
<p class="Content2">умножим (1) на <i>n</i>:</p>
<p class="Content2"><i>n</i><span class="Content2Symbol">u</span><sub>1</sub> + <i>n</i><i>&#8467;</i>/<i>t</i><sub>0</sub> = <i>n</i><i>&#8467;</i>/<i>t</i><sub>1</sub></p>
<p class="Content2">вычтем (2) из последнего:</p>
<p class="Content2"><i>n</i><i>&#8467;</i>/<i>t</i><sub>0</sub> &#8212; <i>&#8467;</i>/<i>t</i><sub>0</sub> = <i>n</i><i>&#8467;</i>/<i>t</i><sub>1</sub> &#8212; <i>&#8467;</i>/<i>t</i><sub>2</sub></p>
<p class="Content2">разделим каждое слагаемое на <i>&#8467;</i>:</p>
<p class="Content2"><i>n</i>/<i>t</i><sub>0</sub> &#8212; 1/<i>t</i><sub>0</sub> = <i>n</i>/<i>t</i><sub>1</sub> &#8212; 1/<i>t</i><sub>2</sub></p>
<p class="Content2"> (<i>n</i> &#8212; 1)/<i>t</i><sub>0</sub> = (<i>n</i><i>t</i><sub>2</sub> &#8212; <i>t</i><sub>1</sub>)/<i>t</i><sub>1</sub><i>t</i><sub>2</sub></p>
<p class="Content2"><i>t</i><sub>0</sub> = (<i>n</i> &#8212; 1)<i>t</i><sub>1</sub><i>t</i><sub>2</sub> / (<i>n</i><i>t</i><sub>2</sub> &#8212; <i>t</i><sub>1</sub>)</p>
<p class="cntTah9Grey">Анализ: при <i>n</i> = 1, получим <i>t</i><sub>0</sub> = 0? Т.е. стоящий на эскалаторе человек спуститься мгновенно?</p>
<p class="cntTah9Grey">Нет, при <i>n</i> = 1, окажется, что <i>t</i><sub>2</sub> = <i>t</i><sub>1</sub>, а это значит, что получим дробь 0/0, но это мат.анализ 1 курс.</p>
<div class="Header3"><strong>Задача 5</strong></div>
<p class="Content2">Колонна войск во время похода движется со скоростью 5 км/ч, растянувшись по дороге на расстояние 400 м. Командир, находящийся в хвосте колонны, посылает велосипедиста с поручением к головному отряду. Велосипедист отправляется и едет со скоростью 25 км/ч и, на ходу выполнив поручение, сразу же возвращается обратно с той же скоростью. Через какое время после получения поручения он вернулся обратно?</p>
<p class="Content2">
<p class="Content2"><span class="Content2Symbol">u</span><sub>к</sub>, <i>&#8467;</i>, <span class="Content2Symbol">u</span><sub>в</sub></p>
<p class="Content2"><i>t</i> &#8212; ?</p>
<p class="Content2">СО – земля:</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-09.png" /></div>
<p class="Content2">Пока велосипедист едет, колонна продолжает движение, значит для передачи поручения он должен проехать расстояние больше чем <i>&#8467;</i>, обратно наоборот.</p>
<p class="Content2">СО – колона:</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-10.png" /></div>
<p class="Content2">Относительно колонны, велосипедист туда и обратно проедет одинаковое расстояние <i>l</i>,(это будет использоваться в следующей задаче, поэтому важно понять) но если вспомнить поезда, идущие попутно и встречно (мы тогда сидели в электропоезде), то легко найти скорость велосипедиста относительно колонны для обоих случаев:</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>к</sub> &#8212; <span class="Content2Symbol">u</span><sub>в</sub>  – скорость велосипедиста относительно колонны при движении вместе с колонной,</p>
<p class="Content2"><span class="Content2Symbol">u</span><sub>к</sub> + <span class="Content2Symbol">u</span><sub>в</sub>  – скорость велосипедиста относительно колонны при движении против колонны.</p>
<p class="Content2">Тогда, чтобы найти общее время, достаточно сложить время движения с одной скоростью, со временем движения с другой скоростью:</p>
<p class="Content2">t=<i>&#8467;</i>/(<span class="Content2Symbol">u</span><sub>в</sub>-<span class="Content2Symbol">u</span><sub>к</sub>) + <i>&#8467;</i>/(<span class="Content2Symbol">u</span><sub>в</sub>+<span class="Content2Symbol">u</span><sub>к</sub>)=</p>
<p class="Content2">(0,4 м&#183;60 мин/20 км) + (0,4 м&#183;60 мин/30 км) = 0,4&#183;3 мин + 0,4&#183;2 мин = 1,2 мин</p>
<div class="Header3"><strong>Задача 6</strong></div>
<p class="Content2">Скорость катера относительно воды 7 м/с, скорость течения реки 3 м/с. Когда катер двигался против течения, с него сбросили в воду мяч. Затем катер прошёл против течения 4,2 км, повернул обратно и догнал мяч. Сколько времени двигался катер от момента сбрасывания мяча до встречи с ним?</p>
<p class="Content2">
<p class="Content2"><span class="Content2Symbol">u</span><sub>к</sub>, <span class="Content2Symbol">u</span><sub>т</sub>, <i>S</i><sub>пр</sub></p>
<p class="Content2"><i>t</i> &#8212; ?</p>
<p class="Content2">СО – земля:</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-11.png" /></div>
<p class="cntTah9Grey">Предположим, что вода неподвижна, тогда если катер движется с <span class="Content2Symbol">u</span><sub>к</sub>, то нам не подойдёт <i>S</i><sub>пр</sub>, т.к. это расстояние пройдено против течения. Значит изучаем случай в СО – земля.</p>
<p class="Content2">Свяжем величину, которая есть в условии задачи с величинами, которые участвуют в законе сложения скоростей, найдём <i>t</i><sub>пр</sub>:</p>
<p class="Content2"><i>t</i><sub>пр</sub> = <i>S</i><sub>пр</sub> / (<span class="Content2Symbol">u</span><sub>к</sub>-<span class="Content2Symbol">u</span><sub>т</sub>)</p>
<p class="Content2">СО – вода:</p>
<div id="block30x30center"><img src="../wp-content/uploads/physics/08-12.png" /></div>
<p class="Content2">В СО связанной с водой или мячом, катер будет отплывать от мяча и приплывать к нему с одинаковой скоростью – <span class="Content2Symbol">u</span><sub>к</sub>, т.е. мяч никуда не переместился, значит:</p>
<p class="Content2"><i>t</i><sub>пр</sub> = <i>t</i><sub>по</sub></p>
<p class="Content2"><i>t</i> = <i>t</i><sub>пр</sub> + <i>t</i><sub>по</sub> = 2<i>t</i><sub>по</sub></p>
<p class="Content2"><i>t</i><sub>пр</sub> = 2<i>S</i><sub>пр</sub> / (<span class="Content2Symbol">u</span><sub>к</sub>-<span class="Content2Symbol">u</span><sub>т</sub>) = 8400м / 7 м/с &#8212; 3 м/с = 35 мин</p>
<p class="cntTah9Grey">Вывод. Можно менять СО решая одну и ту же задачу, в зависимости от того, какую ситуацию мы рассматриваем.</p>
<div class="Header2"><strong>Урок 4. Решение задач. (двумерный случай)</strong></div>
<div class="Header3"><strong>Задача 7</strong></div>
<p class="Content2">С угла <i>A</i> квадратного плота спрыгнул в воду и поплыл вокруг плота пес. Нарисуйте траекторию движения пса относительно берега, если он плывёт вдоль сторон плота, а его скорость относительно воды составляет 4/3 скорости течения реки.</p>
<div class="row">
<div class="column">
<p class="Content2"><span class="Content2Symbol">u</span><sub>с</sub> = 4/3<span class="Content2Symbol">u</span><sub>п</sub></p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-13.png"/>
</div>
</div>
<p class="cntTah9Grey">Если пёс, после прыжка, проплыл сторону плота, то сколько проплыл плот?</p>
<p class="Content2">Если пёс и плот плывут одновременно, то у них время <i>t</i> одинаковое. Вычислим, на сколько переместился плот, если пёс проплыл его сторону перпендикулярно реке:</p>
<p class="Content2"><i>t</i> = <i>S</i><sub>c</sub>/<span class="Content2Symbol">u</span><sub>c</sub></p>
<p class="Content2"><i>t</i> = <i>S</i><sub>п</sub>/<span class="Content2Symbol">u</span><sub>п</sub></p>
<p class="Content2"><i>S</i><sub>c</sub>/<span class="Content2Symbol">u</span><sub>c</sub> = <i>S</i><sub>п</sub>/<span class="Content2Symbol">u</span><sub>п</sub></p>
<p class="Content2"><i>S</i><sub>c</sub>&#183;<span class="Content2Symbol">u</span><sub>п</sub> = <i>S</i><sub>п</sub>&#183;<span class="Content2Symbol">u</span><sub>с</sub></p>
<p class="Content2"><i>S</i><sub>п</sub> = <i>S</i><sub>с</sub>&#183;<span class="Content2Symbol">u</span><sub>п</sub>/<span class="Content2Symbol">u</span><sub>с</sub> = 4 м&#183;3 м/с / 4 м/с = 3 м.</p>
<p class="Content2">После того как пёс проплыл 4 м от т. <i>А</i>, плот проплыл 3 м:</p>
<p><img src="../wp-content/uploads/physics/08-14.png"/></p>
<p class="Content2">Далее, пёс плыл вдоль реки:</p>
<p><img src="../wp-content/uploads/physics/08-15.png"/></p>
<p class="Content2">Затем снова перпендикулярно:</p>
<p><img src="../wp-content/uploads/physics/08-16.png"/></p>
<p class="Content2">И наконец против течения:</p>
<p><img src="../wp-content/uploads/physics/08-17.png"/></p>
<p class="Content2">Траектория:</p>
<p><img src="../wp-content/uploads/physics/08-18.png"/></p>
<div class="Header3"><strong>Задача 8</strong></div>
<p class="Content2">На лодке переплывают реку, отправляясь из пункта А (см. рисунок). Скорость лодки в стоячей воде <span class="Content2Symbol"><i>u</i></span> = 5 м/с, скорость течения реки <span class="Content2_Times"><i>u</i></span> = 3 м/с, ширина реки <i>S</i> = 200 м. В какой точке пристанет лодка к противоположному берегу, если держать курс перпендикулярно берегам? Какой курс следует держать, чтобы попасть в точку В? Для обоих случаев определите время переправы.</p>
<div class="row">
<div class="column">
<p class="Content2"><span class="Content2Symbol">u</span>, <span class="arrowTimes11">u</span>, <i>S</i></p>
<p class="Content2"><i>&#8467;</i>, <span class="Content2Symbol"><i>a</i></span>, <i>t</i><sub>1</sub>, <i>t</i><sub>2</sub> &#8212; ?</p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-19.png"/>
</div>
</div>
<p class="Content2">1-й вопрос – лодка держит курс &#8869; берегу.</p>
<p class="cntTah9Grey">Держать курс перпендикулярно берегам – это значит направить нос лодки перпендикулярно берегу, но т.к. есть течение – лодку будет сносить по течению</p>
<p class="Content2">1-й способ. Рисуем вектор скорости лодки, нос которой направлен &#8869; берегам, затем перемещение лодки (АС) и снос относительно т. B (<i>&#8467;</i>):</p>
<p class="Content2"><img src="../wp-content/uploads/physics/08-20.png"/></p>
<p class="Content2"><i>&#8467;</i> = <i>t</i><span class="Content2_Times"><i>u</i></span></p>
<p class="Content2">где <i>t</i> – время, в течение которого лодку сносило вдоль реки на расстояние <i>&#8467;</i>, а также это время, в течение которого лодка плыла ширину реки <i>S</i> со скоростью <span class="arrowSymbol11">u</span>, тогда:</p>
<p class="Content2"><i>t</i> = <i>S</i>/<span class="Content2Symbol"><i>u</i></p>
<p class="Content2"><i>&#8467;</i> = <i>S</i>&#183;<span class="Content2_Times"><i>u</i></span>/<span class="Content2Symbol"><i>u</i></p>
<p class="Content2"><i>t</i> = 40 c, <i>&#8467;</i> = 120 м</p>
<p class="Content2">2-й способ, через закон сложения скоростей.</p>
<p class="Content2">Если <span class="arrowSymbol11">u</span><sub>отн</sub> – <span class="arrowSymbol11">u</span> и <span class="arrowSymbol11">u</span><sub>пер</sub> – <span class="arrowTimes11">u</span>, то <span class="arrowSymbol11">u</span><sub>абс</sub> – <span class="arrowSymbol11">u</span> + <span class="arrowTimes11">u</span>: </p>
<p class="Content2"><img src="../wp-content/uploads/physics/08-21.png"/></p>
<p class="Content2">Треугольники перемещений(ABC) и скоростей подобны, значит:</p>
<p class="Content2"><span class="Content2_Times"><i>u</i></span>/<span class="Content2Symbol"><i>u</i></span> =  <i>&#8467;</i>/<i>S</i></p>
<p class="Content2"><i>&#8467;</i> = <i>S</i>&#183;<span class="Content2_Times"><i>u</i></span>/<span class="Content2Symbol"><i>u</i></p>
<p class="cntTah9Grey">Обратим внимание на то, что лодка одновременно участвует в двух движениях: вдоль вектора AB и вдоль вектора AC.</p>
<p class="Content2">2-й вопрос. Лодка приплывает к т. В.</p>
<p class="cntTah9Grey">Чтобы попасть в т.В, нужно выяснить куда нужно направить вектор <span class="Content2Symbol"><i>u</i></span>, т.е. нос лодки. Для этого нужно учесть величину сноса течения, по которому нужно ориентироваться при повороте носа лодки. В этом случае, скорость лодки к т.B относительно берега – это <span class="Content2Symbol"><i>u</i></span><sub>абс</sub>.</p>
<p class="Content2"><span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowSymbol11">u</span><sub>пер</sub> или <span class="arrowSymbol11">u</span><sub>абс</sub> = <span class="arrowSymbol11">u</span> + <span class="arrowTimes11">u</span></p>
<p class="cntTah9Grey">Нам даны вектор <span class="Content2_Times"><i>u</i></span> и модуль <span class="Content2Symbol"><i>u</i></span>, остаётся их нарисовать так, чтобы их сумма получила вектор <span class="Content2Symbol"><i>u</i></span><sub>абс</sub></p>
<p class="Content2">Найдём вектор <span class="Content2Symbol"><i>u</i></span>:</p>
<p class="Content2"><span class="arrowSymbol11">u</span> = <span class="arrowSymbol11">u</span><sub>абс</sub> – <span class="arrowTimes11">u</span>, но сложением удобно, поэтому: <span class="arrowSymbol11">u</span> = <span class="arrowSymbol11">u</span><sub>абс</sub> + (–<span class="arrowTimes11">u</span>)</p>
<p class="Content2"><img src="../wp-content/uploads/physics/08-22.png"/></p>
<p class="Content2">sin <span class="Content2Symbol"><i>a</i></span> = <span class="Content2_Times"><i>u</i>/<span class="Content2Symbol"><i>u</i></p>
<p class="cntTah9Grey">Под этим углом, нужно держать курс, чтобы попасть в т.B.</p>
<p class="Content2">Теперь найдём время. Скорость, с которой лодка приближается к берегу – <span class="Content2Symbol"><i>u</i></span><sub>абс</sub> = &#8730;<span class="Content2Symbol"><i>u</i></span><sup>2</sup> – <span class="Content2_Times"><i>u</i><sup>2</sup></p>
<p class="Content2"><i>t</i> = <i>S</i>/<span class="Content2Symbol"><i>u</i></span><sub>абс</sub> = <i>S</i>/&#8730;<span class="Content2Symbol"><i>u</i></span><sup>2</sup> – <span class="Content2_Times"><i>u</i><sup>2</sup></p>
<p class="Content2">sin <span class="Content2Symbol"><i>a</i></span> = 0,6 => <span class="Content2Symbol"><i>a</i></span> &#8776; 37&#176;</p>
<p class="Content2"><i>t</i> = 50c</p>
<p class="cntTah9Grey">Анализ: время переправы во 2-м случае больше, потому гипотенуза длиннее катета, ещё, скорость приближения к т.B (<span class="Content2Symbol"><i>u</i></span><sub>абс</sub>) представляет лишь часть от скорости лодки <span class="Content2Symbol"><i>u</i></span>, потому другая часть представляет собой течение.</p>
<div class="Header3"><strong>Задача 9</strong></div>
<p class="Content2">Капли дождя из-за сопротивления воздуха падают с постоянной скоростью <span class="Content2Symbol"><i>u</i></span>, перпендикулярной поверхности земли. Как необходимо расположить цилиндрическое ведро, находящееся на движущейся со скоростью u платформе, чтобы капли не попадали на его стенки?</p>
<div class="row">
<div class="column">
<p class="Content2"><span class="arrowSymbol11">u</span>, <span class="arrowTimes11">u</span></p>
<p class="Content2"><span class="Content2Symbol"><i>a</i></span> &#8212; ?</p>
</div>
<div class="column">
<img src="../wp-content/uploads/physics/08-23.png"/>
</div>
</div>
<p class="Content2">Нарисуем движение капли для наблюдателя на тележке:</p>
<div id="block10x10center"><img src="../wp-content/uploads/physics/08-24.png"/></div>
<p class="Content2">Капли не будут попадать на стенки ведра, когда они летят || стенкам ведра. А наблюдатель, сидя на тележке, видит их под углом <span class="Content2Symbol"><i>a</i></span></p>
<p class="Content2">Сопоставим наши скорости со скоростями закона сложения:</p>
<div id="block10x10center"><img src="../wp-content/uploads/physics/08-25.png"/></div>
<p class="Content2">Если капли падают относительно земли, то <span class="Content2Symbol"><i>u</i></span> – это абсолютная скорость (<span class="Content2Symbol"><i>u</i></span><sub>абс</sub>); если <span class="Content2_Times"><i>u</i></span> – скорость движущейся СО, то это переносная скорость (<span class="Content2Symbol"><i>u</i></span><sub>пер</sub>), тогда капли для сидящего на тележке падают с относительной скоростью(<span class="Content2Symbol"><i>u</i></span><sub>отн</sub>).</p>
<p class="Content2">Перепишем закон сложения скоростей:</p>
<p class="Content2"><span class="arrowSymbol11">u</span> = <span class="arrowSymbol11">u</span><sub>отн</sub> + <span class="arrowTimes11">u</span></p>
<p class="Content2">Угол <span class="Content2Symbol"><i>a</i></span> будем находить зная <span class="Content2Symbol"><i>u</i></span><sub>отн</sub>:</p>
<p class="Content2"><span class="arrowSymbol11">u</span><sub>отн</sub> = <span class="arrowSymbol11">u</span> &#8212; <span class="arrowTimes11">u</span></p>
<p class="Content2">но сложением удобно, поэтому: <span class="arrowSymbol11">u</span><sub>отн</sub> = <span class="arrowSymbol11">u</span> + (–<span class="arrowTimes11">u</span>)</p>
<p class="Content2">Нарисуем треугольник скоростей и угол <span class="Content2Symbol"><i>a</i></span>:</p>
<div id="block10x10center"><img src="../wp-content/uploads/physics/08-26.png"/></div>
<p class="cntTah9Grey">Под этим углом капли будут падать на дно ведра минуя стенки.</p>
<p class="Content2">tg <span class="Content2Symbol"><i>a</i></span> = <span class="Content2_Times"><i>u</i>/<span class="Content2Symbol"><i>u</i></p>
<p class="Content2"><span class="Content2Symbol"><i>a</i></span> = arctg<span class="Content2_Times"><i>u</i>/<span class="Content2Symbol"><i>u</i></p>
<p class="cntTah9Grey">Анализ: чем быстрее движется тележка, тем больше тангенс и тем больше угол.</p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=263</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ЕГЭ 27 Демо</title>
		<link>http://kshu.su/?p=248</link>
		<comments>http://kshu.su/?p=248#comments</comments>
		<pubDate>Wed, 01 Jun 2022 02:35:30 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Информатика]]></category>

		<guid isPermaLink="false">http://kshu.su/?p=248</guid>
		<description><![CDATA[Подробные решения 27-х заданий из демонстрационных вариантов ЕГЭ по информатике за 2016, 2018-2023 г. Пример. ЕГЭ 2023 №27 Демо У медицинской компании есть N пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Подробные решения 27-х заданий из демонстрационных вариантов ЕГЭ по информатике за 2016, 2018-2023 г.</p>
<p><span id="more-248"></span></p>
<div class="Header2"><strong>Пример. ЕГЭ 2023 №27 Демо</strong></div>
<p class="Content2">У медицинской компании есть N пунктов приёма биоматериалов на анализ.  Все  пункты  расположены  вдоль  автомагистрали  и  имеют  номера,  соответствующие расстоянию от нулевой отметки до конкретного пункта.  Известно количество пробирок, которое ежедневно принимают в каждом из  пунктов.  Пробирки  перевозят  в  специальных  транспортировочных  контейнерах вместимостью не более 36 штук. Каждый транспортировочный  контейнер  упаковывается  в  пункте  приёма  и  вскрывается  только   в лаборатории.</p>
<p class="Content2">Стоимость  перевозки  биоматериалов  равна  произведению  расстояния  от  пункта  до  лаборатории  на  количество  контейнеров  с пробирками.  Общая  стоимость перевозки за день равна сумме стоимостей перевозок из каждого  пункта  в  лабораторию.  Лабораторию  расположили  в  одном  из  пунктов  приёма  биоматериалов  таким  образом,  что  общая  стоимость  доставки  биоматериалов из всех пунктов минимальна.</p>
<p class="Content2">Определите  минимальную  общую  стоимость  доставки  биоматериалов  из  всех пунктов приёма в лабораторию.</p>
<p class="Content2"><i>Входные данные</i></p>
<p class="Content2">Дано  два  входных  файла ( файл  A  и  файл  B),  каждый  из  которых   в первой строке содержит число N (1 &#8804; N &#8804; 10 000 000) – количество пунктов  приёма  биоматериалов.  В  каждой  из  следующих  N  строк  находится  два  числа:  номер  пункта  и  количество  пробирок  в  этом  пункте ( все  числа  натуральные, количество пробирок  в каждом пункте не  превышает 1000).  Пункты перечислены в порядке их расположения вдоль дороги, начиная от  нулевой отметки.</p>
<p class="Content2">В ответе укажите два числа: сначала значение искомой  величины для файла А, затем – для файла B.</p>
<p class="Content2"><i>Типовой пример организации данных во входном файле</i></p>
<p class="Content2">6</br>1 100</br>2 200</br>5 4</br>7 3</br>8 2</br>10 190</p>
<p class="Content2"><i>При  таких  исходных  данных  и  вместимости  транспортировочного  контейнера,  составляющей 96 пробирок,  компании  выгодно  открыть  лабораторию  в  пункте 2. В  этом  случае  сумма  транспортных  затрат  составит: 1&#183;2 + 3&#183;1 + 5&#183;1 + 6&#183;1 + 8&#183;2.</i></p>
<p class="Header2">Решение:</p>
<p class="Header3">Что просят?</p>
<p class="Content2">Найти такой пункт куда дешевле доставлять контейнеры с пробирками из других пунктов. Для этого нужно посчитать стоимость доставки для каждого пункта.</p>
<p class="Header3">Как считать стоимость?</p>
<p class="Content2">Пусть у нас только 4 пункта:</p>
<div id="block10x10center"><img src="wp-content/uploads/informatics/ege-c4_27_00.png" /></div>
<p class="Content2">Посчитаем стоимость доставки по формуле |расстояние| * боксы (для каждого пункта считаем расстояние к нему, умноженное на кол-во боксов каждого пункта):</p>
<table class=table_11Tahoma_noBorder>
<tr align="center">
<td width="100">|1-1|&#215;3+</td>
<td width="100">|3-1|&#215;3+</td>
<td width="100">|6-1|&#215;3+</td>
<td width="100">|9-1|&#215;3+</td>
</tr>
<tr align="center">
<td>|1-3|&#215;2+</td>
<td>|3-3|&#215;2+</td>
<td>|6-3|&#215;2+</td>
<td>|9-3|&#215;2+</td>
</tr>
<tr align="center">
<td>|1-6|&#215;4+</td>
<td>|3-6|&#215;4+</td>
<td>|6-6|&#215;4+</td>
<td>|9-6|&#215;4+</td>
</tr>
<tr align="center">
<td>|1-9|&#215;1=</td>
<td>|3-9|&#215;1=</td>
<td>|6-9|&#215;1=</td>
<td>|9-9|&#215;1=</td>
</tr>
<tr align="center">
<td>32</td>
<td>24</td>
<td>24</td>
<td>48</td>
</tr>
</table>
<p class="Content2">Последние числа – это стоимость доставки боксов в текущий пункт. Например, стоимость доставки в первый пункт равна 32, во второй 24 и т.д. Результаты получены квадратичным(неэффективным) алгоритмом:</p>
<pre><ps>
   cst[] = [0 0 0 0 0 0] <cm>; массив стоимостей</cm>
   dst[] = [1 2 5 7 8 10] <cm>; расположения пунктов</cm>
   box[] = [2 3 1 1 1 2] <cm>; боксы (контейнеры)</cm>
   Для i от 1 до N <cm>; dst[i] - предполагаемый пункт</cm>
   <cm>; dst[j] – отсюда повезём боксы(box[j]) в i-й пункт</cm>
      Для j от 1 до N 
         cst[i] = cst[i] + |dst[i]-dst[j]| &#215; box[j]
</ps></pre>
<p class="Header3">Эффективный алгоритм</p>
<p class="Content2">Получим числа 32, 24, 24, 48 эффективным(не квадратичным) способом. Для начала вычислим первое число (32):</p>
<pre><ps>
   cst[] = [0 0 0 0] <cm>; массив стоимостей</cm>
   Для i от 1 до N ;
      cst[1] = |dst[i]-dst[1]| &#215; box[i]

   <cm>; cst[] = [38 0 0 0] получили первое число</cm>
</ps></pre>
<p class="Content2">32 – это стоимость доставки в 1-й пункт из всех остальных пунктов. Сюда входят стоимости всех боксов справа от первого пункта и не входят боксы собственно 1-го пункта(1-й пункт не доставляет боксы сам себе – |1-1|&#215;3=0).</p>
<p class="Content2">Чтобы вычислить стоимости доставок в следующие пункты, воспользуемся данными о доставках, хранящихся в предыдущих пунктах. Когда мы будем получать стоимости доставок в следующие пункты, вычислять заново все боксы не нужно. Нужно лишь на каждом шаге подкорректировать данные предыдущих пунктов. Например, рассмотрим вычисление стоимости для 2-го пункта:</p>
<p class="Content2">У 2-го пункта, предыдущий пункт – 1, его стоимость 32. Это число, для 2-го пункта, содержит недостающие и лишние данные. Недостающие данные – это та стоимость, которую мы не учли для 1-го пункта: для 1-го пункта не учтены 3 бокса (свои боксы себе возить ненужно), поэтому их нужно добавить для 2-го пункта. Лишние данные – это та стоимость, которая вошла при перевозки боксов всех пунктов, но на расстояние между 2-м и 1-м пунктом. Значит нужно вычесть длину смещения между нынешним пунктом(2) и предыдущим(1) умноженное на все боксы (другими словами, после смещения вправо предыдущая стоимость содержит лишнее значение равное длине смещения умноженное на все боксы).</p>
<p class="Header3">Вычитание лишних и добавление недостающих данных</p>
<p class="Content2">Вычитание лишних данных для 2-го пункта:</p>
<pre><ps>
32 – (3-1)*2 + (3-1)*4 + (3-1)*1
</ps></pre>
<p class="Content2">но лучше так:</p>
<pre><ps>
32 – (3-1)*(2 + 4 + 1)
</ps></pre>
<p class="Content2">Такое упрощение позволит получить оптимальный способ решения задачи – вторая скобка содержит сумму всех боксов(без 1-го пункта), и поскольку кол-во боксов известно заранее, их сумму можно вычислить один раз, для одного пункта, чтобы затем использовать для остальных пунктов. Например, для 3-го пункта вычитание будет таким:</p>
<pre><ps>
…– (6-3)*(4 + 1)
</ps></pre>
<p class="Content2">т.е. для 3-го пункта двойку убрали.</p>
<p class="Content2">Теперь рассмотрим добавление недостающих данных для 2-го пункта:</p>
<pre><ps>
…+ (3-1)*3
</ps></pre>
<p class="Content2">для 3-го:</p>
<pre><ps>
…+ (6-3)*(3+2)
</ps></pre>
<p class="Content2">Общая картина вычислений начиная со 2-го пункта (1-й пункт вычислен заранее неэффективным способом):</p>
<pre><ps>
32 – (3-1)*(2 + 4 + 1) + (3-1)*3 = 24
24 – (6-3)*(4 + 1) + (6-3)*(3 + 2) = 24
24 – (9-6)*(1) + (9-6)*(3 + 2 + 4) = 48
</ps></pre>
<pre><ps>
boxes = 10 <cm>; все боксы – посчитанные на 1-м проходе</cm>
left = box[1] <cm>;left=3 боксы слева</cm>
right = boxes - left <cm>; right=7 боксы справа</cm>
Для i от 2 до N <cm>; начинаем со второго пункта</cm>
   cst[i] = cst[i-1] - (dst[i] - dst[i-1]) * right
                     + (dst[i] - dst[i-1]) * left

<cm>; dst[i]-dst[i-1] – расстояние на которое мы переместились слева направо</cm>
<cm>; cst[i] – стоимость доставки в текущий пункт</cm>
<cm>; cst[i-1] – ранее вычисленная стоимость доставки, которую нужно подкорректировать</cm>

<cm>; настроим боксы от которых ушли и к которым пришли</cm>
   right = right - box[i]   
   left = left + box[i]

<cm>; получение числа 24 из 32 для 2-го пункта:</cm>
<cm>; 24 = 32 – (3 - 1) * 7 + (3 - 1) * 3</cm>
<cm>Настраиваем указатели для 3-го пункта</cm>
<cm>; right = 7-2  к этим пришли, зн. их вычтем</cm>
<cm>; left = 3+2  от этих ушли, зн. их добавим</cm>

<cm>; получение числа 24 из 24 для 3-го пункта:</cm>
<cm>; 24 = 24 – (6 - 3) * 5 + (6 - 3) * 5</cm>
<cm>Настраиваем указатели для 4-го пункта</cm>
<cm>; right = 5-4  к этим пришли, зн. их вычтем</cm>
<cm>; left = 5+4  от этих ушли, зн. их добавим</cm>

<cm>; получение числа 48 из 24 для 4-го пункта:</cm>
<cm>; 48 = 24 – (9 - 6) * 1 + (9 - 6) * 9</cm>
</ps></pre>
<p class="Header3">Полный код на Python</p>
<pre>
f=<b>open</b>('27_B.txt')
n=<b>int</b>(f.readline())

dst=[0]*n <cm>#расположения пунктов</cm>
box=[0]*n <cm>#контейнеры(боксы)</cm>
cst=[0]*n <cm>#стоимости</cm>
boxes=0 <cm>#все контейнеры(боксы)</cm>

k=36

<b>for</b> i <b>in</b> <gr>range</gr>(n):
    x,y=<b>map</b>(<b>int</b>,f.readline().split())

    dst[i]=x
    box[i]=y//k + 1*(y%k!=0)

    cst[0] += (dst[i]-dst[0])*box[i]
    boxes += box[i]<cm>#суммируем все боксы</cm>

left = box[0]
right = boxes - left
<b>for</b> i <b>in</b> <gr>range</gr>(1,n):
    cst[i] = cst[i - 1] - (dst[i] - dst[i - 1]) * right \
                        + (dst[i] - dst[i - 1]) * left

    right -= box[i]
    left += box[i]

<b>print</b>(<b>min</b>(cst))
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2022 №27 Демо</strong></div>
<p class="Content2">Дана последовательность из <i>N</i> натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна <i>k</i> = 43. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.</p>
<p class="Content2"><i>Входные данные</i></p>
<p class="Content2">Даны два входных файла (файл <i>A</i> и файл <i>B</i>), каждый из которых содержит в первой строке количество чисел <i>N</i> (1 &#8804; <i>N</i> &#8804; 10 000 000). Каждая из следующих <i>N</i> строк содержит одно натуральное число, не превышающее 10 000.</p>
<p class="Content2">Пример организации исходных данных во входном файле:</p>
<p class="Content2">7</br>1</br>3</br>4</br>93</br>8</br>5</br>95</p>
<p class="Content2">В ответе укажите два числа: сначала значение искомой длины для файла <i>А</i>, затем – для файла <i>B</i>.</p>
<p class="Content2"><b>Предупреждение:</b> для обработки файла <i>B</i> <b>не следует</b> использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго</p>
<p class="Header3">Эффективный поиск подпоследовательности</p>
<p class="Content2">Рассмотрим суть эффективного поиска числовой подпоследовательности, сумма которой делится на нужное число без остатка. Для простоты возьмём такую последовательность, у которой две подпоследовательности делятся, например, на 10: [2 1 <markGray>5 7 8</markGray> 4 <markGray>12 8</markGray>]</p>
<p class="Content2">Просуммируем каждое число последовательности и разместим полученные суммы под числами последовательности:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">2</td>
<td width="30">1</td>
<td width="30">5</td>
<td width="30">7</td>
<td width="30">8</td>
<td width="30">4</td>
<td width="30">12</td>
<td width="30">8</td>
<td width="30">Последовательность</td>
</tr>
<tr align="center">
<td width="30">2</td>
<td width="30" bgcolor="#b6dde8">3</td>
<td width="30">8</td>
<td width="30">15</td>
<td width="30" bgcolor="#b6dde8">23</td>
<td width="30">27</td>
<td width="30">39</td>
<td width="30">47</td>
<td width="30">Суммы</td>
</tr>
</table>
<p class="Content2">Чтобы найти первую подпоследовательность (5 7 8), посмотрим на сумму, которая стоит под числом 8. Это число 23. Его можно превратить в 20, если вычесть 3, а число 3 стоит как вторая сумма. Значит, для поиска подпоследовательности, сумма которой делится на 10 без остатка, нужно из одной суммы вычесть другую: 2+1+5+7+8 – 2+1 = 5+7+8.</p>
<p class="Content2">Подпоследовательность 2 1 называют «хвостом» подпоследовательности  2 1 5 7 8, который нужно вычесть, чтобы получить нужный результат:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">2</td>
<td width="30" bgcolor="#b8cce4">1</td>
<td width="30" bgcolor="#b8cce4">5</td>
<td width="30" bgcolor="#b8cce4">7</td>
<td width="30" bgcolor="#b8cce4">8</td>
<td width="160"></td>
</tr>
<tr align="center">
<td width="30" bgcolor="#e5b8b7">2</td>
<td width="30" bgcolor="#e5b8b7">1</td>
<td width="30"></td>
<td width="30"></td>
<td width="30"></td>
<td width="130">Хвост</td>
</tr>
<tr align="center">
<td width="30"></td>
<td width="30"></td>
<td width="30" bgcolor="#d9e3bc">5</td>
<td width="30" bgcolor="#d9e3bc">7</td>
<td width="30" bgcolor="#d9e3bc">8</td>
<td width="130">Нужный результат</td>
</tr>
</table>
<p class="Content2">Как теперь найти, что из общей суммы: 2+1+5+7+8 нужно вычесть именно 2+1, чтобы гарантированно получить результат, который делится на 10 без остатка?</p>
<p class="Content2">Есть такое правило:</p>
<div id="block10x10center"><img src="wp-content/uploads/informatics/ege-c4_27_01.png" /></div>
<p class="Content2">…которое говорит, что если два числа при делении на <i>k</i> дают один и тот же остаток, то их разность делится на <i>k</i> без остатка. У нас <i>a</i> – это сумма 2+1+5+7+8, <i>b</i> – это сумма 2+1, а <i>k</i> это 10</p>
<p class="Content2">Теперь исследуем остатки, которые получатся при делении каждой суммы на 10:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">2</td>
<td width="30">1</td>
<td width="30">5</td>
<td width="30">7</td>
<td width="30">8</td>
<td width="30">4</td>
<td width="30">12</td>
<td width="30">8</td>
<td width="30">Последовательность</td>
</tr>
<tr align="center">
<td width="30">2</td>
<td width="30">3</td>
<td width="30">8</td>
<td width="30">15</td>
<td width="30">23</td>
<td width="30">27</td>
<td width="30">39</td>
<td width="30">47</td>
<td width="30">Суммы</td>
</tr>
<tr align="center">
<td width="30">2</td>
<td width="30" bgcolor="#e5b8b7">3</td>
<td width="30">8</td>
<td width="30">5</td>
<td width="30" bgcolor="#e5b8b7">3</td>
<td width="30" bgcolor="#d9e3bc">7</td>
<td width="30">9</td>
<td width="30" bgcolor="#d9e3bc">7</td>
<td width="30">Остатки</td>
</tr>
</table>
<p class="Content2">Есть одинаковые остатки! Это поможет найти и вычесть хвост у последовательности, и задача решена. Рассмотрим как следить за остатками.</p>
<p class="Header3">Массив остатков</p>
<p class="Content2">Наша задача сохранить все суммы, и пометить какой у них остаток при делении на <i>k</i>. Для этого создадим массив <i>tailSum</i> размером <i>k</i>. Индекс элемента этого массива – это остаток при делении очередной суммы на <i>k</i>. Эту сумму нам нужно занести в массив по её остатку. Тем самым мы пометим под каким остатком хранится та или иная сумма.</p>
<p class="Content2">Так вот, один и тот же остаток должен встретится ещё раз в процессе суммирования. А это значит, что в массиве <i>tailSum</i> – по индексу остатка – уже сохранена ранее сумма, и если её вычесть из общей суммы(<i>totalSum</i>), – получится нужная сумма(<i>curSum</i>).</p>
<p class="Content2">Рассмотрим всё это по шагам:</p>
<pre>
 m = [2 1 5 7 8 4 12 8]
 k = 10
 totalSum = 0
 tailSum - [0 0 0 0 0 0 0 0 0 0]

  1 шаг
 totalSum = 2
 <cm>;если tailSum[2 % k] = 0</cm>
 <cm>;то в tailSum[2 % k] = 2</cm>
 tailSum - [0 0 2 0 0 0 0 0 0 0]
  
  2 шаг
 totalSum = 3
 <cm>;если tailSum[3 % k] = 0</cm>
 <cm>;то в tailSum[3 % k] = 3</cm>
 tailSum - [0 0 2 3 0 0 0 0 0 0]
  
  3 шаг
 totalSum = 8
 <cm>;если tailSum[8 % k] = 0</cm>
 <cm>;то в tailSum[8 % k] = 8</cm>
 tailSum - [0 0 2 3 0 0 0 0 8 0]
  
  4 шаг
 totalSum = 15
 <cm>;если tailSum[15 % k] = 0</cm>
 <cm>;то в tailSum[15 % k] = 15</cm>
 tailSum - [0 0 2 3 0 15 0 0 8 0]
  
  5 шаг
 totalSum = 23
 <cm>;если tailSum[23 % k] != 0</cm>
 <cm>;то curSum = totalSum - tailSum[23 % k] 23 – 3</cm>
 curSum = 20 <cm>;нужная сумма</cm>
</pre>
<p class="Header3">Программа на Python</p>
<pre>
   m = [2,1,5,7,8,4,12,8] <cm>#данная последовательность</cm>
   n = <b>len</b>(m)
   k = 10
   totalSum = 0
   tailSum = [0]*k  <cm>#[0 0 0 0 0 0 0 0 0 0]</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      totalSum += m[i]
      r = totalSum % k
      <b>if</b> tailSum[r] == 0: <cm>#был ли такой остаток или нет?</cm>
      <cm># такого остатка ещё не было =>
      сохраняем сумму(потенциальный хвост)
      и помечаем под каким она остатком</cm>
         tailSum[r] = totalSum
      <b>else</b>: <cm>#такой остаток уже есть => 
      вычитаем предыдущую сумму(хвост) из текущей</cm>
         curSum = totalSum - tailSum[r]
</pre>
<p class="Header3">Длина подпоследовательности</p>
<p class="Content2">Длина подпоследовательности – это разность между двумя значениями циклической переменной <i>i</i>. Первое значение (начало подпоследовательности) сохраним в массив <i>tailLen</i>. Второе значение (конец подпоследовательности). Первое значение соответствует моменту, когда мы сохраняли первую сумму для отсечения хвоста, второе – когда нашли в <i>tailSum</i> не нулевое значение. Следовательно, <i>tailLen</i> аналогичен <i>tailSum</i>:</p>
<pre>
   …
   tailLen = [0]*k
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      …
      <b>if</b> tailSum[r] == <b>None</b>:
         …
         <cm>#i – первое значение длины - сохраним в tailLen</cm>
		 tailLen[r] = i
      <b>else</b>:
          …
		 <cm>#i – второе значение длины - из него вычтем первое</cm>
         curLen = i - tailLen[r]

</pre>
<p class="Header3">
<p class="Header3">Максимальная и самая короткая сумма</p>
<p class="Content2">Максимальная сумма находится обычным делом. Кроме этого, текущая сумма может быть равной максимальной(встретились две одинаковые нужные суммы), тогда нужно убедиться, что кол-во элементов текущей суммы(<i>currLen</i>) меньше кол-ва элементов максимальной суммы(<i>maxSum</i>). Раз так –  модифицируем переменные <i>maxSum</i> и <i>minLen</i> текущими значениями суммы и длины:</p>
<pre>
   …
   maxSum = minLen = 0
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
   …
   <b>else:</b>
      …
      <b>if</b> curSum > maxSum <b>or</b> \
         (curSum == maxSum <b>and</b> curLen < minLen):
            maxSum = curSum
            minLen = curLen


</pre>
<p class="Header3">Полный код на Python (подпоследовательность не сначала)</p>
<pre>
   m = [2,1,5,7,8,4,12,8]
   n = <b>len</b>(m)
   tailSum=[0]*k
   tailLen=[0]*k
   minLen=<b>float</b>(<gr>'inf'</gr>)
   totalSum=curSum=maxSum=curLen=0
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      totalSum += m[i]
      r = totalSum % k
       <b>if</b> tailSum[r] == 0:
          tailSum[r] = totalSum 
          tailLen[r] = i
       <b>else</b>: 
          curSum = totalSum - tailSum[r]
          curLen = i - tailLen[r]
          <b>if</b> curSum > maxSum <b>or</b> \
            curSum == maxSum <b>and</b> curLen < minLen:
             maxSum = curSum
             minLen = curLen
   <b>print</b>(minLen,)
</pre>
<p class="Content2">Если нужная подпоследовательность вначале массива, то остаток <i>r</i> равен нулю, а <i>totalSum</i> – есть найденная сумма. При увеличении <i>totalSum</i> – сумма будет увеличиваться, значит проверять на максимум не нужно. Остаётся проверить длину на минимум:</p>
<p class="Header3">Полный код на Python (подпоследовательность сначала)</p>
<pre>
   m=[5,7,8,8,4,12]
   n = <b>len</b>(m)
   tailSum=[0]*k
   tailLen=[0]*k
   minLen=<b>float</b>(<gr>'inf'</gr>)
   totalSum=curSum=maxSum=curLen=0
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      totalSum += m[i]
      r = totalSum % k
       <b>if</b> r == 0 <b>and</b> i < minLen:
          maxSum = totalSum 
          minLen = i+1
   <b>print</b>(minLen,)
</pre>
<p class="Header3">Полный код на Python</p>
<pre>
   f=<b>open</b>('27_B.txt')
   n=<b>int</b>(f.readline())
   k=43
   totalSum=curSum=maxSum=curLen=0
   tailSum=[0]*k
   tailLen=[0]*k
   minLen=<b>float</b>(<gr>'inf'</gr>)
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      totalSum+=<b>int</b>(f.readline())
      r=totalSum%k
      <b>if</b> r!=0:
         <b>if</b> tailSum[r] == 0:
            tailSum[r] = totalSum
            tailLen[r] = i
         <b>else</b>:
            curSum = totalSum - tailSum[r]
            curLen = i - tailLen[r]
            <b>if</b> curSum > maxSum <b>or</b> \
              curSum == maxSum <b>and</b> curLen < minLen:
               maxSum = curSum
               minLen = curLen
      <b>elif</b> i < minLen:
         maxSum = totalSum
         minLen = i+1
<b>print</b>(minLen)
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2021 №27 Демо</strong></div>
<p class="Content2">Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно.</p>
<p class="Content2">Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.</p>
<p class="Content2">Входные данные</p>
<p class="Content2">Даны два входных файла (файл <i>A</i> и файл <i>B</i>), каждый из которых содержит в первой строке количество пар <i>N</i> (1 &#8804; <i>N</i> &#8804; 10 000 000). Каждая из следующих <i>N</i> строк содержит два натуральных числа, не превышающих 10 000.</p>
<p class="Content2">Пример организации исходных данных во входном файле:</p>
<p class="Content2">6</br>1 3</br>5 12</br>6 9</br>5 4</br>3 3</br>1 1</p>
<p class="Content2">Для указанных входных данных значением искомой суммы должно быть число 32. </p>
<p class="Content2">В ответе укажите два числа: сначала значение искомой длины для файла <i>А</i>, затем – для файла <i>B</i>.</p>
<p class="Content2"><b>Предупреждение:</b> для обработки файла <i>B</i> <b>не следует</b> использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго</p>
<p class="Header3">Сумма максимумов</p>
<p class="Content2">Выберем данную последовательность из шести пар и просуммируем максимальное число каждой пары:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">1</td>
<td width="30" bgcolor="#b6dde8">3</td>
</tr>
<tr align="center">
<td width="30">5</td>
<td width="30" bgcolor="#b6dde8">12</td>
</tr>
<tr align="center">
<td width="30">6</td>
<td width="30" bgcolor="#b6dde8">9</td>
</tr>
<tr align="center">
<td width="30" bgcolor="#b6dde8">5</td>
<td width="30">4</td>
</tr>
<tr align="center">
<td width="30" bgcolor="#b6dde8">3</td>
<td width="30">3</td>
</tr>
<tr align="center">
<td width="30" bgcolor="#b6dde8">1</td>
<td width="30">1</td>
</tr>
</table>
<pre>
   l = [1,5,6,5,3,1] <cm># первое число пары</cm>
   r = [3,12,9,4,3,1] <cm># второе число пары</cm>
   n = len(l) <cm># а можно и len(r)</cm>
   s = 0
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      a=l[i]; b=r[i]
      s += <b>max</b>(a, b)
</pre>
<p class="Content2">Сумма будет 33(переменная <i>s</i>). Если бы сумма не делилась на 3, то она бы являлась ответом. Но она делится, значит, одно максимальное число(неважно какое), которое попало в сумму, нужно поменять на минимальное из той же пары – да так поменять, что это минимальное в паре число, должно быть самым минимальным среди всех минимальных(это условие максимально возможной суммы).</p>
<p class="Content2">
<p class="Content2">
<p class="Header3">Поиск нужного минимума</p>
<p class="Content2">В нашем примере, вместо максимального числа 5, нужно использовать 4. Как его найти эффективно?</p>
<p class="Content2">В процессе суммирования находим минимальную разницу между парами, которая не делится на 3:</p>
<pre>
   ...
   min = 10001
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      ...
      d = <b>abs</b>(a-b)
      <b>if</b>(d%3 != 0) <b>and</b> (d < min):
         min = d
</pre>
<p class="Content2">Единица в последней паре не подойдёт в качестве минимума, потому что оба числа пары равны и от того первое выражение условия даст отрицание.</p>
<p class="Header3">Вывод на экран</p>
<p class="Content2">Переменную <i>min</i> применим, если сумма делится на 3, иначе выведем сумму:</p>
<pre>
   ...
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      ...
   <b>if</b> s%3==0:
      <b>print</b>(s-min)
   <b>else</b>:
      <b>print</b>(s)
</pre>
<p class="Header3">Полный код на Python</p>
<pre>
   f = <b>open</b>('27.txt')
   n = <b>int</b>(f.readline())
   s = 0
   min = 10001
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      a,b = <b>map</b>(<b>int</b>,f.readline().split())
      s += <b>max</b>(a,b)
      d = <b>abs</b>(a-b)
      <b>if</b>(d%3 != 0) <b>and</b> (d < min):
         min = d
<cm># вывод на экран</cm>
   <b>if</b> s%3==0:
      <b>print</b>(s-min)
   <b>else</b>:
      <b>print</b>(s)
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2020 №27 Демо</strong></div>
<p class="Content2">На вход программы поступает последовательность из <i>n</i> целых положительных чисел. Рассматриваются все пары элементов последовательности <i>a<sub>i</sub></i> и <i>a<sub>j</sub></i>, такие что <i>i</i> < <i>j</i> и <i>a<sub>i</sub></i> > <i>a<sub>j</sub></i> (первый элемент пары больше второго; <i>i</i> и <i>j</i>  – порядковые номера чисел в последовательности входных данных). Среди пар, удовлетворяющих этому условию, необходимо найти и напечатать пару с максимальной суммой элементов, которая делится на <i>m</i> = 120. Если среди найденных пар максимальную сумму имеют несколько, то можно напечатать любую из них.</p>
<p class="Content2"><b>Описание входных и выходных данных</b></p>
<p class="Content2">В первой строке входных данных задаётся количество чисел <i>n</i> (2 &#8804; <i>n</i> &#8804; 12 000). В каждой из последующих <i>n</i> строк записано одно целое положительное число, не превышающее 10 000.</p>
<p class="Content2">В качестве результата программа должна напечатать элементы искомой пары. Если таких пар несколько, можно вывести любую из них. Гарантируется, что хотя бы одна такая пара в последовательности есть.</p>
<p class="Content2"><i>Пример входных данных:</i></p>
<p class="Content2">6</br>60</br>140</br>61</br>100</br>300</br>59</p>
<p class="Content2"><i>Пример выходных данных для приведённого выше примера входных данных:</i></p>
<p class="Content2">140 100</p>
<p class="Content2"><i>Пояснение.</i>Из шести заданных чисел можно составить три пары, сумма элементов которых делится на m=120: 60+300, 140+100 и 61+59. Во второй и третьей из этих пар первый элемент больше второго, но во второй паре сумма больше.</p>
<p class="Content2">Требуется написать эффективную по времени и памяти программу для решения описанной задачи.</p>
<p class="Header3">Поиск пары</p>
<p class="Content2">Пары будут двух типов: каждый элемент пары не кратный <i>m</i>, а сумма элементов кратна, и каждый элемент пары кратный <i>m</i> – сумма также кратна.</p>
<p class="Content2">Рассмотрим, как искать пару, сумма которой кратна <i>m</i>, но каждый элемент не кратный. Есть правило:</p>
<div id="block10x10center"><img src="wp-content/uploads/informatics/ege-c4_27_02.png" /></div>
<p class="Content2">которое говорит, что если два числа при делении на <i>m</i> дают остатки, сумма которых делится на <i>m</i>, то и сумма чисел делится на <i>m</i>. Например: пусть <i>m</i>=5, <i>a</i>=8 и <i>b</i>=12, тогда:</p>
<div id="block10x10center"><img src="wp-content/uploads/informatics/ege-c4_27_03.png" /></div>
<p class="Content2">Теперь как найти, среди последовательности чисел, пару 8 и 12, сумма которой делится на 5.</p>
<p class="Content2">Удобнее всего через так называемый массив остатков <i>r</i> размером <i>m</i>. На самом деле элементы этого массива – это числа последовательности, а индексы этих элементов – остатки от деления элементов на <i>m</i>. Пусть наши 8 и 12 расположены в такой последовательности: [ 8 14 12 ], тогда массив остатков <i>r</i>[<i>m</i>] будет таким:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td>массив <i>r</i></td>
</tr>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30" bgcolor="#b6dde8">14</td>
<td>r[14 % 5]=14</td>
</tr>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30" bgcolor="#b6dde8">8</td>
<td width="30">14</td>
<td>r[8 % 5]=8</td>
</tr>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30" bgcolor="#b6dde8">12</td>
<td width="30">8</td>
<td width="30">14</td>
<td>r[12 % 5]=12</td>
</tr>
<tr align="center">
<td width="30">[0]</td>
<td width="30">[1]</td>
<td width="30">[2]</td>
<td width="30">[3]</td>
<td width="30">[4]</td>
<td>индексы-остатки </td>
</tr>
</table>
<p class="Content2">Мы ищем пару по индексам: пусть под одним индексом есть ненулевой элемент массива, тогда если мы обнаруживаем, что есть ещё ненулевой элемент, индекс которого даёт сумму с первым индексом кратную 5, то сумма элементов также кратна 5.</p>
<p class="Content2">Как найти 2-й индекс? По <i>m</i> и по 1-му индексу: 2-й индекс = <i>m</i> – 1-й индекс. В нашем случае 2-й индекс это 3, а 1-й – это 2. Всё потому что, когда мы проверяем число 8(индекс 3) - его пара под индексом 2 хранит нулевое значение и поэтому по 3-му индексу пару найти невозможно:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30" bgcolor="#e5b8b7">0</td>
<td width="30" bgcolor="#b6dde8">8</td>
<td width="30">14</td>
<td><i>r</i>[5 - 3] это 0</td>
</tr>
<tr align="center">
<td width="30">[0]</td>
<td width="30">[1]</td>
<td width="30">[2]</td>
<td width="30">[3]</td>
<td width="30">[4]</td>
<td>индексы-остатки </td>
</tr>
</table>
<p class="Content2">Но когда проверяем число 12 (индекс 2) - его пара под индексом 3 хранит не нулевое значение:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">8</td>
<td width="30">14</td>
<td></td>
</tr>
<tr align="center">
<td width="30">0</td>
<td width="30">0</td>
<td width="30" bgcolor="#b6dde8">12</td>
<td width="30" bgcolor="#d9e3bc">8</td>
<td width="30">14</td>
<td><i>r</i>[5 - 2] это 12</td>
</tr>
<tr align="center">
<td width="30">[0]</td>
<td width="30">[1]</td>
<td width="30">[2]</td>
<td width="30">[3]</td>
<td width="30">[4]</td>
<td>индексы-остатки </td>
</tr>
</table>
<p class="Content2">Вот тогда то, мы и находим нужную пару:</p>
<pre> 
   m = 5
   d = [8,14,12] <cm># последовательность</cm>
   r = [0,0,0,0,0] <cm># массив «остатков»</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>len</gr>(d)):
      a = d[i] <cm># a удобнее чем d[i]</cm>
      p = a % m
      <b>if</b> r[m-p]>0: <cm># false при a=8, true при a=12</cm> 
         <b>print</b> (r[m-p], " ", a) <cm># 8 12</cm>
      r[p] = a <cm># заполняем массив остатков (пока они различны)</cm>
</pre>
<p class="Header3">Первый больше второго</p>
<p class="Content2">По условию, первый элемент пары должен быть больше, значит наша последовательность - [ 8 14 12 ] - не содержит нужной пары. Поменяем местами 8 и 12 и в условии учтём, что предыдущий сохранённый элемент массива остатков больше чем текущий:</p>
<pre> 
   m = 5
   d = [12,14,8] <cm># последовательность</cm>
   r = [0,0,0,0,0] <cm># массив «остатков»</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>len</gr>(d)):
      a = d[i] <cm># a удобнее чем d[i]</cm>
      p = a % m
      <b>if</b> r[m-p]>a: <cm># предыдущий r[m-p] больше текущего a</cm> 
         <b>print</b> (r[m-p], " ", a) <cm># 8 12</cm>
      r[p] = a <cm># заполняем массив остатков (пока они различны)</cm>
</pre>
<p class="Content2">Теперь предыдущая последовательность - в связи с тем, что она неправильная - не будет найдена.</p>
<p class="Header3">Пара с максимальной суммой</p>
<p class="Content2">По условию, нужная пара должна давать максимальную сумму среди всех нужных пар, т.е. пар может быть несколько, а выбрать нужно ту, которая даёт максимальную сумму. Добавим в условие выражение, которое сравнивает сумму текущей пары с парой сохранённой ранее</p>
<p class="Content2">Кроме этого, нужно учесть, что в последовательности может быть не одно число с одним и те же остатком, тогда если оно больше предыдущего, то в массиве остатков меняем предыдущее на текущее. Если остатки разные, то массив остатков будет заполняться, так же как и раньше:</p>
<pre> 
   m = 5
   d = [22,38,8,14,2] <cm># Нужная 38 и 2 среди ещё одной 22 и 8</cm>
   r = [0,0,0,0,0] <cm># массив «остатков»</cm>
   left = 0; right = 0 <cm># элементы нужной пары</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>len</gr>(d)):
      a = d[i] <cm># a удобнее чем d[i]</cm>
      p = a % m
      <b>if</b> r[m-p]>a <b>and</b> r[m-p]+a > left+right:
         left = r[m-p]
         right = a
      <b>if</b> a>r[p]: <cm># a > предыдущего с таким же остатком</cm>
         r[p] = a <cm># значит заменим его на a</cm>
   <b>print</b> (l, " ", r) <cm># 38 2</cm>
</pre>
<p class="Content2">Один тип пары мы выбрали, переходим к другому типу – каждый элемент которого кратный <i>m</i>.</p>
<p class="Header3">Пара элементов кратные <i>m</i></p>
<p class="Content2">Случай с одной парой, причём пусть, первый элемент меньше второго(далее исправим): [10, 14, 15]</p>
<pre> 
   m = 5
   d = [5,14,10] <cm># последовательность</cm>
   r = [0,0,0,0,0] <cm># массив «остатков»</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>len</gr>(d)):
      a = d[i] <cm># a удобнее чем d[i]</cm>
      p = a % m
      <b>if</b> r[m-p]>0: <cm># false при a=8, true при a=12</cm> 
         <b>print</b> (r[m-p], " ", a) <cm># 8 12</cm>
      r[p] = a <cm># заполняем массив остатков (пока они различны)</cm>
</pre>
<p class="Header3">Первый больше второго(среди кратных <i>m</i>)</p>
<p class="Content2">Поменяем местами 5 и 10, затем изменим условие:</p>
<pre> 
   m = 5
   d = [10,14,5] <cm># последовательность</cm>
   r = [0,0,0,0,0] <cm># массив «остатков»</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>len</gr>(d)):
      a = d[i] <cm># a удобнее чем d[i]</cm>
      p = a % m
      <b>if</b> r[0]>a: <cm># предыдущий r[0] больше текущего a</cm> 
         <b>print</b> (r[0], " ", a) <cm># 10 5</cm>
      r[p] = a <cm># заполняем массив остатков (пока они различны)</cm>
</pre>
<p class="Content2">Теперь предыдущая последовательность, в связи с тем, что она неправильная, не будет найдена.</p>
<p class="Header3">Пара с максимальной суммой(среди кратных <i>m</i>)</p>
<p class="Content2">Аналогично соответствующему пункту данной задачи добавим переменные для максимальных элементов пар и изменим условие:</p>
<pre> 
   m = 5
   d = [10,35,5,14,15] <cm># Нужная 35 и 15, ненужная 22 и 8</cm>
   r = [0,0,0,0,0] <cm># массив «остатков»</cm>
   left = 0; right = 0 <cm># элементы нужной пары</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>len</gr>(d)):
      a = d[i] <cm># a удобнее чем d[i]</cm>
      p = a % m
      <b>if</b> r[0]>a <b>and</b> r[0]+a > left + right:
         left = r[0]
         right = a
      <b>if</b> a>r[p]: <cm># a > предыдущего с таким же остатком</cm>
         r[p] = a <cm># значит заменим его на a</cm>
   <b>print</b> (l, " ", r) <cm># 35 15</cm>
</pre>
<p class="Content2">Теперь учтём, что может быть два типа пар.</p>
<p class="Header3">Полный код на Python</p>
<pre> 
   d = [10,35,5,14,15,22,38,8,14,2]
   m = 120
   r = [0] * m <cm># числа, которых ищут по остатку</cm>
   left=0; right=0
   n = <gr>len</gr>(d)
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      a = d[i]
      p = a % m
      <b>if</b> p == 0: <cm># кратные m</cm>
         <b>if</b> r[0] > a <b>and</b> r[0] + a > left+right:
            left = r[0]
            right = a
      <b>else</b>:<cm># не кратные m</cm>
         <b>if</b> r[m-p]>a <b>and</b> r[m-p]+a > left+right:
            left = r[m-p]
            right = a
      <b>if</b> a>r[p]: <cm># a > предыдущего с таким же остатком</cm>
         r[p] = a
   <b>print</b>(l," ",r)
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2019 №27 Демо</strong></div>
<p class="Content2">На вход программы поступает последовательность из <i>N</i> целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 4 (разница в индексах элементов пары должна быть 4 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 29.</p>
<p class="Content2"><b>Описание входных и выходных данных</b></p>
<p class="Content2">В первой строке входных данных задаётся количество чисел <i>N</i> (4 &#8804; <i>N</i> &#8804; 1000). В каждой из последующих <i>N</i> строк записано одно целое положительное число, не превышающее 10 000.</p>
<p class="Content2">В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 4, в которых произведение элементов кратно 29.</p>
<p class="Content2"><i>Пример входных данных:</i></p>
<p class="Content2">7</br>58</br>2</br>3</br>5</br>4</br>1</br>29</p>
<p class="Content2"><i>Пример выходных данных для приведённого выше примера входных данных:</i></p>
<p class="Content2">5</p>
<p class="Content2"><i>Пояснение.</i>Из 7 заданных элементов с учётом допустимых расстояний между ними можно составить 6 произведений: 58&#183;4, 58&#183;1, 58&#183;29, 2&#183;1, 2&#183;29, 3&#183;29. Из них на 29 делятся 5 произведений.</p>
<p class="Content2">Требуется написать эффективную по времени и памяти программу для решения описанной задачи.</p>
<p class="Content2">Программа считается эффективной по времени, если при увеличении количества исходных чисел <i>N</i> в <i>k</i> раз время работы программы увеличивается не более чем в <i>k</i> раз.</p>
<p class="Content2">Внимание! Для простоты, вместо деления на 29 будем проверять на чётность.</p>
<p class="Header3">Эффективный алгоритм по времени, но не по памяти</p>
<p class="Content2">Будем умножать конкретное число <b><i>x</i></b> с остальными числами последовательности, которые стоят на расстоянии &#8805; 4 от <b><i>x</i></b>. Следовательно, ближайшие к <b><i>x</i></b> три числа пропускаем мимо. <b><i>x</i></b>.</p>
<p class="Content2">Закрасим ненужные 3 числа красным, <b><i>x</i></b> – зелёным, а умножаемые с <b><i>x</i></b>–ом числа – синим цветом.</p>
<p class="Content2">Может быть два случая:</p>
<ol class="align_justify">
<li><b><i>x</i></b> – чётный</li>
<li><b><i>x</i></b> – нечётный</li>
</ol>
<p class="Content2"><b>Тогда суммируем либо все синие числа(случай 1), либо только те синие, которые делятся на 2 (случай 2).</b></p>
<p class="Content2">В 1-м случае кол-во чётных результатов будет равно кол-ву произведений <b><i>x</i></b>–а с числами синего цвета:</p>
<p class="Content2">шаг 1</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">8</td>
<td width="30" bgcolor="#e5b8b7">3</td>
<td width="30" bgcolor="#e5b8b7">4</td>
<td width="30" bgcolor="#e5b8b7">7</td>
<td width="30" bgcolor="#c2d69b">6</td>
<td width="30">2</td>
<td width="30">1</td>
<td width="30">4</td>
</tr>
</table>
<p class="Content2">одно произведение: 6 * 8, здесь <b><i>x</i></b> = 6, он на 5-ом месте последовательности (нумерация с 1)</p>
<p class="Content2">шаг 2</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">8</td>
<td width="30" bgcolor="#b8cce4">3</td>
<td width="30" bgcolor="#e5b8b7">4</td>
<td width="30" bgcolor="#e5b8b7">7</td>
<td width="30" bgcolor="#e5b8b7">6</td>
<td width="30" bgcolor="#c2d69b">2</td>
<td width="30">1</td>
<td width="30">4</td>
</tr>
</table>
<p class="Content2">два произведения: 2 * 8 и 2 * 3, здесь <b><i>x</i></b> = 2, он на 2-ом месте последовательности</p>
<p class="Content2">шаг 4</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">8</td>
<td width="30" bgcolor="#b8cce4">3</td>
<td width="30" bgcolor="#b8cce4">4</td>
<td width="30" bgcolor="#b8cce4">7</td>
<td width="30" bgcolor="#e5b8b7">6</td>
<td width="30" bgcolor="#e5b8b7">2</td>
<td width="30" bgcolor="#e5b8b7">1</td>
<td width="30" bgcolor="#c2d69b">4</td>
</tr>
</table>
<p class="Content2">четыре произведения: 4 * 8, 4 * 3, 4 * 4, 4 * 7, здесь <b><i>x</i></b> = 4, он на 8-ом месте последовательности</p>
<p class="Content2">В 2-м случае кол-во чётных результатов будет равно только кол-ву чётных синих чисел:</p>
<p class="Content2">шаг 3</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">8</td>
<td width="30" bgcolor="#b8cce4">3</td>
<td width="30" bgcolor="#b8cce4">4</td>
<td width="30" bgcolor="#e5b8b7">7</td>
<td width="30" bgcolor="#e5b8b7">6</td>
<td width="30" bgcolor="#e5b8b7">2</td>
<td width="30" bgcolor="#c2d69b">1</td>
<td width="30">4</td>
</tr>
</table>
<p class="Content2">два произведения: 1*8 и 1*4, здесь <b><i>x</i></b> = 1, он на 7-ом месте последовательности</p>
<p class="Content2">Для 1-го случая считать чётные произведения будет разница положения <b><i>x</i></b>–а и кол-во розовых чисел:</p>
<pre>
   count = count + x – 3
</pre>
<p class="Content2">Для 2-го случая понадобится переменная, которая считает чётные синие числа</p>
<pre>
   count = count + b <cm>;где b уже знает сколько чётных синих</cm>
</pre>
<p class="Content2">Остаётся считать кол-во чётных синих чисел:</p>
<pre>
   b = b + 1
</pre>
<p class="Content2">Полный код на Python</p>
<pre>
   d = 4 <cm>#расстояние до ближайшего нужного числа</cm>
   a = [8,3,4,7,6,2,1,4]
   n = len(a)
   count = 0 <cm>#кол-во чётных пар всего</cm>
   b = 0 <cm>#кол-во чётных синих чисел</cm>
   for i in range(d,n): <cm>#прицеливаемся на x=6</cm>
      if a[i-d]%2 == 0:
         b += 1
      if a[i]%2 == 0: <cm>#x делится на то что нужно?</cm>
         count += i-d+1 <cm>#count=count+x-3</cm>
      else:
         count += b
   print(count)
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2018 №27 Демо</strong></div>
<p class="Content2">На  вход  программы  поступает  последовательность  из  <i>N</i>  целых  положительных  чисел,  все  числа  в  последовательности  различны.  Рассматриваются  все  пары  различных  элементов  последовательности  (элементы  пары  не  обязаны  стоять  в  последовательности  рядом, порядок  элементов в  паре не важен). Необходимо определить количество пар, для  которых произведение элементов делится на 26.</p>
<p class="Content2"><b>Описание входных и выходных данных</b></p>
<p class="Content2">В первой строке входных данных задаётся количество чисел <i>N</i> (4 &#8804; <i>N</i> &#8804; 1000). В каждой из последующих <i>N</i> строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество  пар, в которых произведение элементов кратно 26.</p>
<p class="Content2"><i>Пример входных данных:</i></p>
<p class="Content2">4</br>2</br>6</br>13</br>39</p>
<p class="Content2"><i>Пример выходных данных для приведённого выше примера входных данных:</i></p>
<p class="Content2">4</p>
<p class="Content2"><i>Пояснение.</i>Из  четырёх  заданных  чисел  можно  составить 6 попарных  произведений: 2&#183;6, 2&#183;13, 2&#183;39, 6&#183;13, 6&#183;39, 13&#183;39 (результаты: 12, 26, 78, 78, 234,  507).  Из  них  на 26 делятся 4 произведения (2&#183;13=26; 2&#183;39=78; 6&#183;13=78;  6&#183;39=234).</p>
<p class="Content2">Требуется написать эффективную по времени и по памяти программу для решения описанной задачи.</p>
<p class="Content2">Программа считается эффективной по времени, если при увеличении количества исходных чисел <i>N</i> в <i>k</i> раз время работы программы увеличивается не более чем в <i>k</i> раз.</p>
<p class="Header2">Решение</p>
<p class="Content2">Пример входных данных неудачный: он не содержит чисел 26, поэтому мы не можем учесть такие пары, в которых либо ОБА элемента делятся на 26, либо ТОЛЬКО ОДИН. Пусть будет такая последовательность: 26 3 8 52 78. Из неё получаем неповторяющиеся пары: 26-3, 26-8, 26-52, 26-78, 3-8, 3-52, 3-78, 8-52, 8-78, 52-78. Теперь посчитаем, сколько будет произведений пар, которые делятся на 26.</p>
<p class="Header3">ОБА элемента делятся на 26</p>
<p class="Content2">Если оба элемента делятся на 26, то и их произведения тоже делятся. Из неповторяющихся пар, есть три пары, у которых оба элемента делятся на 26: 26-52, 26-78, 52-78. Формула, которая вычисляет кол-ва таких пар: (n26&#183;(n26-1))/2, где n26 – это количество чисел в последовательности, которые делятся на 26. У нас n26=3(26,52 и 78), значит (3&#183;(3-1))/2=3</p>
<p class="Header3">ТОЛЬКО ОДИН элемент делится на 26</p>
<p class="Content2">Шесть пар, у которых только один элемент делится на 26: 26-3, 26-8, 3-52, 3-78, 8-52, 8-78. Формула, которая вычисляет кол-ва таких пар: n26&#183;(n-n26), где n – это количество чисел в последовательности. У нас n=5, значит 3&#183;(5-3)=6</p>
<p class="Header3">26=2&#183;13</p>
<p class="Content2">Теперь, случай, где элементы не кратны 26, но их произведение дадут число 26. Это число можно получить по двум множителям: 2 и 13. Значит нужно посчитать кол-во пар, у которых один элемент 2, другой 13. Для этого есть формула: n2&#183;n13, где n2 – это кол-во чисел, которые делятся на 2 и n13 – кол-во чисел, которые делятся на 13.</p>
<p class="Header3">Полный код на Python</p>
<pre>
   f = <b>open</b>('2018_27.txt') <cm>#4 2 6 13 39</cm>
   n = <b>int</b>(f.readline())<cm>#n=4</cm>
   n26 = n2 = n13 = 0
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      x = <b>int</b>(f.readline())
      <b>if</b> x%26 == 0:
         n26 += 1
      <b>elif</b> x%13 == 0:
         n13 += 1
      <b>elif</b> x%2 == 0:
         n2 += 1      
   <b>print</b>((n26*(n26-1))//2+n26*(n-n26)+n2*n13)
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2016 №27 Демо</strong></div>
<p class="Content2">В  физической  лаборатории  проводится  долговременный  эксперимент   по изучению гравитационного поля Земли. По каналу связи каждую минуту   в лабораторию передаётся положительное целое число – текущее показание  прибора «Сигма 2015». Количество  передаваемых  чисел  в  серии известно   и не превышает 10 000. Все числа не превышают 1000. Временем, в течение  которого происходит передача, можно пренебречь.  Необходимо  вычислить « бета-значение»  серии  показаний  прибора –  минимальное  чётное  произведение  двух  показаний,  между  моментами  передачи  которых  прошло  не  менее 6 минут.  Если  получить  такое  произведение не удаётся, ответ считается равным –1.</p>
<p class="Content2">Напишите программу  для решения  поставленной  задачи,  которая будет  эффективна как по времени, так и по памяти (или хотя бы по одной из этих  характеристик).   Программа  считается  эффективной  по  времени,  если  время  работы  программы пропорционально количеству полученных показаний прибора <i>N</i>,  т.е.  при  увеличении  <i>N</i>  в  <i>k</i>  раз  время  работы  программы  должно  увеличиваться не более чем в <i>k</i> раз.  Программа  считается  эффективной  по  памяти,  если  размер  памяти,  использованной  в программе для хранения  данных, не  зависит от  числа <i>N</i>  и не превышает 1 килобайта.</p>
<p class="Content2">Входные  данные  представлены  следующим  образом.  В  первой  строке  задаётся число <i>N</i> – общее количество показаний прибора. Гарантируется, что  <i>N</i> > 6. В каждой из следующих <i>N</i> строк задаётся одно положительное целое  число – очередное показание прибора.</p>
<p class="Content2"><i>Пример входных данных:</i></p>
<p class="Content2">11</br>12</br>45</br>5</br>3</br>17</br>23</br>21</br>20</br>19</br>18</br>17</p>
<p class="Content2">Программа должна вывести одно число – описанное в условии произведение  либо –1, если получить такое произведение не удаётся.</p>
<p class="Content2"><i>Пример выходных данных для приведённого выше примера входных данных: 54</i></p>
<p class="Header2">Решение</p>
<p class="Content2">Пусть для простоты расстояние будет не 6, а 3, и возьмём небольшие числа: 6 1 3 5 7 9 2 4 8. После того как составим алгоритм заменим 3 на 6.</p>
<p class="Header3">Множители на расстоянии</p>
<p class="Content2">Сохраним 1-ые 3 элемента входных данных в массив. Затем настроимся к оставшимся числам последовательности:</p>
<pre>
   a = [6 1 3 5 7 9 2 4 8]
   m = [6 1 3] <cm># сохраняем первые 3</cm> 
   <b>for</b> i <b>in</b> <gr>range</gr>(3,n):<cm># i = [3..n)</cm>
</pre>
<p class="Content2">Получилась заготовка для обращений чисел, расположенных на расстоянии трёх элементов. Элементы массива <i>m</i> выделены синим цветом, а нужные элементы массива <i>a</i> – зелёным.</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">6</td>
<td width="30" bgcolor="#b8cce4">1</td>
<td width="30" bgcolor="#b8cce4">3</td>
<td width="30" bgcolor="#c2d69b">5</td>
<td width="30" bgcolor="#c2d69b">7</td>
<td width="30" bgcolor="#c2d69b">9</td>
<td width="30" bgcolor="#c2d69b">2</td>
<td width="30" bgcolor="#c2d69b">4</td>
<td width="30" bgcolor="#c2d69b">8</td>
</tr>
</table>
<p class="Header3">Умножение</p>
<p class="Content2">Схема умножения для первых трёх шагов:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#b8cce4">6</td>
<td width="30">1</td>
<td width="30">3</td>
<td width="30" bgcolor="#c2d69b">5</td>
<td width="30">7</td>
<td width="30">9</td>
<td width="30">2</td>
<td width="30">4</td>
<td width="30">8</td>
</tr>
</table>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">6</td>
<td width="30" bgcolor="#b8cce4">1</td>
<td width="30">3</td>
<td width="30">5</td>
<td width="30" bgcolor="#c2d69b">7</td>
<td width="30">9</td>
<td width="30">2</td>
<td width="30">4</td>
<td width="30">8</td>
</tr>
</table>
<table class=table_10CorierNew>
<tr align="center">
<td width="30">6</td>
<td width="30">1</td>
<td width="30" bgcolor="#b8cce4">3</td>
<td width="30">5</td>
<td width="30">7</td>
<td width="30" bgcolor="#c2d69b">9</td>
<td width="30">2</td>
<td width="30">4</td>
<td width="30">8</td>
</tr>
</table>
<p class="Content2">Перед умножением элемента массива <i>m</i>, проверим его на минимум и сохраним его в <i>minx</i>:</p>
<pre>   …
   minx = 1001   
   <b>for</b> i <b>in</b> <gr>range</gr>(3,n):<cm># a[3] = 5</cm>
      <b>if</b> m[i%3] < minx: <cm>#[3%3]=0, [4%3]=1, [5%3]=2</cm>
         minx = m[i%3]
</pre>
<p class="Content2">На третьем шаге в <i>minx</i> будет 1 – это значит, что не нужно беспокоиться о «пропущенном» произведении: 6*7, 6*9… – раз нужно минимальное произведение, то проверять произведения 6-ки со всеми кроме ближайших по условию не нужно.</p>
<p class="Content2">Теперь умножаем числа расположенные на расстоянии 3-х элементов:</p>
<pre>   …
   x = a[i] # a[i] = 5
   p = minx * x	 
</pre>
<p class="Content2">Проверим произведение на минимум и чётность:</p>
<pre>   …
      <b>if</b> (p%2==0 <b>and</b> p < minp):
         minp = p
</pre>
<p class="Content2"><i>minp</i> – хранит минимальное чётное произведение, которое будет результатом</p>
<p class="Header3">Следующее умножение</p>
<p class="Content2">Теперь самое интересное.  В конце цикла заменяем текущий элемент массива <i>m</i>, на <i>x</i>, т.о., за три шага  создаём следующую тройку для произведения:</p>
<pre>   …
      m[i%3] = x <cm># при i=3, m[0] = 5</cm>	 
</pre>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#e5b8b7">5</td>
<td width="30" bgcolor="#b8cce4">1</td>
<td width="30">3</td>
<td width="30">5</td>
<td width="30" bgcolor="#c2d69b">7</td>
<td width="30">9</td>
<td width="30">2</td>
<td width="30">4</td>
<td width="30">8</td>
</tr>
</table>
<p class="Content2">Т.е. когда, на втором шаге, будут умножаться 1 на 7 –  в первом элементе массива <i>m</i> вместо 6 будет значение 5, которое через два шага будет умножаться на 2, и т.д. Так, выделены красным элементы массива <i>m</i> после трёх шагов цикла:</p>
<table class=table_10CorierNew>
<tr align="center">
<td width="30" bgcolor="#e5b8b7">5</td>
<td width="30" bgcolor="#e5b8b7">7</td>
<td width="30" bgcolor="#e5b8b7">9</td>
<td width="30">5</td>
<td width="30">7</td>
<td width="30">9</td>
<td width="30" bgcolor="#c2d69b">2</td>
<td width="30" bgcolor="#c2d69b">4</td>
<td width="30" bgcolor="#c2d69b">8</td>
</tr>
</table>
<p class="Content2">Теперь полный код, в котором заменено значение 3 на 6</p>
<p class="Header3">Полный код на Python</p>
<pre> 
  a=[12,45,5,3,17,23,21,20,19,18,17]
  n=len(a) <cm># n=11</cm>
  m=[0]*6
  minp=1000001;minx=1001
  <b>for</b> i <b>in</b> <gr>range</gr>(6):
     m[i]=a[i]

  <b>for</b> i <b>in</b> <gr>range</gr>(6,n):
     <b>if</b> m[i%6] < minx:
        minx=m[i%6]
     x=a[i]
     p=minx*x
     <b>if</b>(p%2==0 <b>and</b> p < minp):
        minp=p
     m[i%6]=x
<cm># если ни одного произведения не нашлось, то выведем -1</cm>
  <b>if</b> minp == 1000001:
     <b>print</b> (-1)
  <b>else</b>:
     <b>print</b>(minp) 
</pre>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=248</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ЕГЭ 2011 С4</title>
		<link>http://kshu.su/?p=214</link>
		<comments>http://kshu.su/?p=214#comments</comments>
		<pubDate>Wed, 25 May 2022 15:35:05 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Информатика]]></category>

		<guid isPermaLink="false">http://kshu.su/?p=214</guid>
		<description><![CDATA[Программы, которые эффективно используют память: выбор лучших учеников по набранным баллам, кодирование файловых строк. 10 вариантов задач за 2011 год. Они обозначались как С4 Пример. ЕГЭ 2011 С4 Вариант 1 После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Программы, которые эффективно используют память: выбор лучших учеников по набранным баллам, кодирование файловых строк. 10 вариантов задач за 2011 год. Они обозначались как С4</p>
<p><span id="more-214"></span>	</p>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 1</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы.</p>
<p class="Content2">Завуч школы № 50 решила наградить двух учащихся, которые лучше всех в школе сдали информатику.</p>
<p class="Content2">Программа должна вывести на экран фамилии и имена этих учеников.</p>
<p class="Content2">Если наибольший балл набрало больше двух человек – вывести количество таких учеников.</p>
<p class="Content2">Если наибольший балл набрал один человек, а следующий балл набрало несколько человек &#8212; нужно вывести только фамилию и имя лучшего.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка   программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников школы № 50.</p>
<p class="Content2">На вход программе сначала  подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия> <Имя> <Номер школы> <Количество баллов></p>
<p class="Content2">где <Фамилия> &#8212; строка, состоящая не  более чем из 30 символов без пробелов, <Имя> &#8212; строка, состоящая не более, чем из 20 символов без пробелов, <Номер школы> &#8212; целое число в диапазоне от 1 до 99, <Количество баллов> &#8212; целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой  строке).</p>
<p class="Content2">Пример входной строки:<br/>Иванов Иван 50 87<br/>Пример выходных данных:<br/>Круглов Василий Тарасова Дарья<br/>Другой вариант выходных данных:<br/>7<br/>Третий вариант выходных данных:<br/>Гусарский Илья</p>
<p class="Content2">
<p class="Header2">Решение:</p>
<p class="Content2">Нужно, из множества всех учеников получить подмножество учеников конкретной школы(№50). Далее в этом подмножестве выбрать лучших учеников. Эффективная программа должна реализовать этот сложный отбор одним циклом:</p>
<pre>	
	<ps>Цикл по всем ученикам
		Если ученик из 50-й школы то	
			Выбор лучших</ps>
	</pre>
<p class="Header3">Выбор лучших</p>
<p class="Content2">Введём переменные:</p>
<p class="Content2">max1 – максимальный бал или максимум,</p>
<p class="Content2">max2 – второй максимум,</p>
<p class="Content2">ball – текущий бал ученика 50-й школы.</p>
<p class="Content2">Выбор лучших – это алгоритм с вложенным ветвлением. Для простоты рассмотрим его по частям. Их четыре:</p>
<ol class="align_justify">
<li>Пусть есть возрастающая последовательность чисел, например, такая [1 2 3 4 5]: один максимум(5) и один второй максимум(4). Тогда алгоритм можно написать так:</li>
</ol>
<pre><ps>
	max1 = max2 =-1
	цикл для всех из 50-й школы
		если ball > max1 то
			max2 = max1
			max1 = ball</ps>
	</pre>
<ol class="align_justify" start="2">
<li>Теперь случай, где два одинаковых максимума(5): [1 5 3 4 5]. Добавим новую ветку условия:</li>
</ol>
<pre><ps>
	max1 = max2 =-1
	цикл для всех из 50-й школы
		если ball > max1 то
			max2 = max1
			max1 = ball</ps>
		иначе если ball = max1 то
			max2 = ball			
	</pre>
<p class="Content2">т.е. max1 и max2 содержат одинаковые значения.</p>
<ol class="align_justify" start="3">
<li>Второй максимум(4) правее максимума(5): [1 5 3 4 2]. Добавим третью ветку условия:</li>
</ol>
<pre><ps>
	max1 = max2 =-1
	цикл для всех из 50-й школы
		если ball > max1 то
			max2 = max1
			max1 = ball
		иначе если ball = max1 то
			max2 = ball</ps>
		иначе если ball = max2 то
			max2 = ball
	</pre>
<p class="Content2">(во 2-м и 3-м условиях стоят одинаковые операторы – можно было бы написать одно сложное условие, однако далее операторы будут меняться).</p>
<ol class="align_justify" start="4">
<li>Последний случай. Количество вторых максимумов(4) может быть более одного: [1 5 4 2 4]; здесь также добавляем условие, в котором подсчитывается их количество.</li>
</ol>
<p class="Content2">Наконец, количество максимумов(5) может быть  более двух [1 5 2 5 5] – их также нужно подсчитывать. Добавим для них переменные и дополним алгоритм:</p>
<p class="Content2">n1 – количество максимумов,</p>
<p class="Content2">n2 – количество вторых максимумов.</p>
<pre><ps>
	max1 = max2 =-1</ps>
	n1 = n2 = 0<ps>
	цикл для всех из 50-й школы
		если ball > max1 то
			max2 = max1
			max1 = ball</ps>
			n2 = n1
			n1 = 1<ps>
		иначе если ball = max1 то
			max2 = ball
			</ps>n1 = n1 + 1<ps>
		иначе если ball = max2 то
			max2 = ball
			</ps>n2 = 1
		иначе если ball = max2 то
			n2 = n2 + 1
	</pre>
<p class="Content2">Обратим внимание на строку <i>n2=n1</i>. Здесь в <i>n1</i> сохранено количество «бывших» максимумов: оно может быть либо 1, либо больше 1. И ещё, оператор последнего условия не содержит присваивания переменной <i>max2</i>, дело в том, что в <i>max2</i> уже было присвоено значение.</p>
<p class="Header3">Имена</p>
<p class="Content2">Осталось добавить имена учеников:</p>
<p class="Content2">s – фамилия и имя ученика из 50-й школы,</p>
<p class="Content2">s1 – фамилия и имя ученика с максимальным баллом,</p>
<p class="Content2">s2 – фамилия и имя ученика с вторым максимальным баллом.</p>
<pre><ps>
	max1 = max2 =-1
	n1 = n2 = 0</ps>
	s1 = s2 = ""<ps>
	цикл для всех из 50-й школы
		</ps>s = Ф. И. ученика из 50-й школы<ps>
		если ball > max1 то
			max2 = max1
			max1 = ball
			n2 = n1
			n1 = 1</ps>
			s2 = s1
			s1 = s<ps>
		иначе если ball = max1 то
			max2 = ball
			n1 = n1 + 1
			</ps>s2 = s<ps>
		иначе если ball = max2 то
			max2 = ball
			n2 = 1
			</ps>s2 = s<ps>
		иначе если ball = max2 то
			n2 = n2 + 1</ps>
	</pre>
<p class="Content2">Аналогично, оператор последнего условия не содержит присваивания имени потому, что ранее оно уже было присвоено корректным значением.</p>
<p class="Content2">
<p class="Header3">Вывод результатов</p>
<p class="Content2">Двое лучших – это либо два одинаковых максимальных балла, либо один максимум и один второй максимум. Один лучший – это когда один победитель, а количество вторых максимумов более одного. В остальных случаях получим вывод, в котором количество максимумов – больше двух:</p>
<pre><ps>
	если n1==1 и n2==1 или n1==2 то
		печать s1, s2
	иначе если n1==1 и n2>1 то
		печать s1
	иначе
		печать n1</ps>
</pre>
<p class="Header3">Цикл по всем ученикам</p>
<p class="Content2">Переходим на Python. Найдём количество учеников из всех школ. Если данные нашей задачи хранятся в файле, то первая строка файла содержит это значение. Вот как можно подключиться к файлу, а затем извлечь всех учеников в переменную <i>N</i>:</p>
<pre>
	f = <gr>open</gr>("имяфайла.txt", encoding='utf-8', mode="r")
	N = f.readline()
	</pre>
<p class="Content2"><i>N</i>, нам понадобится для организации цикла по всем ученикам:</p>
<pre>
	<b>for</b> i <b>in</b> <gr>range</gr>(<gr>int</gr>(N))
</pre>
<p class="Header3">Ученик из 50-й школы</p>
<p class="Content2">После N идут строки со значениями, значения разделены пробелом. Функция split разбивает каждую прочитанную строку в массив подстрок:</p>
<pre>
	array = f.readline().split()
</pre>
<p class="Content2">Откуда: <i>array[0]</i> – первая подстрока с фамилией, <i>array[1]</i> – вторая подстрока с именем, <i>array[2]</i> – номер школы и наконец, <i>array[3]</i> – набранный балл. Теперь проверить 50-ую школу можно так:</p>
<pre>
	school = <gr>int</gr>(array[2])
	<b>if</b> school == 50:
</pre>
<p class="Content2">Фамилия и имя получается сложением:</p>
<pre>
	s = array[0] + " " + array[1]
</pre>
<p class="Content2">Полный код на Python</p>
<pre>
  f = <gr>open</gr>("11C4v01.txt", encoding='utf-8', mode="r")
  n = <gr>int</gr>(f.readline())
  max1 = max2 = -1
  n1 = n2 = 0
  s1 = s2 = ""
  <b>for</b> i <b>in</b> <gr>range</gr>(n):
      a = f.readline().split()
      <cm>#a[0] - Фамилия</cm>
      <cm>#a[1] - Имя</cm>
      <cm>#a[2] - номер школы [1..99]</cm>
      <cm>#a[3] - балл ученика(цы)</cm>
      s = a[0] + " " + a[1]
      school = <gr>int</gr>(a[2])
      ball = <gr>int</gr>(a[3])
      <b>if</b> school == 50:
          <b>if</b> ball > max1:
              max2 = max1
              max1 = ball
              n2 = n1
              n1 = 1
              s2 = s1
              s1 = s
          <b>elif</b> ball == max1:
              max2 = ball
              n1 += 1 
              s2 = s
          <b>elif</b> ball > max2:
              max2 = ball
              n2 = 1
              s2 = s
          <b>elif</b> ball == max2:
              n2 += 1
  <cm># Вывод результатов</cm>
  <b>if</b> n1==1 <b>and</b> n2==1 <b>or</b> n1==2:
      <gr>print</gr> (s1, " ",s2)
  <b>elif</b> n1==1 <b>and</b> n2>1:
      <gr>print</gr>(s1)
  <b>else</b>:
      <gr>print</gr>(n1)
  f.close()
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 2</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов.</p>
<p class="Content2">Районный методист решила выяснить номер школы, ученики которой набрали наибольший средний балл, с точностью до целых.</p>
<p class="Content2">Программа должна вывести на экран номер такой школы и её средний балл.</p>
<p class="Content2">Если наибольший средний балл набрало больше одной школы — вывести количество таких школ.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.</p>
<p class="Content2">На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия> <Имя> <Номер школы> <Количество баллов></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более, чем из 30 символов без пробелов, <Имя> — строка, состоящая не более, чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой строке).</p>
<p class="Content2">Пример входной строки:</br>Иванов Иван 50 87</br>Пример выходных данных:</br>50 74</br>Другой вариант выходных данных:</br>7</p>
<p class="Header2">Решение:</p>
<p class="Header3">Сумма баллов</p>
<p class="Content2">Пусть количество школ 3, а количество учеников 6 (N=6). И пусть будут такими номера школ и баллы учеников:</p>
<p class="Content3">2 6</p>
<p class="Content3">3 15</p>
<p class="Content3">1 8</p>
<p class="Content3">2 10</p>
<p class="Content3">3 9</p>
<p class="Content3">2 7</p>
<p class="Content2">Просуммировать баллы по каждой школе удобно с помощью массива, размер которого равен количеству школ:</p>
<table class=table_11Tahoma_noBorder>
<tr align="center">
<td width="120">школа №1</td>
<td width="120">школа №2</td>
<td width="120">школа №3</td>
</tr>
</table>
<table class=table_11Tahoma>
<tr align="center">
<th width="120">0</td>
<th width="120">0</td>
<th width="120">0</td>
</tr>
</table>
<table class=table_11Tahoma_noBorder>
<tr align="center">
<td width="120">+</td>
<td width="120">+</td>
<td width="120">+</td>
</tr>
<tr align="center">
<td>8</td>
<td>6</td>
<td>15</td>
</tr>
<tr align="center">
<td></td>
<td>+</td>
<td>+</td>
</tr>
<tr align="center">
<td></td>
<td>10</td>
<td>9</td>
</tr>
<tr align="center">
<td></td>
<td>+</td>
<td></td>
</tr>
<tr align="center">
<td></td>
<td>7</td>
<td></td>
</tr>
</table>
<p class="Content2">Получаем такой массив после суммирования:</p>
<table class=table_11Tahoma>
<tr align="center">
<th width="120">8</td>
<th width="120">23</td>
<th width="120">24</td>
</tr>
</table>
<p class="Content2">Алгоритм суммирования массива баллов:</p>
<pre><ps>
	Цикл для i от 0 до 5 учеников
		m = № школы из i-й строки данных
		ball = балл ученика m-й школы
		sum[m] = sum[m] + ball</ps>
	</pre>
<p class="Content2">Данные массива <i>sum</i> после выполнения алгоритма:</p>
<p class="Content3">sum[0]=8</p>
<p class="Content3">sum[1]=23</p>
<p class="Content3">sum[2]=24</p>
<p class="Header3">Средний бал</p>
<p class="Content2">Средний балл = сумма баллов школы/количество учеников школы.</p>
<p class="Content2">где числитель – это массив из пункта <i>Сумма баллов</i>, а знаменатель – это ещё один массив такого же размера, только каждый элемент этого массива – это количество учеников в конкретной школе. Другими словами, знаменатель – это количество плюсов на схеме из пункта <i>Сумма баллов</i>. Значит, во время суммирования баллов каждой школы, увеличиваем на 1 <i>i</i>-й элемент второго массива:</p>
<pre><ps>
	Цикл для i от 0 до 5 учеников
		m = № школы из i-й строки данных
		ball = балл ученика m-й школы
		sum[m] = sum[m] + ball
		cnt[m] = cnt[m] + 1</ps>
	</pre>
<p class="Content2">Данные массива <i>sum</i> и <i>cnt</i> после выполнения алгоритма:</p>
<p class="Content3">sum[0]=8</p>
<p class="Content3">sum[1]=23</p>
<p class="Content3">sum[2]=24</p>
<p class="Content3">cnt[0]=1</p>
<p class="Content3">cnt[1]=3</p>
<p class="Content3">cnt[2]=2</p>
<p class="Content2">Ну, а теперь вычисление среднего балла. Для этого понадобится ещё один цикл, но уже по школам:</p>
<pre><ps>
	Цикл для i от 0 до 2 школ
		sum[i] = sum[i] / cnt[i]</ps>
	</pre>
<p class="Content2">Данные массива <i>sum</i> после выполнения алгоритма:</p>
<p class="Content3">sum[0]=8</p>
<p class="Content3">sum[1]=7,66</p>
<p class="Content3">sum[2]=12</p>
<p class="Content2">Однако мы не учли отсутствие номеров некоторых школ. Это значит, что массивы <i>sum</i> и <i>cnt</i> где-то содержат нули – будет деление на ноль. Полный код на Python учтёт это.</p>
<p class="Header3">Поиск лучших школ</p>
<p class="Content2">По условию лучших школ может быть либо одна, либо две и более. В первом случае нужно сохранить номер школы и средний балл – это обычный поиск максимума:</p>
<pre><ps>
	max = sum[0] <cm>;сохраняем в max ср.балл школы №1</cm>
	n = 0 <cm>;номер школы, пока 0</cm>
	Цикл для i от 1 до 2 школ <cm>;начинаем со школы №2</cm>
		если sum[i] > max то
			max = sum[i]
			n = i<cm>;сохраняем в n № школы</cm></ps>
	</pre>
<p class="Content2">Во втором случае нужно сохранить количество школ. Это сравнение на равенство среднего балла текущей школы с сохранённым ранее максимальным средним баллом – <i>max</i> :</p>
<pre><ps>
	max = sum[0] <cm>;сохраняем в max ср.балл школы №1</cm>
	n = </ps>кол-во<ps> = 0 <cm>;номер школы и кол-во учеников, пока 0</cm>
	Цикл для i от 1 до 2 школ <cm>;начинаем со школы №2</cm>
		если sum[i] > max то
			max = sum[i]
			</ps>кол-во = 1<ps>
			n = i   <cm>;сохраняем в n № школы</cm>
		</ps>иначе если sum[i] = max то
			кол-во = кол-во + 1
	</pre>
<p class="Content2">Нужно написать эффективную по памяти программу, для этого можно исключить переменную <i>n</i>. Тогда в <i>max</i> сохранять не значение среднего балла первой школы(<i>sum[0]</i>), а индекс самой школы, затем произвести изменения в условном операторе. Это будет сделано в полном коде на Python.</p>
<p class="Header3">Вывод результатов</p>
<p class="Content2">Проверяем количество лучших школ, если лучшая школа одна, то выводим номер школы и её средний балл. В остальных случаях выводим количество:</p>
<pre><ps>
	если кол-во = 1 то
		печать n max
	иначе
		печать кол-во</ps>
	</pre>
<p class="Header3">Полный код на Python</p>
<pre>
  f = <gr>open</gr>("11C4v01.txt", encoding='utf-8', mode="r")
  n = <gr>int</gr>(f.readline())
  nsch = 99 <cm>#кол-во школ [1..99]</cm>
  sum = [0] * nsch <cm># массив суммарных баллов по каждой школе</cm>
  cnt = [0] * nsch <cm># массив количеств учеников в каждой школе</cm>

  <cm>#суммируем баллы и считаем кол-во учеников по каждой школе</cm>
  <b>for</b> i <b>in</b> <gr>range</gr>(n):
    <cm>#a[0] - Фамилия (она не нужна)</cm>
    <cm>#a[1] - Имя (оно не нужно)</cm>
    <cm>#a[2] - номер школы [1..99]</cm>
    <cm>#a[3] - балл ученика(цы)</cm>
      a = f.readline().split()
      isch = <gr>int</gr>(a[2])-1 <cm># isch - [0..98]</cm>
      sum[isch] += <gr>int</gr>(a[3])
      cnt[isch] += 1

  <cm>#средний балл</cm>
  <b>for</b> i <b>in</b> <gr>range</gr>(nsch):
<cm>#из-за отсутствия номеров некоторых школ, избегаем деления на 0</cm>
      <b>if</b> cnt[i]>0:
          sum[i] = sum[i] / cnt[i]

  <cm>#Поиск лучших школ</cm>
  max = 0
  n = 0
  <b>for</b> i <b>in</b> <gr>range</gr>(1,nsch):
      <b>if</b> sum[i] > sum[max]:
          max=i
          n=1
      <b>elif</b> sum[i] == sum[max]:
          n += 1
  
  <cm>#Вывод результатов</cm>
  <b>if</b> n == 1:
      print(max+1," ",sum[max])
  <b>else</b>:
      print(n)
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 3</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.</p>
<p class="Content2">Районный методист решила выяснить номера школ, ученики которых набрали средний балл по школе, больший, чем районный средний балл (все средние баллы вычисляются с точностью до целых).</p>
<p class="Content2">Программа должна вывести на экран номера таких школ, в любом порядке.</p>
<p class="Content2">Если такая школа окажется только одна — вывести также средний балл по этой школе, с указанием, что это средний балл.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.</p>
<p class="Content2">На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия><Имя><Номер школы><Количество баллов></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой строке).</p>
<p class="Content2">Пример входной строки:</br>Иванов Иван 50 87</br>Пример выходных данных:</br>5 50 74 87</br>Другой вариант выходных данных:</br>7</br>Средний балл = 74</p>
<p class="Header2">Решение:</p>
<p class="Header3">Средние баллы по району и школе</p>
<p class="Content2">Cр.балл по району = Все баллы / N</p>
<p class="Content2">Средний балл по школе = Сумма баллов по школе / кол-во учеников школы</p>
<p class="Content2">Сумму баллов по школе получаем как в примере 2011 С4 №2: создаём массив <i>sum</i> из 99 элементов(кол-во школ), заносим сумму баллов школы в каждый элемент. Добавим подсчёт кол-ва учеников в массив <i>cnt</i>:</p>
<pre><ps>
	Цикл для i от 0 до N-1
		m = № школы из i-й строки данных
		ball = балл ученика m-й школы
		sum[m] = sum[m] + ball <cm>;суммы баллов по m-ой школе</cm>
		cnt[m] = cnt[m] + 1 <cm>;кол-во учеников m-ой школы</cm>
</ps></pre>
<p class="Content2">Заметим, что вместо вычисления всех баллов, можно просуммировать суммы баллов по школе в отдельную переменную. Тем самым избавиться от лишнего суммирования N раз!</p>
<p class="Content2">Т.к. некоторых номеров школ нет, то соответствующие элементы массивов sum и <i>cnt</i> содержат нули. Для этого нужно следить, чтобы, при вычислении среднего, не было деления на ноль:</p>
<pre><ps>
	avg = 0 <cm>;переменная для всех баллов</cm>
	Цикл для i от 0 до 98 школ
		если sum[i] > 0 то
		avg = avg + sum[i] <cm>;суммируем все баллы</cm>
		sum[i] = sum[i] / cnt[i]  <cm>;средний балл по школе</cm>
</ps></pre>
<p class="Content2">Обратим внимание на две строки условия. Сначала суммируем баллы всех школ. Затем на место суммы баллов по школе, помещаем средний балл по этой же школе – тем самым не создаём лишнюю переменную для среднего значения.</p>
<p class="Content2">Средний балл по району:</p>
<pre><ps>	avg = avg / N</ps></pre>
<p class="Header3">Вывод результатов</p>
<p class="Content2">Вывод номера или номеров школ проведём с помощью сравнения среднего балла по школе со средним баллом по району. Если балл по школе больше балла по району, то выведем её номер:</p>
<pre><ps>
	Цикл для i от 0 до 98 школ
		если sum[i] > avg то
			печать i
</ps></pre>
<p class="Content2">Ну, а если школа единственная, то нужна переменная <i>n</i>, которая посчитает кол-во сравнений и переменная <i>ball</i>, которая сохранит балл этой единственной школы:</p>
<pre>
	m=0<ps>
	Цикл для i от 0 до 98 школ
		если sum[i] > avg то</ps>
			m = m + 1
			ball = sum[i]<ps>	
			печать i</ps>
	если m = 1 то
		печать "Средний балл:" ball			
</pre>
<p class="Header3">Полный код на Python</p>
<pre>
  f = <gr>open</gr>("11C4v01.txt", encoding='utf-8', mode="r")
  n = <gr>int</gr>(f.readline())
  nsch=99 <cm># кол-во школ [1..99]</cm>
  sum = [0] * nsch <cm># массив суммарных баллов по каждой школе</cm>
  cnt = [0] * nsch <cm># массив количеств учеников в каждой школе</cm>

  <cm>#суммируем баллы и считаем кол-во учеников по каждой школе</cm>
  <b>for</b> i <b>in</b> <gr>range</gr>(n):
      <cm>#a[0] - Фамилия (она не нужна)</cm>
      <cm>#a[1] - Имя (оно не нужно)</cm>
      <cm>#a[2] - номер школы [1..99]</cm>
      <cm>#a[3] - балл ученика(цы)</cm>
      a = f.readline().split()
      isch = <gr>int</gr>(a[2])-1 <cm># isch - [0..98]</cm>
      sum[isch] += <gr>int</gr>(a[3])
      cnt[isch] += 1

  <cm>#средний балл по школе</cm>
  avg = 0
  <b>for</b> i <b>in</b> <gr>range</gr>(nsch):
    <b>if</b> cnt[i] > 0:
        avg = avg + sum[i]  <cm># суммируем все баллы</cm>
        sum[i] = sum[i] / cnt[i] <cm># средний балл по школе</cm>

  <cm>#средний балл по району</cm>
  avg /= n

  <cm>#Вывод результатов</cm>
  m = 0
  <b>for</b> i <b>in</b> <gr>range</gr>(nsch):
      <b>if</b> sum[i] > avg:
          m += 1
          ball = sum[i]
          print(i+1, end=' ')
  <b>if</b> m == 1:
      print("Средний балл:",ball)
	
</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 4</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько набрал баллов.</p>
<p class="Content2">Районный методист решила выяснить фамилии учеников, которые набрали наибольший балл, по каждой школе в отдельности, но только если из школы информатику сдавало не меньше трёх человек. Если в школе информатику сдавало меньше трёх человек, информацию по этой школе выводить не нужно. Если наибольший балл в какой-то школе набрали несколько человек, нужно вывести на экран их количество.</p>
<p class="Content2">Программа должна вывести на экран информацию в виде:</p>
<p class="Content2Center"><Номер школы> <Фамилия ученика></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой строке).</p>
<p class="Content2">в отдельной строке для каждой школы.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.</p>
<p class="Content2">На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия> <Имя> <Номер школы> <Количество баллов></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 0 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).</p>
<p class="Content2">Пример входной строки:</br> Иванов Иван 50 87</br> Пример выходных данных:</br>5 Иванов </br>50 10</br>74 Сидоров</p>
<p class="Header2">Решение:</p>
<p class="Header3">Количество учеников сдававших экзамен в школе</p>
<p class="Content2">Каждая строка данных содержит номер школы, который мы присвоим в переменную <i>m</i>. Эта <i>m</i> будет индексом массива <i>cnt</i>, который будем использовать для хранения кол-ва учеников в школе номером <i>m</i>:</p>
<pre><ps>
    cnt [99] <cm>;кол-во учеников в школе</cm>
    Цикл для i от 0 до N-1 <cm>;цикл по строкам данных</cm>
        m = № школы из i-й строки данных
        <cm>;считаем кол-во учеников в m-й школе</cm>
        cnt[m] = cnt[m] + 1
</ps></pre>
<p class="Content2">Т.о., каждый элемент массива <i>cnt</i> –  это кол-во учеников в школе, номер которой есть индекс элемента</p>
<p class="Header3">Наибольший балл</p>
<p class="Content2">Вспомним пример ЕГЭ 2011 С4 №1, первая часть пункта <i>Выбор лучших</i>. Только здесь понадобится сохранять не одно лучшее значение, а лучшие значения для каждой школы: в массиве <i>bal</i>:</p>
<pre><ps>
    bal [99] <cm>;кол-во учеников в школе</cm>
    Цикл для i от 0 до N-1 <cm>;цикл по строкам данных</cm>
        m = № школы из i-й строки данных
        ball = балл ученика m-й школы
        если ball > bal[m] то
            bal[m] = ball
</ps></pre>
<p class="Header3">Количество лучших учеников</p>
<p class="Content2">Продолжаем воспоминания примера ЕГЭ 2011 С4 №1 второй части пункта <i>Выбор лучших</i>, и добавим вторую ветку нашему алгоритму. В ней, в массиве <i>amt</i>, будем считать количество одинаковых максимальных баллов школы номером <i>m</i>.</p>
<pre><ps>
    bal [99] <cm>;кол-во учеников в школе</cm>
    </ps>amt [99] <cm>;кол-во лучших в школе</cm><ps>
    Цикл для i от 0 до N-1 <cm>;цикл по строкам данных</cm>
        m = № школы из i-й строки данных
        ball = балл ученика m-й школы
        если ball > bal[m] то
            bal[m] = ball
            </ps>amt[m] = 1 <cm>;кол-во лучших в школе m пока 1</cm>
        иначе если ball = bal[m] то
            amt[m] = amt[m] + 1 <cm>;считаем кол-во лучших в школе m</cm>
</pre>
<p class="Header3">Имена</p>
<p class="Content2">Такой же пункт Имена как в примере ЕГЭ 2011 С4 №1, а в нашей задаче нужно учесть только фамилию, если лучший в школе единственный:</p>
<pre><ps>
    bal [99] <cm>;наибольший балл в школе</cm>
    amt [99] <cm>;кол-во лучших в школе</cm>
    </ps>nam [99] <cm>;фамилия одного лучшего в школе</cm>
    <ps>Цикл для i от 0 до N-1
        m = № школы из i-й строки данных
        ball = балл ученика m-й школы
        </ps>s = фамилия ученика m-й школы<ps>
        если ball > bal[m] то
            bal[m] = ball
            amt[m] = 1
            </ps>nam[m] = s<ps>
        иначе если ball = bal[m] то
            amt[m] = amt[m] + 1
</ps></pre>
<p class="Content2">Алгоритмы, которые мы рассмотрели, выполняются в одном цикле. В полном коде мы их объединим в один.</p>
<p class="Header3">Вывод результатов</p>
<p class="Content2">Нужно вывести  два значения: номер школы и либо фамилию, в случае одного лучшего в школе, либо количество лучших, если таковых несколько:</p>
<pre><ps>
	Цикл для i от 0 до 98 школ
        если сnt[i] > 2 то
            если amt[i] = 1 то
                печать i nam[i] <cm>;номер школы и имя лучшего</cm>
            иначе
                печать i amt[i] <cm>;номер школы и кол-во лучших</cm>
</ps></pre>
<p class="Header3">Полный код на Python</p>
<pre><ps>
  f = open("11C4v01.txt", encoding='utf-8', mode="r")
  n = <gr>int</gr>(f.readline())
  nsch = 99 <cm>#кол-во школ [1..99]</cm>
  cnt = [0] * nsch <cm>#кол-во учеников в школе</cm>
  bal = [0] * nsch <cm>#наибольший балл в школе</cm>
  amt = [0] * nsch <cm>#кол-во лучших учеников в школе</cm>
  nam = [''] * nsch <cm>#фамилия одного лучшего в школе</cm>

<cm>#суммируем баллы и считаем кол-во учеников по каждой школе</cm>
  <b>for</b> i <b>in</b> <gr>range</gr>(n):
      <cm>#a[0] - Фамилия</cm>
      <cm>#a[1] - Имя, оно не нужно</cm>
      <cm>#a[2] - номер школы [1..99]</cm>
      <cm>#a[3] - балл ученика(цы)</cm>
     a = f.readline().split()
     m = <gr>int</gr>(a[2])-1 <cm>#isch - [0..98]</cm>
     ball = <gr>int</gr>(a[3])
     <b>if</b>  ball > bal[m]:
        bal[m] = ball
        amt[m] = 1
        nam[m] = a[0]
    <b>else</b>:
        amt[m] += 1
    <cm>#считаем кол-во учеников в m-й школе</cm>
    cnt[m] += 1

<cm>#Вывод результатов</cm>
  m = 0
  <b>for</b> i <b>in</b> <gr>range</gr>(nsch):
     <b>if</b> cnt[i] >= 3:
        <b>if</b> amt[i] == 1:
           print(i+1," ", nam[i])
        <b>else</b>:
           print(i+1, " ", amt[i])
</ps></pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 5</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько баллов набрал.</p>
<p class="Content2">В районе считается подозрительной ситуация, когда в школе более двух учащихся набирают одинаковый наибольший балл по школе.</p>
<p class="Content2">Районный методист решила выяснить номера таких школ.</p>
<p class="Content2">Программа должна вывести номера этих школ, в любом порядке.</p>
<p class="Content2">Если такая школа окажется одна, нужно вывести наибольший балл в этой школе, с указанием того, что это наибольший балл.</p>
<p class="Content2">Если таких школ не окажется, нужно вывести об этом сообщение.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу, которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.</p>
<p class="Content2">На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия> <Имя> <Номер школы> <Количество баллов></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более, чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 0 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой строке).</p>
<p class="Content2">Пример входной строки:</br>Иванов Иван 50 87</br>Пример выходных данных:</br>5 50 74 87</br>Другой вариант выходных данных:</br>7</br>Наибольший балл = 74</br>Третий вариант выходных данных:</br>Нет таких школ</p>
<p class="Header2">Решение:</p>
<p class="Header3">Поиск максимума в каждой школе и подсчёт их совпадений</p>
<p class="Content2">Подобное было в С4 2011  №1 и №4. Каждая строка данных содержит номер школы, который мы присвоим переменной <i>m</i>. Её значение будет индексом массивов <i>bal</i> и <i>amt</i>. Массив <i>bal</i> хранит наибольший балл школы номером <i>m</i>, а массив <i>amt</i> – кол-во учеников школы номером <i>m</i> с наибольшим баллом:</p>
<pre><ps>
    bal [99] <cm>;наибольший балл в школе</cm>
    amt [99] <cm>;кол-во одинаковых лучших учеников в школе</cm>
    Цикл для i от 0 до N-1 <cm>;по строкам данных</cm>
        m = № школы из i-й строки данных
        ball = балл ученика m-й школы
        если ball > bal[m] то
            bal[m] = ball
            amt[m] = 1
        иначе если ball = bal[m] то
            amt[m] = amt[m] + 1
</ps></pre>
<p class="Header3">Вывод результатов</p>
<p class="Content2">Массивы <i>bal</i> и <i>amt</i> заполнили, теперь посчитаем кол-во «подозрительных» школ: если их несколько, то выведем их номера; если их нет, то выведем сообщение; если она одна, то выведем номер школы и наибольший балл. Подсчёт «подозрительных» школ будем вести в переменную <i>k</i>:</p>
<pre><ps>
    k = 0 <cm>;кол-во подозрительных школ</cm>
    Цикл для i от 0 до 99 ; по всем школам
        если amt[i] > 2 то
            ball = bal[i] <cm>;для случая когда k=1</cm>
            печать i " " <cm>;номер подозрительной школы и пробел</cm>
            k = k + 1
    <cm>;после того как прошлись по школам, рассмотрим два случая</cm>
    если k = 0 то <cm>;когда подозрительных школ нет</cm>
        печать "таких школ нет"
    иначе если k = 1 то <cm>;и когда подозрительная школа одна</cm>
        печать  <cm>;перешли на следующую строку</cm>
        печать "Наибольший балл:" ball
</ps></pre>
<p class="Header3">Полный код на Python</p>
<pre><ps>
  f = open("11C4v01.txt", encoding='utf-8', mode="r")
  n = f.readline()
   nsch = 99 <cm>#кол-во школ [1..99]</cm>
   bal = [0] * nsch <cm>#массив наибольших баллов по каждой школе</cm>
   #массив количеств одинаковых лучших учеников в школе</cm>
   amt = [0] * nsch <cm>

   <cm>#суммируем баллы и считаем кол-во учеников по каждой школе</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(<gr>int</gr>(n)):  
      <cm>#a[0] - Фамилия (она не нужна)</cm>
      <cm>#a[1] - Имя (оно не нужно)</cm>
      <cm>#a[2] - номер школы [1..99]</cm>
      <cm>#a[3] - балл ученика(цы)</cm>
  
  
  a = f.readline().split()
  m = <gr>int</gr>(a[2])-1 <cm>#m - [0..98]</cm>
  ball = <gr>int</gr>(a[3])

  <b>if</b> ball > bal[m]:
     bal[m] = ball
     amt[m] = 1
  <b>elif</b> ball == bal[m]:
     amt[m] += 1
   <cm>#Вывод результатов</cm>
   k = 0
   <b>for</b> i <b>in</b> <gr>range</gr>(nsch):
   <b>if</b> amt[i] > 2:
       ball = bal[i]
  print(i + 1, end=' ') <cm>#номер подозрительной школы</cm>
  k += 1
   <b>if</b> k == 0:
       print(" Таких школ нет")
   <b>elif</b> k == 1:
       print() <cm>#перешли на следующую строку</cm>
       print("Наибольший балл:", ball)
</ps></pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 6</strong></div>
<p class="Content2">При программировании школьной тестирующей системы по английскому языку выяснилось, что файлы с вопросами к тестам легко доступны и каждый может перед тестом открыть их и заранее узнать вопросы. Было решено закодировать файлы. Для этого придумали следующий алгоритм.</p>
<p class="Content2">Каждая строка файла кодируется отдельно.</p>
<p class="Content2">В каждой строке ищутся отдельные слова, и все символы слова сдвигаются по алфавиту циклически вправо на длину слова.</p>
<p class="Content2">Словом считается любая последовательность подряд идущих символов латинского алфавита, строчных и прописных.</p>
<p class="Content2">Циклический сдвиг символа по алфавиту вправо на X — замена символа на символ, стоящий в алфавите на X позиций дальше. Если при этом происходит выход за пределы алфавита, счёт начинается с начала алфавита.</p>
<p class="Content2">Пример циклического сдвига символов на 3 позиции: буква «Е» превращается в букву «Н», буква «t» — в букву «w» буква «Y» — в букву «В».</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна закодировать строку по указанному алгоритму.</p>
<p class="Content2">На вход программе подается строка, состоящая из не более чем 250 символов латинского алфавита, пробелов, знаков препинания, разного рода скобок, кавычек и других символов. Строка заканчивается символом    &#171;#&#187;. Других символов &#171;#&#187; в строке нет.</p>
<p class="Content2">Программа должна вывести закодированную по указанному алгоритму строку.</p>
<p class="Content2">Пример входных данных:</br>Day, mice. &#171;Year&#187; &#8212; a mistake#</br>Пример выходных данных:</br>Gdb, qmgi. &#171;Ciev&#187; &#8212; b tpzahrl#</p>
<p class="Header2">Решение:</p>
<p class="Header3">Длина слова</p>
<p class="Content2">Чтобы сдвинуть символы на длину слова, нужно знать её величину. Посчитаем длину каждого слова строки <i>s</i>:</p>
<pre><ps>
    s = "…" <cm>;строка со словами и другими символами</cm>
    n = длина строки s
    flag = ЛОЖЬ
    Для i от 1 до n <cm>;по каждому символу строки s</cm>
        если s[i] буква то<cm>;буква-не буква</cm>
            если flag то
                len = len + 1
            иначе
                len = 1
                flag = ИСТИНА
</ps></pre>
<p class="Content2">После этого алгоритма значение <i>len</i> будет иметь длину слова, а значение <i>i</i> – позицию последнего символа слова. Так что, в стиле Python –  [(i-len):i] будет слово из массива.</p>
<p class="Header3">Двигаем символы</p>
<p class="Content2">Когда мы достигли последнего символа в слове, самое время сдвинуть каждый его символ:</p>
<pre><ps>
    …
        если s[i] буква то<cm>;буква-не буква</cm>
            …
        иначе
            если flag то
                flag = ЛОЖЬ
                Для k от 1 до len <cm>;по каждому символу слова</cm>
                    если s[i-k] + len  выходит за алфавит то 
                        s[i-k] = s[i-k] + len – 26 
                    иначе 
                        s[i-k] = s[i-k] + len
    печать s 

</ps></pre>
<p class="Content2">Переменная <i>flag</i> отвечает за начало подсчёта символов слова в первой ветке условия –  «буква-не буква», а во второй ветке – за то, чтобы сдвиг символов в слове был только один раз.</p>
<p class="Header3">Полный код на Python</p>
<pre>
   s = "Bike, Zip, Roller, 1345asdfads#"
   total = len(s)
   n = 0
   flag = False

   <b>for</b> i <b>in</b> <gr>range</gr>(total):
      c = s[i]
      <b>if</b> c.isalpha():
         <b>if</b> flag == False:
            len = 1
            flag = True
          <b>else</b>:
             len += 1
      <b>elif</b> flag == True:
         flag = False
         stmp = ""
         <b>for</b> k <b>in</b> <gr>range</gr>(len):
            <cm>#i-len - возврат к первому симолу слова</cm>
            <b>if</b> ord(s[i-len + k].upper()) - ord("A") + len > 25:
               stmp += chr(ord(s[i - len + k]) + len - 26 )
            <b>else</b>:
               stmp += chr(ord(s[i - len + k]) + len )
      <cm>#замена одной подстроки на другую</cm>
      s = s.replace(s[i - len:i], stmp) 

   print (s)
 </pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 7</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. По положению об экзамене каждый район сам определяет, за какой балл нужно поставить какую оценку.</p>
<p class="Content2">Районный методист решила, что оценку «отлично» должны получить 20% участников (целое число, с отбрасыванием дробной части).</p>
<p class="Content2">Для этого она должна определить, какой балл должен был набрать ученик, чтобы получить «отлично».</p>
<p class="Content2">Если невозможно определить такой балл, чтобы «отлично» получили ровно 20% участников, «отлично» должно получить меньше участников, чем 20%.</p>
<p class="Content2">Если таких участников не окажется (наибольший балл набрали больше 20% участников) — эти и только эти ученики должны получить «отлично».</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран наименьший балл, который набрали участники, получившие «отлично». Известно, что информатику сдавало больше 5-ти учеников. Также известно, что есть такое количество баллов, которое не получил ни один участник.</p>
<p class="Content2">На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия> <Имя> <Номер школы> <Количество баллов></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).</p>
<p class="Content2">Пример входных данных:</br>Иванов Иван 50 87</br>Пример выходных данных:</br>78</p>
<p class="Header2">Решение:</p>
<p class="Header3">Количество оценок</p>
<p class="Content2">Посчитаем кол-во каждых оценок:</p>
<pre><ps>
	k[100] <cm>;кол-во оценок</cm>
	Для i от 0 до N-1 <cm>;цикл по строкам данных</cm>
		ball = оценка из i-й строки данных 
		k[ball] = k[ball] + 1 <cm>;считаем кол-во оценок</cm>
</ps></pre>
<p class="Content2">Индекс массива <i>k</i> – это конкретная оценка, а его элемент будет хранить кол-во этих оценок.</p>
<p class="Header3">Количество лучших из 20% участников</p>
<p class="Content2">Критерий – это 20% от N. Если суммировать оценки, например, в переменную <i>s</i>, то можно получить кол-во лучших оценок равное 20% или более</p>
<pre><ps>
	s = 0 <cm>;кол-во оценок</cm>
	i = 99 <cm>;начинаем с самой высокой оценки, её индекс = 99</cm>
	p = N DIV 5 <cm>;p – 20% от N</cm>
	Пока s < p  <cm>;цикл по</cm>
		s = s + k[i]
		i = i – 1 <cm>;спускаемся к следующей оценке</cm>
</ps></pre>
<p class="Content2">После этого цикла <i>i</i> будет содержать значение оценки</p>
<p class="Header3">Возможные варианты</p>
<p class="Content2">Рассмотрим некоторые варианты разного количества лучших оценок. Для простоты, диапазон оценок [1;5].</p>
<ol class="align_justify" start="1">
<li>N=10 (p=2) из них две пятёрки: <i>k</i> = [? ? ? ? 2] или одна пятёрка, и одна четвёрка: <i>k</i> = [? ? ? 1 1]. В 1-м случае нужно вывести оценку 5, а во 2-м – 4. После алгоритма выше, <i>s</i> = 2. Тогда, для нужного вывода, достаточно условия на равенства <i>p</i> с <i>s</i> :</li>
</ol>
<pre><ps>
	s = 0 <cm>;кол-во оценок</cm>
	i = 99 <cm>;начинаем с самой высокой оценки, её индекс = 99</cm>
	p = N DIV 5 <cm>;p – 20% от N</cm>
	Пока s < p  <cm>;цикл по</cm>
		s = s + k[i]
		i = i – 1 <cm>;спускаемся к следующей оценке</cm></ps>
	если s = p то
		печать i<ps>
</ps></pre>
<p class="Content2">аналогично, для N=20 (p=4) получим такие выводы для соответствующих последовательностей:</p>
<p class="Content3"><i>k</i> = [? ? ? ? 4] печать 5</p>
<p class="Content3"><i>k</i> = [? ? ? 3 1] = [? ? ? 2 2] = [? ? ? 1 3] печать 4</p>
<p class="Content3"><i>k</i> = [? ? 2 1 1] = [? ? 2 2 0] = [? ? 2 0 2] печать 3</p>
<p class="Content2">и т. д.</p>
<ol class="align_justify" start="2">
<li>N=20 (p=4) из них три пятёрки и две четвёрки: <i>k</i> = [? ? ? 2 3] или наоборот [? ? ? 3 2]. <i>s</i> = 5, т.е. больше <i>p</i>. По условию нужно выводить либо ровно 20%, либо меньше чем 20%. Тогда для этих двух последовательностей, выводим не четвёрку, а пятёрку. Значит, увеличим <i>i</i> на 1:</li>
</ol>
<pre><ps>
	s = 0 <cm>;кол-во оценок</cm>
	i = 99 <cm>;начинаем с самой высокой оценки, её индекс = 99</cm>
	p = N DIV 5 <cm>;p – 20% от N</cm>
	Пока s < p  <cm>;цикл по</cm>
		s = s + k[i]
		i = i – 1 <cm>;спускаемся к следующей оценке</cm>
	если s = p то
		печать i</ps>
	иначе
		i = i + 1 <cm>;возвращаемся к пятёркам</cm>
		печать i<ps>
</ps></pre>
<p class="Content2">По условию некоторых баллов не набрал никто, например, четвёрок: <i>k</i> = [? ? 2 0 3]. Новый алгоритм выше на выводе даст значение 0. Исключим нулевое/вые вхождения:</p>
<pre><ps>
	иначе
		i = i + 1 <cm>;возвращаемся к пятёркам</cm></ps>
		Пока k[i]=0 <cm>;встретили нулевую оценку</cm>
			i = i + 1 <cm>;уходим от нулевой оценки</cm><ps>
		печать i
</ps></pre>
<ol class="align_justify" start="3">
<li>Последнее, когда одно значение баллов, и оно больше 20%: N=10 (p=2) <i>k</i> = [? ? ? ? 3] печать 5. Здесь значение <i>s</i> должно быть равно <i>k[i]</i>:
		</li>
</ol>
<pre><ps>
	иначе</ps>
		если s=k[i] то
			печать i<ps>
		иначе
			i = i + 1
			Пока k[i]=0
				i = i + 1
			печать i
</ps></pre>
<p class="Header3">Полный код на Python</p>
<pre>
   f = open("11C4v01.txt", encoding='utf-8', mode="r")
   n = <gr>int</gr>(f.readline())
   k = [0] * 100 <cm>#кол-во оценок</cm>
   <b>for</b> i <b>in</b> <gr>range</gr>(n):
      <cm>#a[0] - Фамилия (она не нужна)</cm>
      <cm>#a[1] - Имя (оно не нужно)</cm>
      <cm>#a[2] - номер школы [1..99] (он не нужен)</cm>
      <cm>#a[3] - балл ученика(цы)</cm>	  
      a = f.readline().split()
      iball = <gr>int</gr>(a[3]) - 1 <cm>#iball - [0..99]</cm>
      k[iball] += 1

   p = n // 5
   s = 0
   i = 100
   <b>while</b> s &#038;lt p:
      i = i - 1
      s = s + k[i]
   <b>if</b> s == p:
      print(i+1)
   <b>else</b>:
      <b>if</b> k[i] == s:
         print(i+1)
      <b>else</b>:
         i = i + 1
         <b>while</b> k[i] == 0:
            i = i + 1
         print(i+1)

</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 8</strong></div>
<p class="Content2">После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. По положению об экзамене оценку “2” (неудовлетворительно) получают ученики, набравшие меньше 40 баллов. Оценку “3” (удовлетворительно) получают 30% учеников среди оставшихся, за исключением тех из них, кто набрал больше 60 баллов.</p>
<p class="Content2">Если количество “троечников” оказывается больше 30%, то следует выбрать меньшую границу для оценки “4” (но только если при этом “3” получит хоть кто-нибудь).</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая должна вывести на экран наибольший балл, который набрали участники, получившие “удовлетворительно” и количество таких учеников. Известно, что информатику сдавало больше 50-ти учеников. Также известно, что есть такое количество баллов, которое не получил ни один участник.</p>
<p class="Content2">На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:</p>
<p class="Content2Center"><Фамилия> <Имя> <Номер школы> <Количество баллов></p>
<p class="Content2">где <Фамилия> — строка, состоящая не более, чем из 30 символов без пробелов, <Имя> — строка, состоящая не более, чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число диапазоне от 1 до 100. Эти данные записаны через пробел, причем ровно один между каждой парой (то есть, всего по три пробела в каждой строке).</p>
<p class="Content2">Пример входных данных:</br>Иванов Иван 50 87</br>Пример выходных данных:</br>78</p>
<p class="Header2">Решение:</p>
<p class="Header3">Количество оценок</p>
<p class="Content2">Аналогично 2011 С4 № 7 – посчитаем кол-во каждых оценок:</p>
<pre><ps>
	k[100] <cm>;[1..100] кол-во оценок</cm>
	Для i от 0 до N-1 <cm>;цикл по строкам данных</cm>
		ball = оценка из i-й строки данных 
		k[ball] = k[ball] + 1 <cm>;считаем кол-во оценок</cm>
</ps></pre>
<p class="Content2">Индекс массива <i>k</i> – это конкретная оценка, а элемент этого индекса будет хранить кол-во этих оценок.</p>
<p class="Header3">Количество двоечников и 30% от не двоечников</p>
<p class="Content2">Посчитаем кол-во двоечников, затем мы их исключим из общего кол-ва учеников:</p>
<pre><ps>
	s = 0 <cm>;кол-во двоечников</cm>
	Для i от 1 до 39 <cm>;первые 39 строк массива с оценками</cm>
		s = s + k[i] <cm>;суммируем всех двоечников</cm>
	p = (N - s) * 30 DIV 100 <cm>;30% от не двоечников</cm>
</ps></pre>
<p class="Header3">Кол-во троечников</p>
<p class="Content2">В 2011 С4 №7 мы искали только 20% лучших, значит критерий поиска был простым: <i>s &#038;lt p</i>. Теперь нужно искать не более 30% троечников и у них максимальный балл 60, значит критерий будет составным:</p>
<pre><ps>
	s = 0 i = 40 <cm>;сбрасываем сумму и начинаем с троечников</cm>
	Пока s < p И i < 61  <cm>;составной критерий для троечников</cm>
		i = i + 1 <cm>;переходим к следующей оценке</cm>
		s = s + k[i]<cm>;суммируем всех троечников</cm>
</ps></pre>
<p class="Header3">Возможные варианты</p>
<p class="Content2">Рассмотрим некоторые варианты разного количества троечников.</p>
<ol class="align_justify" start="1">
<li>Кол-во троечников составляет ровно 30%, и их максимальный балл меньше 60:</li>
</ol>
<pre><ps>
	Пока s < p И i < 61  <cm>;составной критерий для троечников</cm>
		i = i + 1 <cm>;переходим к следующей оценке</cm>
		s = s + k[i]<cm>;суммируем всех троечников</cm></ps>
	если s = p то <cm>;кол-во 3-ков 30% и их макс балл < 60</cm>
		<cm>;максимальная оценка и кол-во таких оценок</cm>
		печать i s
</pre>
<ol class="align_justify" start="2">
<li>Кол-во троечников меньше 30%, и их максимальный балл равен 60:</li>
</ol>
<pre>
	иначе если i = 60 И s < p то
		<cm>;максимальная оценка и кол-во таких оценок</cm>
		печать 60 s
   </pre>
<p class="Content2">Но! Если максимальный балл будет меньше чем 60, программа всё равно выведет 60… (в этом место нужно доработать).</p>
<ol class="align_justify" start="3">
<li>Троечники набравшие более 30% и какой-то один одинаковый:</li>
</ol>
<pre>
	иначе если  s = k[i] то
		<cm>;максимальная оценка и кол-во таких оценок</cm>
		печать i s
</pre>
<ol class="align_justify" start="4">
<li>Остальные троечники набравшие более 30% неодинаковые баллы:</li>
</ol>
<pre><ps>
	<cm>;убираем троечников, которые вышли за допустимую границу</cm>
	s = s - k[i]
	i = i – 1
	Пока k[i]=0
		i = i - 1
	печать i s <cm>;максимальная оценка и кол-во таких оценок</cm>
</ps></pre>
<p class="Content2">Подобный алгоритм описан в В 2011 С4 v07, только там, для избавления от отсутствующих оценок, нужно перемещаться в другую сторону массива оценок.</p>
<p class="Header3">Полный код на Python</p>
<pre>
  f = open("11C4v01.txt", encoding='utf-8', mode="r")
  n = <gr>int</gr>(f.readline())
  k = [0] * 100 <cm>#кол-во оценок</cm>
  <b>for</b> i <b>in</b> <gr>range</gr>(n):
	<cm>#a[0] - Фамилия (она не нужна)</cm>
	<cm>#a[1] - Имя (оно не нужно)</cm>
	<cm>#a[2] - номер школы [1..99] (он не нужен)</cm>
	<cm>#a[3] - балл ученика(цы)</cm>
	a = f.readline().split()
	iball = <gr>int</gr>(a[3]) - 1 <cm>#iball - [0..99]</cm>
	k[iball] += 1
  s = 0
  i = 0
  <b>for</b> i <b>in</b> <gr>range</gr>(39): <cm>#[0..38] т.е. первые 39 баллов</cm>
	s = s + k[i]
  print("i:",i," s:",s)
  p = (n-s)*30 // 100
  s = 0
  
  <cm>#старое значение i=38, а троечники начинаются с 39,</cm>
  <cm>зн. увеличим i на 1 до обращения к массиву k:</cm>
  <b>while</b> s < p and i < 59: <cm>#здесь 60 это индекс 61-го балла!</cm>
	i = i + 1
	s = s + k[i]

  <b>if</b> s == p:
	print(i+1," ",s)

  <b>elif</b> i == 59 and s < p:
	<cm>#выведет 60 даже если максимальный балл троечников < 60</cm>
	print("60", s)

  <b>elif</b> s == k[i]:
	print(i + 1, " ", s)
  <b>else</b>:
	s -= k[i]
	i -= 1
  <b>while</b> k[i] == 0:
	i -= 1
  print(i + 1, " ", s)

</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 9</strong></div>
<p class="Content2">На вход программе подается последовательность символов, заканчивающаяся символом #. Другие символы # во входной последовательности отсутствуют.</p>
<p class="Content2">Программа должна вывести на экран латинскую букву встречающуюся во входной последовательности наибольшее количество раз (во второй строке).</p>
<p class="Content2">Если таких букв во входной последовательности окажется несколько, программа должна вывести на экран всех, через пробел, в алфавитном порядке.</p>
<p class="Content2">Строчные и прописные буквы не различаются.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна решать поставленную задачу.</p>
<p class="Content2">Пример входных данных:</br>Day, mice. &#171;Year&#187; &#8212; a mistake#</br>Пример выходных данных:</br>A</br>4</p>
<p class="Header2">Решение:</p>
<p class="Header3">Количество каждой буквы в строке</p>
<pre><ps>
    s = "…" <cm>;строка со словами и другими символами</cm>
    n = длина строки s
    num[26] <cm>;массив количества латинских букв алфавита</cm>
    Для i от 1 до n <cm>;по каждому символу строки s</cm>
        если s[i] буква то <cm>;буква-не буква</cm>
            k = номер буквы
            <cm>;увеличиваем счётчик количества таких букв</cm>
            num[k] = num[k] + 1

</ps></pre>
<p class="Header3">Найдём максимум и их количество</p>
<p class="Content2">Найдём буквы, встречающиеся наибольшее количество раз, и число этих раз в массиве <i>s</i>:</p>
<pre><ps>
    ic = 0 <cm>;индекс первой буквы ('A') в массиве num</cm>
    k = 1 <cm>;счётчик количества максимумов в массиве num</cm>
    Для i от 1 до 26 <cm>;от 'B' до 'Z'</cm>
        если num[i] > num[ic] то ; находим максимум
            ic = i <cm>;индекс первой буквы меняем на индекс второй</cm>
            k = 1
        иначе если num[i] = num[ic] то </cm>;такой же максимум</cm>
            k = k + 1 <cm>;увеличиваем счётчик кол-ва максимумов</cm>

</ps></pre>
<p class="Header3">Вывод результатов</p>
<pre><ps>
    если k = 1 то <cm>;если максимум один</cm>
        печать ic <cm>;символ ic</cm>
    иначе
    Для i от 0 до 26 <cm>;от 'A' до 'Z'</cm>
        если num[i] = num[ic] то
            печать i ' ' <cm>;символ i</cm>
    печать num[ic] <cm>;кол-во максимумов</cm>
			
</ps></pre>
<p class="Header3">Полный код на Python</p>
<pre>
   <cm>#s = "Day, mice. 'Year' - a mistake#"</cm>
   s = "ABCD ABCE ABCF#"
   num = [0] * 26 <cm>#массив кол-ва букв алфавита</cm>

   <b>for</b> c <b>in</b> s:
      <b>if</b> c.isalpha():
         k = ord(c.upper()) - ord('A')
         num[k] += 1
   k = 1
   ic = 0
   <b>for</b> i <b>in</b> <gr>range</gr>(1,len(num)):
      <b>if</b> num[i] > num[ic]:
         ic = i
         k = 1
      <b>elif</b> num[i] == num[ic]:
         k += 1

   <b>if</b> k == 1:
      print (chr(ic + ord('A')))
   <b>else</b>:
      <b>for</b> i <b>in</b> <gr>range</gr>(0, len(num)):
         <b>if</b> num[i] == num[ic]:
            print(chr(i + ord('A')),end=" ")
         print()
   print(num[ic])

</pre>
<div class="Header2"><strong>Пример. ЕГЭ 2011 С4 Вариант 10</strong></div>
<p class="Content2">На вход программе подается последовательность символов, заканчивающаяся символом #. Другие символы # во входной последовательности отсутствуют.</p>
<p class="Content2">Программа должна вывести на экран символы латинского алфавита, в порядке увеличения частоты встречаемости во входной последовательности.</p>
<p class="Content2">Если буква во входной последовательности не встречается, её выводить не нужно.</p>
<p class="Content2">Если несколько букв встречаются одинаковое количество раз, программа должна вывести их в алфавитном порядке.</p>
<p class="Content2">Строчные и прописные буквы не различаются.</p>
<p class="Content2">Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна решать поставленную задачу.</p>
<p class="Content2">Пример входных данных:</br>Aced, ccedaa f#</br>Пример выходных данных:</br>FDEAC</p>
<p class="Header2">Решение:</p>
<p class="Header3">Количество каждой буквы в строке</p>
<p class="Content2">Для вывода букв, в порядке увеличения частоты встречаемости, нужен массив количества букв алфавита:</p>
<pre><ps>
    s = "…" <cm>;строка со словами и другими символами</cm>
    n = длина строки s
    num[26] <cm>;массив количества латинских букв алфавита</cm>
    Для i от 1 до n <cm>;по каждому символу строки s</cm>
        если s[i] буква то <cm>;буква-не буква</cm>
            k = номер буквы
          <cm>;увеличиваем счётчик количества таких букв</cm>
            num[k] = num[k] + 1
			
</ps></pre>
<p class="Header3">Сортировка </p>
<p class="Content2">Отсортируем массив <i>num</i> по возрастанию:</p>
<pre><ps>
    Для i от 1 до 25 <cm>;от 'A' до 'Y'</cm>
        Для j от 25-i
            если num[j] > num[j+1] то
                t = num[j]
                num[j] = num[j+1]
                num[j+1] = t ;

</ps></pre>
<p class="Content2">Получили отсортированную по возрастанию, частоту встречаемости символов, но неизвестно какие это будут символы – индексы будут утеряны.</p>
<p class="Content2">Выход такой: завести массив символов по алфавиту <i>sym</i>. Далее, одновременно с сортировкой массива <i>num</i>, будут перестановки элементов массива <i>sym</i> с теми же индексами, что и индексы массива <i>num</i>:</p>
<pre><ps>
    …
    sym = [a,b,c,…,z]
    Для i от 1 до 25 <cm>;от 'A' до 'Y'</cm>
        Для j от 25-i ;
            если num[j] > num[j+1] то
                t = num[j]              c = sym[y]
                num[j] = num[j+1]       sym[j] = sym[j+1]
                num[j+1] = t            sym[j+1] = c

</ps></pre>
<p class="Header3">Вывод результатов</p>
<p class="Content2">Если дана строка <i>Aced, ccedaa f</i> , то после сортировки массивы <i>num</i> и <i>sym</i> будут такими:</p>
<p class="Content3">num &#8212; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 3 3]</p>
<p class="Content3">sym &#8212; [b g h I j k l  m n o p q r s t u v w x y z f d e a c]</p>
<p class="Content3">Выводим символы массива <i>sym</i>, начиная с символа <i>f</i>:</p>
<pre><ps>
    j = 22 <cm>;индекс символа 'f'</cm>
    Для i от j до 26 <cm>;от 22 до 26</cm>
        печать sym[i]

</ps></pre>
<p class="Content2">Найти значение первого символа легко: если посмотреть на массив <i>num</i>, то в нём 21 нуль:</p>
<pre><ps>
    j = 0 <cm>;индекс символа 'f'</cm>
    Пока num[j] = 0 ; после цикла j будет равно 22
        j = j + 1
    Для i от j до 26 <cm>;от 22 до 26</cm>
        печать sym[i]

</ps></pre>
<p class="Header3">Полный код на Python</p>
<pre>
   s = "Aced, ccedaa f#" <cm>#символ '#' в этом коде не нужен</cm>
   num = [0] * 26 <cm>#массив кол-ва латинских букв алфавита</cm>
   sym = [0] * 26 <cm>#массив латинских букв алфавита ('a'.. 'z')</cm>

   <b>for</b> i <b>in</b> <gr>range</gr>(26):
      sym[i] = chr(i+65)

   <b>for</b> c <b>in</b> s:
      <b>if</b> c.isalpha():
         k = ord(c.upper()) - ord('A')
         num[k] += 1

   <b>for</b> i <b>in</b> <gr>range</gr>(26 - 1):
      <b>for</b> j <b>in</b> <gr>range</gr>(26 - i - 1):
         <b>if</b> num[j] > num[j + 1]:
            num[j], num[j + 1] = num[j + 1], num[j]
            sym[j], sym[j + 1] = sym[j + 1], sym[j]

   j=0
   <b>while</b> num[j] == 0:
      j += 1
   <b>for</b> i <b>in</b> <gr>range</gr>(j, 26):
      print(sym[i],end=" ")
</pre>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=214</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5. Microsoft Access. Уровень 1. Создание отчётов</title>
		<link>http://kshu.su/?p=72</link>
		<comments>http://kshu.su/?p=72#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:10:28 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Access]]></category>

		<guid isPermaLink="false">http://kshu/?p=72</guid>
		<description><![CDATA[Простые отчёты, отчёты с группировкой(итоговые). Сортировка отчётов. Разрыв страниц в отчётах. Создание отчётов с помощью мастера, источники данных одна таблица, две связанные таблицы и запрос по связанным таблицам. Отчёты можно создавать на основании таблицы, таблиц, запроса и запросов. Для этой практической работы, должна быть открыта база данных БД_Студенты4 сохранённая после предыдущей работы. Отчёт 1 Создадим [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Простые отчёты, отчёты с группировкой(итоговые). Сортировка отчётов. Разрыв страниц в отчётах. Создание отчётов с помощью мастера, источники данных одна таблица, две связанные таблицы и запрос по связанным таблицам.</p>
<p><span id="more-72"></span>	</p>
<p class="Content2">Отчёты можно создавать на основании таблицы, таблиц, запроса и запросов.</p>
<p class="Content2">Для этой практической работы, должна быть открыта база данных <b>БД_Студенты4</b> сохранённая после предыдущей работы.</p>
<p class="Content2Top"><b>Отчёт 1</b></p>
<p class="Content2">Создадим отчёт с помощью мастера, <i>Создание/Очёты/Мастер отчётов</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-076.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем таблицу <i>Студенты</i>, внизу появятся все поля этой таблицы, кнопкой > перенесём поля: <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, <i>Деятельность</i> и <i>Стипендия</i>, жмём <i>Далее</i>, на втором шаге предлагается выбрать группировку(мы её разберём позже) по умолчанию ничего не предложено, жмём <i>Далее</i>, на третьем шаге предлагают задать сортировку записей, её лучше делать в режиме предварительного просмотра отчёта, также жмём <i>Далее</i>, на четвёртом шаге выбираем табличный макет, книжную ориентацию и активируем флажок настройки ширины полей, жмём <i>Далее</i>, на последнем шаге имя отчёта <i>Студенты</i> выбираем флажок <i>Просмотреть отчёт</i>  и жмём <i>Готово</i></p>
<p class="Content2">Открылся отчёт в режиме предварительного просмотра. Внизу справа листа отчёта указана текущая страница и их общее количество. Внизу окна программы кнопки навигации по листам отчёта. Правый клик по вкладке отчёта, закроем его. Слева панель отобразила новый тип объекта базы данных – отчёт <i>Студенты</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-077.jpg" alt="1" /></div>
<p class="Content2Top"><b>Отчёт 2</b></p>
<p class="Content2">Создадим отчёт с помощью мастера, <i>Создание/Очёты/Мастер отчётов</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-076.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем запрос <i>Выбор факультета</i>, внизу появятся все поля этой таблицы, кнопкой <b>>></b> перенесём все поля, жмём <i>Далее</i>, на втором шаге по умолчанию предложена группировка по полю <i>КодФакультета</i>, это потому что поле <i>КодФакультета</i> есть внешний ключ и содержит повторяющиеся записи, поэтому программа предложила группировку именно по этому полю. Для нас это не важно просто, жмём <i>Далее</i>, на третьем шаге жмём <i>Далее</i>, на четвёртом шаге выбираем ступенчатый макет, альбомную ориентацию и активируем флажок настройки ширины полей, жмём <i>Далее</i>, на последнем шаге имя отчёта <i>Выбор факультета</i> выбираем флажок <i>Просмотреть отчёт</i>  и жмём <i>Готово</i></p>
<p class="Content2">Поскольку отчёт строится по параметрическому запросу, то он будет требовать ввода значения для поля <i>КодФакультета</i>, введём <b>3</b> и ОК. В результате будет построен отчёт для студентов из 3-го факультета. Чтобы изменить внешний вид полей, нужно перейти в режим макета или конструктора. Перейдём в режим макета  правым кликом по вкладке или командой <i>Конструктор/Режимы</i> далее в списке режимов выбрать режим макета:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-078.jpg" alt="1" /></div>
<p class="Content2">Теперь выберем несколько полей и на вкладке <i>Формат</i> группа <i>Форматирование элементов управления</i> в списке <i>Контур фигуры</i> выберем любой цвет:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-079.jpg" alt="1" /></div>
<p class="Content2">Перейдём в режим предварительного просмотра, чтобы проверить результат перед печатью. Правый клик по вкладке закроем отчёт. </p>
<p class="Content2Top"><b>Отчёт 3</b></p>
<p class="Content2">Создадим отчёт с помощью мастера, <i>Создание/Очёты/Мастер отчётов</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-076.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем таблицу <i>Факультеты</i>, кнопкой <b>>></b> перенесём все поля, теперь выбираем таблицу <i>Студенты</i> и выбираем поля <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i> и <i>Деятельность</i>, жмём <i>Далее</i>, на втором шаге подобно формам слева окно с выбором главной таблицей, а справа результат полей таблиц на основании связи между таблицами. Выбираем главной таблицу <i>Факультеты</i>. Поскольку таблица <i>Факультеты</i> является главной, то справа расположение её полей будут выше относительно полей таблицы <i>Студенты</i>, жмём <i>Далее</i>, на третьем и четвёртом  шаге жмём <i>Далее</i>, на пятом шаге выбираем блочный макет, альбомную ориентацию и активируем флажок настройки ширины полей, жмём <i>Далее</i>, на последнем шаге имя отчёта <i>Факультеты</i> выбираем флажок <i>Просмотреть отчёт</i>  и жмём <i>Готово</i></p>
<p class="Content2">На предварительном просмотре под каждой записью главной таблицы <i>Факультеты</i>, расположены соответствующие записи вторичной таблицы <i>Студенты</i>. Сохраним и закроем отчёт.</p>
<p class="Content2Top"><b>Отчёт 4</b></p>
<p class="Content2">Создадим отчёт с помощью мастера, <i>Создание/Очёты/Мастер отчётов</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-076.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем запрос <i>Экскурсии 2014</i>, кнопкой <b>>></b> перенесём все поля, жмём <i>Далее</i>, на втором шаге слева окно с выбором главной таблицей, а справа результат полей таблиц на основании связи между таблицами. Выбираем главной таблицу <i>Экскурсии</i>, жмём <i>Далее</i>, на третьем и четвёртом  шаге жмём <i>Далее</i>, на пятом шаге выбираем ступенчатый макет, альбомную ориентацию и активируем флажок настройки ширины полей, жмём <i>Далее</i>, на последнем шаге имя отчёта <i>Экскурсии 2014</i> выбираем флажок <i>Просмотреть отчёт</i>  и жмём <i>Готово</i></p>
<p class="Content2">На предварительном просмотре под каждой записью главной таблицы <i>Экскурсии</i>, расположены соответствующие записи таблиц <i>Студенты</i> и <i>Факультеты</i>. Сохраним и закроем отчёт.</p>
<p class="Content2Top"><b>Отчёт 5</b></p>
<p class="Content2">Создадим отчёт с помощью мастера, <i>Создание/Очёты/Мастер отчётов</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-076.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем таблицу <i>Студенты</i>, внизу появятся все поля этой таблицы, кнопкой > перенесём поля: <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, <i>Деятельность</i>, <i>Стипендия</i> и <i>КодФакультета</i>, жмём <i>Далее</i>, на втором шаге предлагается выбрать группировку(вспомним что такое групповой запрос) поскольку мы выбрали связанное поле <i>КодФакультета</i>, то программа предлагает выбрать группировку. По умолчанию группировка по полю <i>КодФакультета</i>(если нужно изменить группировку, воспользуемся кнопками <b><</b> и <b>></b> для удаления и выбора полей соответственно), оставляем группировку по полю <i>КодФакультета</i> и жмём <i>Далее</i>, на третьем шаге предлагают задать сортировку записей, а также в связи с тем, что у нас выбрано групповое поле, появилась кнопка <i>Итоги</i>, жмём на неё, программа построила поля по которым можно применить групповые операции, выберем операцию <b>Sum</b> правее оставим флажок <i>данные и итоги</i> и <i>Вычислить проценты</i> жмём ОК и <i>Далее</i>, на четвёртом шаге выбираем ступенчатый макет, альбомную ориентацию и активируем флажок настройки ширины полей, жмём <i>Далее</i>, на последнем шаге имя отчёта <i>Студенты по факультетам</i>, выбираем флажок <i>Просмотреть отчёт</i>  и жмём <i>Готово</i></p>
<p class="Content2">Открылся отчёт в режиме предварительного просмотра. Возможно данные поля <i>Стипендия</i> не уместились. Правый клик по вкладке отчёта и переходим в режим макета. Двигая и изменяя размер полей, освободим место для данных поля <i>Стипендия</i>.</p>
<p class="Content2">Теперь проверим результат отчёта(можно и в режиме макета). Первый факультет содержит 4 студента, их общая сумма отображена напротив поля <i>Sum</i>. Непонятную строку <i>С разделителями разрядов</i> лучше изменить на <i>Доля суммы факультета</i> </p>
<p class="Content2">Оформим внешний вид для полей и фона самостоятельно с помощью команд: <i>Конструктор/Темы и Формат/Форматирование элементов управления/Заливка фигур</i> или <i>Контур фигур</i>. Правый клик по вкладке закроем отчёт.</p>
<div class="Header2">Сортировка отчётов</div>
<p class="Content2">Откроем отчёт <i>Студенты по факультетам</i> и перейдём в режим макета. Проверим расположение одинаковых фамилий и имён в 3-м факультете.</p>
<p class="Content2">Выполним команду <i>Конструктор/Группировка и итоги/Группировка</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-080.jpg" alt="1" /></div>
<p class="Content2">Внизу отчёт, отделился областью <i>Группировка, сортировка и итоги</i> и две кнопки <i>Добавить группировку</i> и <i>Добавить сортировку</i>. Выбрана группировка по полю <i>КодФакультета</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-081.jpg" alt="1" /></div>
<p class="Content2">Нажимаем <i>Добавить сортировку</i> в поле со списком выбираем пункт <i>Фамилия</i>. Повторим для пунктов <i>Имя</i> и <i>Отчество</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-082.jpg" alt="1" /></div>
<p class="Content2">Проверим сортировку одинаковых фамилий и имён в 3-м факультете.</p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Выделите зелёным цветом заливку, стипендий менее 800. (делаем по тому же принципу как мы делали в формах с помощью условного форматирования)</p>
<p class="Content2">Аналогично для поля <i>Сумма по факультету</i> выделите фон жёлтым цветом для значений более 800 руб. Подсказка. Выделите поле с суммой и примените условное форматирование.</p>
<div class="Header2">Разрывы страниц в отчётах</div>
<p class="Content2">По умолчанию большие отчёты идут сплошными страницами и разорваны без учёта начала той или иной группы. Настроим разрывы в отчётах.</p>
<p class="Content2">В режиме конструктора правый клик по заголовку группы <i>КодФакультета</i>, выбираем <i>Свойства</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-083.jpg" alt="1" /></div>
<p class="Content2">Появится панель <i>Окно свойств</i> на вкладке <i>Макет</i> свойство <i>Конец страницы</i> выбираем пункт <b>До раздела</b>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-084.jpg" alt="1" /></div>
<p class="Content2">Переключаемся в режим предварительного просмотра и пролистаем студентов по факультетам. Переключаемся в режим конструктора</p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Построить отчёт с расчётом средней стипендии по каждой деятельности.</p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=72</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4. Microsoft Access. Уровень 1. Обработка данных</title>
		<link>http://kshu.su/?p=70</link>
		<comments>http://kshu.su/?p=70#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:09:42 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Access]]></category>

		<guid isPermaLink="false">http://kshu/?p=70</guid>
		<description><![CDATA[Отбор данных с помощью фильтра. Сортировка данных. Итоговые операции. Поиск и замена. Запрос на выборку данных из одной и нескольких таблиц. Вычисляемые поля в запросах. Параметрический запрос. Запрос с группировкой. Сортировка несмежных полей Откроем файл базы данных БД_Студенты_4. Выбираем Включить содержимое. Вспомним, как создавать формы и создадим форму по всем полям студентов и назовём её [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Отбор данных с помощью фильтра. Сортировка данных. Итоговые операции. Поиск и замена. Запрос на выборку данных из одной и нескольких таблиц. Вычисляемые поля в запросах. Параметрический запрос. Запрос с группировкой. Сортировка несмежных полей</p>
<p><span id="more-70"></span>	</p>
<p class="Content2Top">Откроем файл базы данных <a href ="wp-content/uploads/access/БД_Студенты_4.accdb">БД_Студенты_4</a>. Выбираем <i>Включить содержимое</i>. Вспомним, как создавать формы и создадим форму по всем полям студентов и назовём её <i>Студенты</i></p>
<div class="Header2">Фильтры</div>
<p class="Content2">Откроем таблицу <i>Студенты</i>. Раскроем в заголовке поля <i>Деятельность</i>, список его свойств, снимем галочку <i>Выделить всё</i> и активируем галочку <i>Музыкант</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-043.jpg" alt="1" /></div>
<p class="Content2">Жмём ОК и таблица отобразит записи студентов музыкантов, а заголовок поля <i>Деятельность</i>, отобразит значок с фильтром. Кроме этого значка, режим фильтра виден на вкладке <i>Главная</i> в группе <i>Сортировка и фильтр</i> – выделена кнопка <i>Фильтр</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-044.jpg" alt="1" /></div>
<p class="Content2">Раскроем поле <i>Деятельность</i>, выберем галочку <i>Выделить всё</i> и жмём ОК.</p>
<p class="Content2">Отобразим студентов которые помогают библиотеке , но другим способом: правый клик в ячейке <i>Библиотекарь</i> и выбираем <i>Равно &#171;Библиотекарь&#187;</i>. Отменим эту операцию опять же правый клик в поле <i>Библиотекарь</i>  и Снять фильтр с <i>Деятельность</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-045.jpg" alt="1" /></div>
<p class="Prgf_BkgCollFill">Если бы мы отменили предыдущий фильтр активной кнопкой <i>Фильтр</i> из <i>Главная/Сортировка и фильтр</i>, то она бы снова отобразила всех кассиров.</p>
<p class="Content2Top">Отобразим с помощью фильтра студентов, стипендия которых больше 800: правый клик по любой ячейке поля <i>Стипендия</i>, выбираем Числовые фильтры/Больше, в диалоге вводим 800 и ОК. Таблица отобразит записи студентов, стипендия которых больше чем 800. Снимем фильтр кнопкой <i>Фильтр</i> на <i>Главная/Сортировка и фильтр</i>.</p>
<p class="Content2">Отобразим в этой таблице студенток со стипендиями до 800р и студентов со стипендиями: раскроем в заголовке поля <i>Пол</i> список, выберем галочку <i>Женский</i> и ОК. Затем раскроем в заголовке поля <i>Стипендия</i> список, выберем пункт <i>Числовые фильтры/Меньше</i>,  в диалоге вводим 800 и ОК. Получили ????? строк. Теперь в этом же условии нужно ЕЩЁ отобразить мужчин, стипендия которых больше 800р: Не снимая предыдущего фильтра, выбираем команду <i>Главная/Сортировка и фильтр</i>/Дополнительно/Изменить фильтр (не перепутать кнопку Дополнительно, из группы Записи):</p>
<p class="Content2">Появится бланк с нашим условием: <i>Женский <= 800</i>. Внизу две вкладки <i>Найти</i> и <i>Или</i>, активируем вкладку <i>Или</i> и вводим ещё одно условие в поле <i>Пол</i> – <i>Мужской</i> а в поле <i>Стипендия</i> &#8212; <i>>=800</i>.</p>
<p class="Content2">Теперь отобразим результат кнопкой <i>Фильтр</i> на <i>Главная/Сортировка и фильтр</i>. Будут отображены строки согласно нашему сложному условию.</p>
<p class="Content2">Снимем фильтр кнопкой <i>Фильтр</i> на вкладке <i>Главная</i>  группа <i>Сортировка и фильтр</i>. Закроем таблицу <i>Студенты</i>.</p>
<p class="Content2Top">Откроем форму <i>Студенты</i>, найдём всех IT-специалистов: правый клик по полю <i>Деятельность</i> (не заголовку) и выберем пункт <i>Равно &#171;IT-специалист&#187;</i> и теперь мы можем в форме пролистать только IT-специалистов.</p>
<p class="Content2">Снимем фильтр кнопкой <i>Фильтр</i> на <i>Главная/Сортировка и фильтр</i>. Закроем форму.</p>
<div class="Header2">Сортировка</div>
<p class="Content2">Откроем таблицу <i>Студенты</i>. Отсортируем поле <i>Деятельность</i> по алфавиту: выделим за заголовок поле <i>Деятельность</i> и выполним команду  <i>Главная/Сортировка и фильтр/По возрастанию</i>.</p>
<p class="Content2">Отменим сортировку командой <i>Главная/Сортировка и фильтр/Удалить сортировку</i>.</p>
<p class="Content2">Отсортируем по ФИО: выделим за заголовки одновременно три столбца <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i> и выполним команду <i>Главная/Сортировка и фильтр/По возрастанию</i>. Найдём однофамильцев и проверим результат сортировки их имён. Отменим сортировку пунктом <i>Удалить сортировку</i> на <i>Главная/Сортировка и фильтр</i>.</p>
<p class="Content2Top">Однако отсортировать одновременно несмежные поля такой командой нельзя. Несмежные поля сортируются с помощью запросов.</p>
<div class="Header2">Итоги</div>
<p class="Content2">Операция <b>Итоги</b>, помогают быстро получить некоторые вычисления. Для таблицы <i>Студенты</i> нажмём на вкладке <i>Главная</i> в группе <i>Записи</i> кнопку <i>Итоги</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-087.jpg" alt="1" /></div>
<p class="Content2">Внизу программы, появится строка <b>Итог</b>, щёлкнем в этой строке в ячейке поля <i>Стипендия</i> , появится раскрывающийся список:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-088.jpg" alt="1" /></div>
<p class="Content2">Поскольку поле <i>Стипендия</i> содержит числовые данные, то в списке можно выбрать команды для получения суммы, среднего значения, количество записей, максимального и минимального значений в этом поле и другие команды. Проверим количество записей в этом поле:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-089.jpg" alt="1" /></div>
<p class="Content2">Поскольку каждый студент содержит стипендию, то результат будет равен количеству записей таблицы(число записей показано внизу таблицы правее строки <b>Запись</b>, если отключить кнопку <i>Итоги</i>).</p>
<p class="Content2">Теперь удалим две стипендии и проверим – итоговая ячейка отобразила минус два значения.</p>
<p class="Content2Top">Также можно получить итоговый результат по отфильтрованному значению. Например, отобразим с помощью фильтра только студентов:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-090.jpg" alt="1" /></div>
<p class="Content2">и проверим результат в итоговой ячейке. Снимем операцию <b>Итоги</b>, повторным нажатием на кнопку <i>Итоги</i> на вкладке <i>Главная</i>.</p>
<div class="Header2">Поиск и замена</div>
<p class="Content2">Найдём участников КВН: щёлкнем в любой ячейке поля <i>Деятельность</i>, далее <i>Главная/Найти</i> , заполним в диалоге поля:</p>
<p class="Content2"><i>Образец</i> – <b>Участник КВН</b>, <i>Поиск в</i> &#8212; <b>Текущее поле</b>, <i>Совпадение</i> &#8212; <b>С начала поля</b>, <i>Просмотр</i> &#8212; Все. Последовательно нажимаем <i>Найти</i> далее до появления диалога с окончанием поиска.</p>
<p class="Content2">Теперь поменяем всех музыкантов, участниками КВН: щёлкнем в любой ячейке поля <i>Деятельность</i>, далее команда <i>Главная/Заменить</i> заполним в диалоге поля </p>
<p class="Content2"><i>Образец</i> – <b>Музыкант</b>, <i>Заменить на</i> – <b>Участник КВН</b>, <i>Поиск</i> &#8212; <b>Текущее поле</b>, <i>Совпадение</i> &#8212; <b>С любой частью поля</b>, <i>Просмотр</i> &#8212; <b>Все</b>. Нажимаем <i>Заменить всё</i>. Каждый музыкант, теперь будет только участником КВН. При этом отмена действий не возможна. Возможно только повторная замена КВНщиков на музыкантов, НО, если перед первой заменой КВНщики УЖЕ были, то после второй замены они получатся музыкантами.</p>
<p class="Prgf_BkgCollFill">Замена не сработает для поля, которое связано с первичной таблицей, а также, если поле с фиксированным набором значений, ограничено списком.</p>
<p class="Content2Top">Аналогично можно произвести поиск в форме. Если открыть форму в режиме формы, щёлкнуть в поле с данными и выполнить команду <i>Главная/Заменить</i>.</p>
<p class="Content2">Закроем все открытые объекты в базе данных.</p>
<div class="Header2">Запросы на выборку</div>
<p class="Content2">Запросы служат для обработки табличной информации. Они производят отбор записей из одной или нескольких таблиц. Запросы могут сортировать несмежные поля таблиц, и производит вычисления для определённого вывода данных.</p>
<p class="Content2Top"><b>Запрос 1</b></p>
<p class="Content2">В базе <b>БД_Студенты_4</b>, создадим запрос командой: <i>Создание/Запросы/Конструктор запросов</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В конструкторе запроса появится диалог <i>Добавление таблицы</i> для выбора источника данных, откуда будем вести запрос. Выбираем таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-047.jpg" alt="1" /></div>
<p class="Content2">В поле конструктора запросов появится панель с полями таблицы <i>Студенты</i>.</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-048.jpg" alt="1" /></div>
<p class="Content2">Удалим эту панель клавишей [Del], а затем снова добавим командой <i>Конструктор/Настройка запроса/Отобразить таблицу</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-074.jpg" alt="1" /></div>
<p class="Content2">Теперь двойной клик по полям в панели, добавим в запрос поля <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Деятельность</i> и <i>Стипендия</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-049.jpg" alt="1" /></div>
<p class="Content2">Поля добавляются слева направо. Добавим в запрос поле <i>Пол</i> и удалим его для практики. Выделим в запросе поле <i>Пол</i> (чёрная стрелка над заголовком) и удалим клавишей [Del]:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-050.jpg" alt="1" /></div>
<p class="Content2">Мы забыли поместить поле <i>Отчество</i>. Методом перетаскивания тянем из панели поле <i>Отчество</i> и располагаем в запросе поверх поля <i>Деятельность</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-051.jpg" alt="1" /></div>
<p class="Content2">И наконец, переместим поле <i>Деятельность</i> за полем <i>Стипендия</i>: Курсор над заголовком поля <i>Деятельность</i> так, чтобы курсор был в виде белой стрелки (если будет чёрная, двигаем немного вниз) затем располагаем курсор над правой границей поля <i>Стипендия</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-052.jpg" alt="1" /></div>
<p class="Content2">Запускаем запрос с отображением результата нашей работы: <i>Конструктор/Результаты/Выполнить</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-053.jpg" alt="1" /></div>
<p class="Content2">Получился результат как в таблице, но только с теми полями, которые мы отобразили. Возвращаемся обратно в режим конструктора правым кликом по вкладке и выбираем пункт <i>Конструктор</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-054.jpg" alt="1" /></div>
<p class="Content2">Упорядочим записи по возрастанию стипендии: в строке <i>Сортировка</i> нашего запроса, для поля <i>Стипендия</i> выбираем <b>по возрастанию<bi>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-055.jpg" alt="1" /></div>
<p class="Content2">Запускаем запрос и проверяем, что все студенты отсортированы по окладу. Вернёмся в режим конструктора и уберём сортировку по окладу.</p>
<p class="Content2">Двойным кликом добавим в запрос поле <i>КодФакультета</i>  и аналогично отсортируем это поле по возрастанию:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-056.jpg" alt="1" /></div>
<p class="Content2">запускаем запрос и проверяем, что поле <i>КодФакультета</i> отсортирован. Вернёмся в режим конструктора.</p>
<p class="Content2">Теперь мы хотим, чтобы ФИО в каждом факультете тоже были отсортированы. Если мы добавим ещё сортировку по возрастанию для ФИО:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-057.jpg" alt="1" /></div>
<p class="Content2">и запустим запрос, то в результате сортировка будет неправильной т.к. сортировка выполнилась слева направо. Проблема решается так:</p>
<ol class="align_justify">
<li>добавляется ещё одно такое же поле в нашем случае это <i>КодФакультета</i>,</li>
<li>сортируется это поле</li>
<li>отключается видимость этого поля</li>
</ol>
<p class="Content2">Причём поле <i>КодФакультета</i> должно быть крайним левым в запросе:</p>
<p class="Content2Top">Добавим в запрос, второе поле <i>КодФакультета</i> левее ФИО и применим ему сортировку по возрастанию, а сортировку для первого поля <i>КодФакультета</i>  снимем. Запустим запрос. В результате появилось вымышленное имя для второго поля <i>КодФакультета</i>, поскольку два одинаковых поля в таблице быть не должно. Вернёмся в конструктор, и снимем галку Вывод на экран для левого поля <i>КодФакультета</i> :</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-057-2.jpg" alt="1" /></div>
<p class="Content2">и снова запустим запрос. В результате мы получили то, что хотели.</p>
<p class="Content2">Правый клик по вкладке, сохраним запрос под именем <i>Сортировка студентов по факультетам</i>. Правый клик по вкладке, закроем запрос. </p>
<p class="Content2">В левой панели программы MS Access, появился новый объект <b>Запрос</b>, если он не появился, выберите команду <i>Все объекты Access</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-086.jpg" alt="1" /></div>
<p class="Content2">Теперь дважды кликните по нему и программа запустит запрос.</p>
<p class="Content2Top"><b>Запрос 2</b></p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге снова выбираем таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Обратим внимание на звёздочку в панели с полями:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-048.jpg" alt="1" /></div>
<p class="Content2">Сделаем двойной клик по этой звёздочке, мы получим в запросе всего одно поле (со звёздочкой):</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-058.jpg" alt="1" /></div>
<p class="Content2">Звёздочка заменяет отображение всех полей таблицы, если мы запустим запрос. Запустим запрос и увидим отображение всех полей таблицы. В чём удобство этого символа?</p>
<p class="Content2">Если мы хотим вывести все поля таблицы, но при этом что бы выполнялось какое-то условие только для одного поля, мы добавим это поле в запрос и применим нужное для нас условие. Например, заставим запрос выводить все поля таблицы, но только для факультета 3: добавим в запрос поле <i>КодФакультета</i>, затем в строку <i>Условие отбора</i>  введём <b>3</b>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-059.jpg" alt="1" /></div>
<p class="Content2">Теперь запустим запрос. Появилась таблица, но с лишним полем для <i>КодФакультета</i>, вернёмся в конструктор, и отключим видимость для поля <i>КодФакультета</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-060.jpg" alt="1" /></div>
<p class="Content2">Снова запустим запрос для проверки изменений. Вернёмся в конструктор. Выделим оба поля и удалим их клавишей [Del]:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-061.jpg" alt="1" /></div>
<p class="Content2">Добавим в конструктор запроса, поля <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, <i>Деятельность</i> и <i>Стипендия</i>. Отобразим студентов, у которых стипендия от 800 до 1000 включительно: Курсор в строку <i>Условие отбора</i> для поля <i>Стипендия</i> и вводим <b>between 800 and 1000</b> (что бы лучше было видно текст, нажмём [Shift+F2])</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-062.jpg" alt="1" /></div>
<p class="Content2">ОК, запускаем запрос для проверки. Должно быть 19 записей.</p>
<p class="Content2">Возвращаемся в конструктор, и отобразим студентов, у которых стипендия за пределами предыдущего диапазона, т.е. меньше 800 и больше 1000: изменим наше условие и добавим к нему логическое отрицание – <b>Not</b>:</p>
<p class="Content2"><b>Not between 800 and 1000</b></p>
<p class="Content2">Запускаем запрос для проверки. Должно быть 16 записей.</p>
<p class="Content2Top"><strong>Диапазоны</strong></p>
<p class="Content2">Вместо оператора <b>between</b> можно воспользоваться операторами сравнений, >,<, так, вместо <b>between 800 and 1000</b> можно ввести</p>
<p class="Content2"> <b>>= 800 and <= 1000</b></p>
<p class="Content2">Но вместо <b>Not between 800 and 1000</b> мы вводим </p>
<p class="Content2"><b><800 or >1000</b></p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Отобразить студентов рождённых в 80-90 г.р включительно, т.е. между началом 1980 и концом 1979 года. И сохранить запрос под именем <i>Студенты 80-90 года рождения</i>.</p>
<p class="Content2Top"><b>Запрос 3</b></p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге снова выбираем таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Добавим в запрос поля <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, <i>Деятельность</i> и <i>Стипендия</i>. Отобразим всех пешеходов: в строке <i>Условие отбора</i> поля <i>Деятельность</i> вводим <b>лаборант</b>, нажимаем [Tab] или щёлкнем в любом месте запроса. Запустим запрос, для проверки работы условия.</p>
<p class="Content2">Аналогично отобразим всех волонтёров (в этом же запросе), но поскольку слева и справа в названии этой деятельности добавлено ещё и пояснение, то в условии требуется добавить управляемые символы <b>*</b>: введём в строку <i>Условие отбора</i> &#8212; <b>*волонтёр*</b>. Программа подставит <i>Like</i> и поместит условие в кавычки:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-063.jpg" alt="1" /></div>
<p class="Content2">Запустим запрос для проверки. Должно быть 6 записей. Правый клик по вкладке, сохраним запрос под именем <i>Волонтёры</i> и закроем его.</p>
<p class="Content2Top"><b>Запрос 4</b></p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге снова выбираем таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Добавим в запрос поля <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, и <i>Хобби</i>. Запустим его и убедимся, что в поле <i>Хобби</i>, есть данные и пустые ячейки. Отобразим всех, у кого НЕТ хобби: в режиме запроса в строку <i>Условие отбора</i> для поля <i>Хобби</i> вводим <b>null</b>, запустим запрос и проверяем всех, у кого нет хобби. Аналогично отобразим всех, у кого есть хобби: в режиме конструктора туда же вводим <b>not null</b> и запустим запрос для проверки.</p>
<p class="Content2">Вернёмся в конструктор, и введём предыдущие два условия в альтернативной форме: <b>not*</b> &#8212; результат тот же, что и при <b>null</b> и <b>*</b> &#8212; тоже что и <b>not null</b>. Правый клик по вкладке, сохраним запрос под именем <i>Нет хобби</i>. Закроем запрос.</p>
<p class="Content2Top"><b>Запрос 5</b></p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге снова выбираем таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Добавим в запрос поля <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, <i>Деятельность</i> и <i>ГражданствоРФ</i>. Запустим его и убедимся, что в поле <i>ГражданствоРФ</i> установлены флажки, т.е. это логический тип, а условия для логических типов содержат либо <b>1</b>(Истина), либо <b>0</b>(Ложь).</p>
<p class="Content2">В режиме конструктора в условие отбора для поля <i>ГражданствоРФ</i>, введём <b>0</b>, запустим запрос и проверим, должно быть 6 записей, а в поле <i>ГражданствоРФ</i> флажки пустые. Сохраним запрос под именем Нет гражданства</p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Создать новый запрос, который отображает студентов, у которых код телефона либо 903, либо 910.</p>
<p class="Content2">Подсказка. Использовать два условия одно в строке <i>Условие отбора</i>, другое в строке <i>или</i>. Сохранить запрос под именем <i>Моб. телефон 903 910</i> и закрыть его.</p>
<p class="Content2Top"><b>Запрос 6</b></p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<p class="Content2">Двойной клик, и выбираем таблицы <i>Студенты</i>, <i>Факультеты</i>, <i>Экскурсии</i> и жмём <i>Закрыть</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-064.jpg" alt="1" /></div>
<p class="Content2">Таблицы <i>Студенты</i> и <i>Факультеты</i> связаны, но таблицу, с которой связана таблица <i>Экскурсии</i>, мы не отобразили. Какой может быть результат, если отобразить поля несвязанных таблиц? Поместим в запрос поля <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i> и <i>Название</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-065.jpg" alt="1" /></div>
<p class="Content2">Запустим запрос. Результат будет неожиданный: 175 записей. Т.е. каждая запись! таблицы <i>Экскурсии</i>, содержит все записи несвязанной с ней таблицей.</p>
<p class="Content2">Вернёмся в конструктор и добавим таблицу, которая связана с таблицей <i>Экскурсии</i> и с таблицей <i>Студенты</i>: правый клик по пустому полю с панелями, пункт <i>Добавить таблицу</i>, в диалоге добавим таблицу <i>Экскурсанты</i> и жмём <i>Закрыть</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-066.jpg" alt="1" /></div>
<p class="Prgf_BkgCollFill">Другими словами, при связи МНОГИЕ-КО-МНОГИМ ( <b>&#8734;</b> : <b>&#8734;</b> ), должны быть добавлены все три таблицы, а формировать запрос с несвязанными таблицами нельзя!!!</p>
<p class="Content2Top">Удалим все поля в запросе. Теперь отобразим студентов из определённого факультета, которые посетили ту или иную экскурсию: из таблицы <i>Студенты</i> выбираем <i>НомерСтудБилета</i> и ФИО. Из таблицы <i>Факультеты</i> берём поле <i>Факультет</i>. Из таблицы <i>Экскурсии</i>  берём поля <i>Название</i> и <i>ДатаЭкскурсии</i>. Запускаем, проверяем и возвращаемся в конструктор.</p>
<p class="Content2">Теперь отобразим все экскурсии в 2014 году: в условии отбора поля <i>ДатаЭкскурсии</i>, введём <b>*2014</b>, запустим и проверим результат. Сохраним запрос под именем <i>Экскурсии 2014</i> и закроем его.</p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Создать новый запрос, который отображает студентов (<i>НомерСтудБилета</i>, ФИО), которые сдали сертификацию(Название) в 2013-2014 г.г. Запрос сохраните под именем <i>Сертификация 2013-2014</i></p>
<div class="Header2">Вычисляемые поля</div>
<p class="Content2Top"><b>Запрос 7</b> (Посчитаем бонус по формуле 41,3% от стипендии)</p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге выбираем одну таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Добавим в запрос поля: <i>НомерСтудБилета</i>, ФИО и <i>Стипендия</i>. Установим курсор правее поля <i>Стипендия</i> в ячейку <i>Поле</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-067.jpg" alt="1" /></div>
<p class="Content2">Откроем построитель выражений (Есть 3 способа) 1-й: <i>Конструктор/Настройка запросов/Построитель</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-068.jpg" alt="1" /></div>
<p class="Content2">2-й: Правый клик там где курсор и выбираем <i>Построить</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-069.jpg" alt="1" /></div>
<p class="Content2">3-й: жмём [Ctrl+F2], там где курсор</p>
<p class="Content2Top">В верхнем поле диалога <i>Построитель выражений</i>  пишем: Бонус:(двоеточие обязательно), в левом нижнем окне раскрываем: <i>БД_Студенты_4/Таблицы/Студенты</i>, в среднем окне двойной клик по полю <i>Стипендия</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-070.jpg" alt="1" /></div>
<p class="Content2">В верхнем окне диалога, строка <b>«Выражение»</b> нам не нужна, поэтому щёлкнем по ней и удалим, в результате имеем:</p>
<p class="Content2">Бонус: [Студенты]![Стипендия]</p>
<p class="Content2">Теперь вычислим процент от стипендии: в верхнем окне щёлкнем правее строки и умножим на 0,413:</p>
<p class="Content2">Бонус: [Студенты]![Стипендия]*0,413</p>
<p class="Content2">Нажимаем ОК(обратим внимание на галочку видимости в вычисляемом поле) и запускаем запрос для анализа результата. Вернёмся в конструктор.</p>
<p class="Content2Top"><b>Свойства вычисляемого поля</b></p>
<p class="Content2">Поскольку вычисляемое поле не является табличным, значит настроить его формат, можно в конструкторе запроса: правый клик по названию поля и выбираем пункт <i>Свойства</i>. Появится панель <i>Окно свойств</i>. В свойстве <i>Формат поля</i> выберем денежный формат:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-071.jpg" alt="1" /></div>
<p class="Content2">Сохраним запрос под именем <i>Расчёт итогов</i>, но не закрываем его.</p>
<p class="Content2Top"><b>Запрос 8</b>(Посчитаем налог(13%) от стипендии + бонуса)</p>
<p class="Content2">В режиме конструктора правее поля <i>Бонус</i>, щёлкнем, чтобы создать ещё одно вычисляемое поле и откроем построитель выражений комбинацией [Ctrl+F2]:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-071-2.jpg" alt="1" /></div>
<p class="Content2">В верхнее окно пишем <b>Налог:</b>, а в левом нижнем окне, в отличии от предыдущего запроса, выделяем имя нашего запроса(оно есть, потому что мы его сохранили) и в среднем окне, двойной клик по полю <i>Стипендия</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-072.jpg" alt="1" /></div>
<p class="Content2">Строка <b>«Выражение»</b> нам не нужна, поэтому щёлкнем по ней и удалим. </p>
<p class="Content2Top">Поскольку поле <i>Бонус</i> вычисляемое(т.е. не табличное), то его НЕЛЬЗЯ использовать в вычислениях, например, вот так:</p>
<p class="Content2"><strike>[Бонус]*0,13</strike></p>
<p class="Content2">Мы должны снова вычислить бонус, затем вычислить процент от стипендия + процент от вычисленного бонуса:</p>
<p class="Content2">[Стипендия] * (1+0,413) * 0,13</p>
<p class="Content2">Откуда эта формула?</p>
<p class="Content2">Если помнить, что 3 + 3 * 2 = 3(1+2), тогда:</p>
<p class="Content2">([Стипендия]*0,413) *0,13+([Стипендия]*0,13) =</p>
<p class="Content2">([Стипендия]*0,13) *0,413+([Стипендия]*0,13) =</p>
<p class="Content2">[Стипендия] * 0,13 * (0,413+1)</p>
<p class="Content2">Запускаем запрос для проверки. Вернёмся в конструктор.</p>
<p class="Content2Top"><b>Запрос 9</b>(Посчитаем итоговую сумму, которую получит студент, т.е. стипендия + бонус без 13%)</p>
<p class="Content2">В режиме конструктора правее поля <i>Налог</i>, щёлкнем, чтобы создать ещё одно вычисляемое поле и откроем построитель выражений комбинацией [Ctrl+F2]. В верхнее поле пишем <b>СуммаРУБ:</b>, в левом нижнем поле, выделяем имя нашего запроса и в среднем поле, двойной клик по полю <i>Стипендия</i>:</p>
<p class="Content2">Строка <b>«Выражение»</b> в верхнем окне нам также не нужна, поэтому щёлкнем по ней и удалим.</p>
<p class="Content2">Мы должны снова вычислить премию, затем вычислить (100%-13%) процентов от оклада и вновь вычисленной премии:</p>
<p class="Content2">[Стипендия] *(1+0,413)*0,87</p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Посчитайте сумму с предыдущего запроса в долларах и в евро. Т.е. добавьте ещё два вычисляемого поля. Подсказка: используйте формулу из предыдущего запроса. Сохраните и закройте запрос <i>Расчёт итогов</i>.</p>
<p class="Content2Top"><b>Запрос 10</b>(Объединение текстовых полей)</p>
<p class="Content2">Пусть есть таблица <i>Фрукты</i> и требуется объединить два поля <i>Яблоки</i> и <i>Груши</i>. Формула для построителя будет такой:</p>
<p class="Content2">[Фрукты]![Яблоки]&#038;[Фрукты]![Груши]</p>
<p class="Content2">Результат этого объединения: <b>ЯблокиГруши<></p>
<p class="Content2Top">То же самое объединение, только с пробелом:</p>
<p class="Content2">[Фрукты]![Яблоки]&#038;&#187; &#171;&#038;[Фрукты]![Груши]</p>
<p class="Content2">Результат этого объединения: <b>Яблоки Груши</b></p>
<p class="Content2Top">Объединим поля <i>Фамилия</i>, <i>Имя</i> и <i>Отчество</i> с помощью вычисляемого поля: создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге выбираем одну таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>.</p>
<p class="Content2">Курсор в строку <i>Поле</i> и вызываем построитель выражений [Ctrl+F2]. В верхнем окне вводим имя вычисляемого поля ФИО:</p>
<p class="Content2">В нижнем левом окне в нашей базе данных выделяем таблицу <i>Студенты</i>. В среднем окне двойной клик по полю <i>Фамилия</i>, в верхнем окне, выделяем строку <i>«Выражение»</i>, удаляем её. После фамилии вводим <b>&#038;&#187; &#171;&#038;</b> (два амперсанда, внутри две английские кавычки, внутри пробел). В верхнее окно добавим поле <i>Имя</i>, и аналогично соединим с полем <i>Отчество</i>. Итоговый вид выражения:</p>
<p class="Content2">ФИО: [Студенты]![Фамилия] &#038; &#187; &#187; &#038; [Студенты]![Имя] &#038; &#187; &#187; &#038; [Студенты]![Отчество]</p>
<p class="Content2">Запустим запрос и проверим, что имя поля ФИО и каждая ячейка поля содержит три слова. Теперь вычислим возраст студентов по формуле сегодняшняя дата минус дата рождения:</p>
<p class="Content2">В конструкторе добавим ещё одно вычисляемое поле. В построителе выражений в верхнем окне вводим <b>Возраст:</b>. В левом нижнем окне выделяем пункт <i>Общие выражения</i>, в среднем окне выделяем пункт <i>Текущая дата</i> и двойной клик по <i>Date()</i> в правом окне:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-073.jpg" alt="1" /></div>
<p class="Content2">Строка <b>«Выражение»</b> в верхнем окне нам также не нужна, поэтому щёлкнем по ней и удалим. </p>
<p class="Content2">Отнимаем дату рождения: добавляем в выражение минус и в таблице <i>Студенты</i>, двойной клик по полю <i>Дата рождения</i>. </p>
<p class="Content2">ОК и запускаем запрос для проверки результата. Мы получили возраст в днях. Самостоятельно переведём дни в годы. Сохраним запрос под именем <i>Возраст студентов</i> и закроем его.</p>
<div class="Header2">Параметрический запрос</div>
<p class="Content2Top"><b>Запрос 11</b> (Вывод студентов из конкретного факультета)</p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге выбираем одну таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Добавим в запрос поля: <i>НомерСтудБилета</i>, ФИО и <i>КодФакультета</i></p>
<p class="Prgf_BkgCollFill">Параметрический запрос позволяет пользователю, во время запуска запроса, выбрать условие отбора и затем выполнить запрос. Т.е. здесь идёт автоматическая подстановка значения в поле <i>Условие отбора</i>.</p>
<p class="Content2Top">Добавим для поля <i>КодФакультета</i>, в строку условие текст <b>[Код факультета?]</b>. Теперь запустим запрос. Появится диалог с предложением ввести значение, мы выбираем, только то значение, которое может быть в поле <i>КодФакультета</i> таблицы <i>Студенты</i>. Введём любую цифру от 1 до 4 и нажмём ОК.</p>
<p class="Content2">Сохраним запрос под именем <i>Выбор факультета</i>, закроем его, а теперь запустим его двойным кликом из панели объектов слева, введём другую цифру и ОК.</p>
<div class="Header2">Запрос с группировкой</div>
<p class="Content2Top"><b>Запрос 12</b> (Посчитаем по факультету, сумму стипендий, среднее значение от стипендии, минимальную стипендию и сколько студентов на факультете)</p>
<p class="Content2">Создадим новый запрос в режиме конструктора:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-046.jpg" alt="1" /></div>
<p class="Content2">В диалоге выбираем одну таблицу <i>Студенты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>. Нужно добавить ещё одну таблицу, но мы уже закрыли диалог с таблицами, тогда отобразим снова диалог с таблицами командой <i>Конструктор/Настройка запроса/Отобразить таблицу</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-074.jpg" alt="1" /></div>
<p class="Content2">В диалоге добавляем таблицу <i>Факультеты</i>, жмём <i>Добавить</i> и <i>Закрыть</i>.</p>
<p class="Content2">Добавим в запрос поле: <i>Факультет</i>, теперь выполним команду <i>Конструктор/Показать или скрыть/Итоги</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-074.jpg" alt="1" /></div>
<p class="Content2">В запросе для поля <i>Факультет</i>, появилась новая строка <i>Групповая операция</i> с операцией <i>Группировка</i>. Добавим в запрос четыре поля <i>Стипендия</i>, с групповыми операциями <b>Sum</b>, <b>Avg</b>, <b>Min</b> и <b>Count</b> для суммы, среднего значения, минимального и количества.</p>
<p class="Content2Top">Итак, мы выбрали одно поле, по которому будет проходить ГРУППИРОВКА, и поля, по которым будут проходить ГРУППОВЫЕ ОПЕРАЦИИ.</p>
<p class="Content2">Запускаем запрос и видим результат работы групповых операций по каждому из ??? факультетов. Единственный минус, это неудобные имена четырёх полей с группировкой. Исправим САМОСТОЯТЕЛЬНО имена четырёх полей на <i>Сумма</i>, <i>Средняя стипендия</i>, <i>Минимальная стипендия</i> и <i>Кол-во студентов</i>: в конструкторе с помощью панели <i>Окно свойств</i>  и свойства <i>Подпись</i>. Запустим запрос и проверим имена новых полей.</p>
<p class="Content2">Сохраним запрос под именем <i>Расчёт по факультетам</i>.</p>
<div class="Header2">Самостоятельная работа</div>
<ol class="align_justify">
<li>Посчитайте по деятельности, сколько студентов и средняя стипендия по деятельности.</li>
<li>Создать запрос для определения количества посетителей каждой экскурсий.</li>
<li>Рассчитать длительность экскурсии и стоимость одного дня экскурсии</li>
</ol>
<p class="Content2Top">запрос 1 &#8212; выполняется  через групповые операции</p>
<p class="Content2">запрос 2 &#8212; выполняется  через групповые операции</p>
<p class="Content2">запрос 3 &#8212; выполняется  через вычисляемое поле</p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=70</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3. Microsoft Access. Уровень 1. Работа с формами</title>
		<link>http://kshu.su/?p=68</link>
		<comments>http://kshu.su/?p=68#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:08:10 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Access]]></category>

		<guid isPermaLink="false">http://kshu/?p=68</guid>
		<description><![CDATA[Создание форм с помощью мастера, редактирование форм, условное форматирование, добавление подписи и новых полей. Создание подчинённых форм из связанных таблиц, выбор среди нескольких связанных таблиц главную и подчинённую Формы Откроем файл базы данных БД Студенты3. Выбираем Включить содержимое. Посмотрим её внутренности командой Работа с базами данных/Отношения/Схема данных: Проверим, нет ли ещё других связей: Конструктор/Связи/Все связи. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Создание форм с помощью мастера, редактирование форм, условное форматирование, добавление подписи и новых полей. Создание подчинённых форм из связанных таблиц, выбор среди нескольких связанных таблиц главную и подчинённую</p>
<p><span id="more-68"></span></p>
<div class="Header1">Формы</div>
<p class="Content2">Откроем файл базы данных БД Студенты3. Выбираем <i>Включить содержимое</i>. Посмотрим её внутренности командой <i>Работа с базами данных/Отношения/Схема данных</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-012.jpg" alt="1" /></div>
<p class="Content2">Проверим, нет ли ещё других связей: <i>Конструктор/Связи/Все связи</i>.</p>
<p class="Content2">Из схемы и из того, что мы уже изучили на прошлых уроках, нам должно быть понятно, что таблицы <i>Студенты</i> и <i>Экскурсии</i> связаны между собой отношением МНОГИЕ-КО-МНОГИМ <b>&#8734;</b> : <b>&#8734;</b>, таким же отношением связаны между собой таблицы <i>Студенты</i> и <i>Сертификация</i>.</p>
<div class="Header2">Создание форм</div>
<p class="Content2">Формы служат для удобства ввода и просмотра данных. Создадим форму с помощью мастера: <i>Создание/Формы/Мастер форм</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-030.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем таблицу <i>Студенты</i>, внизу появятся все поля этой таблицы, при желании можно выбрать только те которые нужны, но в нашем случае нужны все, поэтому кнопкой <b>>></b> перенесём все поля для будущей формы, жмём <i>Далее</i>, на втором шаге выбираем расположение полей на форме выбираем в один столбец, жмём <i>Далее</i>, на третьем шаге предлагают задать имя формы оставляем имя <i>Студенты</i>, выбираем флажок <i>Открыть форму</i>… и  жмём <i>Готово</i></p>
<p class="Content2">Открылась форма для редактирования таблицы <i>Студенты</i>. Поля формы отображают данные первой записи таблицы <i>Студенты</i>, поэтому мы с ней ничего не делаем, внизу формы находим строку <i>Запись</i> и правее  кнопки с треугольниками для перехода по записям.</p>
<p class="Content2">Добавим одну новую запись, внизу ищем кнопку в виде треугольника с солнышком(для быстрого перехода в конец таблицы и ввода новой записи), нажимаем и во все поля формы, вводим одну любую запись. Нужно знать, что эта строка хранится не в форме, а в таблице, которая является источником данных; в нашем случае это таблица <i>Студенты</i>. Другими словами, каждое поле формы, связано с соответствующим полем таблицы. Проверим это: закрываем форму(правый клик по вкладке и <i>Закрыть</i>) и убедимся, что в таблице <i>Студенты</i> появилась новая запись которую мы ввели в форме. Закроем таблицу <i>Студенты</i>. Теперь откроем форму <i>Студенты</i>, чтобы увидеть в ней данные последней записи таблицы <i>Студенты</i>. Закроем форму.</p>
<p class="Content2">Аналогично создадим форму по таблице <i>Экскурсии</i> с ленточным внешним видом. Выбираем команду <i>Создание/Формы/Мастер форм</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-030.jpg" alt="1" /></div>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем таблицу <i>Экскурсии</i>, внизу появятся все поля этой таблицы, кнопкой >> мы выберем все поля, жмём <i>Далее</i>, на втором шаге выбираем ленточный внешний вид, жмём <i>Далее</i>, на третьем шаге оставляем имя формы <i>Экскурсии</i>, выбираем флажок <i>Открыть форму</i>… и  жмём <i>Готово</i></p>
<p class="Content2">Закроем форму. Аналогично создадим форму по таблице <i>Студенты</i>  с ленточным внешним видом. Выбираем команду <i>Создание/Формы/Мастер форм</i></p>
<p class="Content2">На первом шаге диалога, в списке источника данных выбираем таблицу <i>Студенты</i>, внизу появятся все поля этой таблицы, кнопкой >> мы выберем все поля, жмём <i>Далее</i>, на втором шаге выбираем выровненный внешний вид, жмём <i>Далее</i>, на третьем шаге оставляем имя формы <i>Студенты</i>1, выбираем флажок <i>Открыть форму</i>… и  жмём <i>Готово</i></p>
<p class="Content2">Закроем форму.</p>
<div class="Header2">Редактирование форм</div>
<p class="Content2">Аналогично таблицам, в формах кроме режима формы, есть ещё режимы для редактирования внешнего вида полей: <b>Режим конструктора</b> и <b>Режим макета</b>. В конструкторе, мы не будем видеть содержимого в полях формы, а в режиме макета мы можем и редактировать внешний вид и видеть содержимое.</p>
<p class="Content2">Откроем форму <i>Студенты</i>. Отобразить выбор режимов можно несколькими способами, вот два из них: правый клик по ярлыку формы и выбираем один из трёх режимов, либо на вкладке <i>Главная/Режимы</i> жмём на треугольник:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-031.jpg" alt="1" /></div>
<p class="Content2">Откроем форму в режиме макета и выделяя поле, изменим его размер. Также можно изменить имя поля, но содержимое полей изменить нельзя. Изменим имя поля в режиме макета: выделим поле <i>Фамилия</i>, щёлкнем внутри выделения и добавим символ <b>*</b>.</p>
<p class="Content2">Настроим внешний вид формы: в режиме макета формы, активна вкладка <i>Конструктор</i>, в группе <i>Темы</i> список <i>Темы</i>, где можно выбрать уже настроенную тему формы. Если нужно что бы каждое поле формы отображено по другому, выделяем нужное поле, далее выполним <i>Формат/Форматирование элемента управления</i>, раскрываем <i>Заливка фигуры</i> и выбираем нужный цвет. На этой же вкладке в группе <i>Шрифт</i>, можно выбрать шрифт для полей.</p>
<div class="Header3"><strong>Условное форматирование</strong></div>
<p class="Content2">Отобразим разные цвета для стипендий больших или меньших 500: в режиме макета формы, выделим поле со значением стипендии (но не само поле <i>Стипендия</i>), далее команда <i>Формат/Форматирование элемента управления/Условное форматирование</i>. В диалоге для пункта <i>Стипендия</i>, нажимаем <i>Создать правило</i>, и настроим цвет для стипендий меньших 500:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-032.jpg" alt="1" /></div>
<p class="Content2">Нажимаем ОК, здесь же снова выбираем <i>Создать правило</i>, и настроим цвет для стипендий больших или равных 500:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-033.jpg" alt="1" /></div>
<p class="Content2">Нажимаем ОК, вид диалога <i>Диспетчер правил</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-034.jpg" alt="1" /></div>
<p class="Content2">Нажимаем ОК и в режиме формы проверяем цвета данных для поля <i>Стипендия</i>.</p>
<p class="Content2">Добавим размер формы для надписи под полями: перейдём в режим конструктора, подведём курсор к границе примечания формы и тянем вниз для увеличения.</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-035.jpg" alt="1" /></div>
<p class="Content2">В добавленную область поместим надпись. Выполним команду: <i>Конструктор/Элементы управления/Надпись</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-036.jpg" alt="1" /></div>
<p class="Content2">Нарисуем прямоугольник в свободной области, появится курсор для ввода текста, напишем: <b>* &#8212; поля обязательные для ввода</b> и нажмём [Enter]:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-037.jpg" alt="1" /></div>
<p class="Content2">Изменим цвет фона формы: в режиме конструктора щёлкнем по заголовку <i>Область данных</i>, выполним команду <i>Формат/Форматирование элемента управления/Заливка фигуры</i>, выберем любой спокойный цвет.</p>
<p class="Content2">Аналогично создадим одинаковый цвет фона заголовка формы и примечания. Теперь в режиме формы проверим изменения.</p>
<p class="Content2">Изменим цвет текста для заголовков полей: [Shift]+hold выделим заголовки полей далее команда <i>Формат/Шрифт/Цвет текста</i> и выбираем любой не яркий цвет. Сохраняем и закрываем форму <i>Студенты</i></p>
<p class="Content2Top">Добавим новое поле в форму, но, сначала нужно добавить новое поле в соответствующую таблицу. Мы добавим в форму <i>Студенты</i> поле <i>Увлечения</i>. Добавим сначала это поле в таблицу:</p>
<p class="Content2">Перейдём режим конструктора таблицы <i>Студенты</i>, добавим поле <i>Увлечения</i> тип <i>Текстовый</i>, затем в режиме таблицы, введём произвольные данные в поле <i>Увлечения</i>. Закрываем таблицу <i>Студенты</i>. </p>
<p class="Content2">Теперь добавим поле в форму: открываем форму <i>Студенты</i> в режиме макета теперь выполняем команду <i>Конструктор/Сервис/Добавить поля</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-038.jpg" alt="1" /></div>
<p class="Content2">Появится список полей таблицы <i>Студенты</i>, перетащим поле <i>Увлечения</i> на поле формы:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-039.jpg" alt="1" /></div>
<p class="Content2">Новое поле на форме будет сверху, разместим его ниже всех полей:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-040.jpg" alt="1" /></div>
<p class="Content2">Новое поле будет иметь стандартный формат, применим к нему формат полей нашей формы: выделим заголовок любого поля кроме заголовка поля <i>Увлечения</i>, выполним <i>Формат/Шрифт</i>, нажимаем на кнопку <i>Формат по образцу</i>(кисточка) и нажмём на заголовок поля <i>Увлечения</i>.</p>
<p class="Content2">Закроем форму <i>Студенты</i>.</p>
<div class="Header2">Подчинённые формы</div>
<p class="Content2">Подчинённые формы отображают данные из связанных таблиц. Создадим форму с помощью мастера:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-030.jpg" alt="1" /></div>
<p class="Content2">На первом шаге выбираем все поля из таблицы <i>Факультеты</i>, здесь же выбираем таблицу <i>Студенты</i> и выбираем поля: <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i>, <i>ВидТранспорта</i> и <i>Стипендия</i>, жмём <i>Далее</i> </p>
<p class="Content2">Для второго шага полезно отобразить связь между таблицами <i>Факультеты</i> и <i>Студенты</i>. Откуда видно что таблица <i>Факультеты</i> главная(первичная), а <i>Студенты</i> подчинённая (вторичная):</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-041.jpg" alt="1" /></div>
<p class="Content2">Итак, на втором шаге мастера для подчинённых форм, флажок должен быть <i>Подчинённые формы</i>. Поле слева отображает главную и подчинённую таблицу, если выбрана таблица <i>Факультеты</i>, она будет первичная, значит таблица <i>Студенты</i> вторичная. Поле справа отображает поля главной и подчинённой таблицы:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-042.jpg" alt="1" /></div>
<p class="Prgf_BkgCollFill">Но если бы мы выбрали главную таблицу <i>Студенты</i>, то поля справа будут все в одной группе, поскольку на самом деле таблица <i>Студенты</i> уже связана с таблицей <i>Факультеты</i> как вторичная, т.е. по внешнему ключу.</p>
<p class="Content2Top">Жмём <i>Далее</i>, на этом шаге будет предложено выбрать внешний вид подчинённой формы, выберем <i>Табличный</i>, жмём <i>Далее</i>. На этом шаге будет предложено выбрать имена новых форм. Чтобы по имени было понятно, что есть главная, а что подчинённая, добавим в начало имени <b>1+</b> и <b>1-</b> для главной и подчинённой форм соответственно. Жмём <i>Готово</i>.</p>
<p class="Content2">Откроется наша форма в режиме формы, зайдём в режим макета, выделим подчинённую форму и увеличим ширину, чтобы видны были все поля. Снова вернёмся в режим формы. Здесь хорошо видно, что одной записи из главной таблицы соответствует одна или несколько записей подчинённой таблицы, т.е. связь <b>1</b> : <b>&#8734;</b></p>
<p class="Content2">Перемещаться по записям главной и подчинённой форм, можно кнопками внизу каждой из форм. Закроем нашу форму.</p>
<p class="Content2">Двойной клик по форме Форма <b>1+</b>…, откроет всю форму, т.е. со всеми в ней подчинёнными таблицами. Если же мы откроем только подчинённую форму <b>1-</b>…, то она отобразит данные только подчинённой таблицы и особого интереса не представляет.</p>
<p class="Content2Top">Создадим ещё подчинённую форму по таблицам <i>Экскурсии</i> и <i>Студенты</i>. Т.е. мы хотим увидеть, сколько, какие студенты и какого вида транспорта, посещают ту или иную экскурсию:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-030.jpg" alt="1" /></div>
<p class="Content2">На первом шаге выбираем все поля из таблицы <i>Экскурсии</i>, здесь же выбираем таблицу <i>Студенты</i> и выбираем поля <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i> и <i>ВидТранспорта</i>, жмём <i>Далее</i>, здесь нужно выбрать какая таблица будет главной, но в отличии от предыдущей подчинённой формы, в нашем случае любая таблица может быть главной, поскольку они связаны между собой отношением <b>&#8734;</b> : <b>&#8734;</b>. Выберем главную таблицу <i>Экскурсии</i> и жмём <i>Далее</i>. Выбираем для подчинённой формы табличный вид, жмём <i>Далее</i>, на новом шаге добавим в начало имени для имён двух форм <b>2+</b> и <b>2-</b>. Жмём <i>Готово</i>.</p>
<p class="Content2">Откроется наша форма в режиме формы, зайдём в режим макета, выделим подчинённую форму и увеличим ширину, чтобы видны были все поля. В режиме формы ознакомимся о посещении студента выбранной экскурсии. Закроем форму.</p>
<p class="Content2">Теперь мы хотим увидеть на каких факультетах, какие студенты, какую активность проявляют:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-030.jpg" alt="1" /></div>
<p class="Content2">На первом шаге выбираем таблицу <i>Экскурсии</i> с полями <i>КодЭкскурсии</i>, <i>Название</i>, <i>ДатаЭкскурсии</i> и <i>Стоимость</i>. Теперь выбираем данные из таблицы <i>Студенты</i> с полями <i>НомерСтудБилета</i>, <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i> и <i>ВидТранспорта</i>. И из таблицы <i>Факультеты</i>, берём только поле <i>Название</i>, жмём <i>Далее</i>,</p>
<p class="Content2">на втором шаге(активен флажок <i>подчинённые формы</i>) есть три разных случая:</p>
<ol class="align_justify">
<li>если в левом окне активна таблица <i>Экскурсии</i>, то для неё будет одно подчинение с полями студентов и факультетов,</li>
<li>если в левом окне активна таблица <i>Факультеты</i>, то для неё будет два подчинения по таблице <i>Студенты</i> и по таблице <i>Экскурсии</i> </li>
<li>и наконец, если в левом окне активна таблица <i>Студенты</i>, то для неё будет одно подчинение по полям таблицы <i>Экскурсии</i>. </li>
</ol>
<p class="Content2Top">Обратим внимание, что в первом и в третьем случае, поля студентов и факультетов были в одном месте.</p>
<p class="Content2">По условию задачи нас интересует второй случай, поэтому выбираем его и жмём <i>Далее</i>, </p>
<p class="Content2">на третьем шаге для двух подчинённых форм, выберем табличный вид и <i>Далее</i>, </p>
<p class="Content2">на четвёртом шаге для главной и двух подчинённых таблиц добавляем к началу имени префиксы: <b>3+</b>, <b>3-</b> и <b>3-</b> соответственно. Жмём <i>Готово</i>. В режиме формы откроется наш результат. </p>
<p class="Content2">В режиме макета выделяя каждую подчинённую форму, увеличим их ширину. И в режиме формы проверим, на каком факультете больше всего активных студентов и в каких экскурсиях. Закрываем нашу форму.</p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">В этой базе данных, построить форму, которая позволит отобразить какие студенты(<i>ФИО</i>, <i>ВидТранспорта</i>) из какого факультета(<i>Название</i>) какие прошли курсы ДОУ(<i>Название</i>, <i>Дата сдачи</i>, <i>Количество баллов</i>)</p>
<p class="Content2">Подсказка. Здесь должны быть задействованы 4 таблицы: <i>Студенты</i>, <i>Факультеты</i>, <i>ДОУ</i> и <i>Сертифицированные студенты</i>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2. MS Access. Уровень 1. Связи с таблицами</title>
		<link>http://kshu.su/?p=66</link>
		<comments>http://kshu.su/?p=66#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:07:30 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Access]]></category>

		<guid isPermaLink="false">http://kshu/?p=66</guid>
		<description><![CDATA[Создание связи вручную и с помощью мастера. Мастер подстановок: формирование списка данных для поля таблиц и связывание полей таблиц. Связи между таблицами: ОДИН-К-ОДНОМУ, ОДИН-КО-МНОГИМ и МНОГИЕ-КО-МНОГИМ. Схема данных. Целостность данных. Первичный(главный) ключ, вторичный(внешний) ключ. Импорт данных: из базы данных MS Access, MS Excel и текстового файла. Импорт в одну таблицу с добавлением из разных. Импорт [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Создание связи вручную и с помощью мастера. Мастер подстановок: формирование списка данных для поля таблиц и связывание полей таблиц. Связи между таблицами: ОДИН-К-ОДНОМУ, ОДИН-КО-МНОГИМ и МНОГИЕ-КО-МНОГИМ. Схема данных. Целостность данных. Первичный(главный) ключ, вторичный(внешний) ключ. Импорт данных: из базы данных MS Access, MS Excel и текстового файла. Импорт в одну таблицу с добавлением из разных. Импорт связанной таблицы. Анализ таблиц: разбиение таблиц на несколько с созданием связи.</p>
<p><span id="more-66"></span></p>
<div class="Header2">Мастер подстановок</div>
<p class="Content2">Запустим программу <b>MS Access 2010</b>, откроем нашу базу данных <i>Студенты</i> и<br />
 откроем таблицу <i>Студенты</i> в режиме конструктора.</p>
<p class="Content2">Для поля <i>Пол</i>, выбираем тип <i>Мастер подстановок</i>. Далее в диалоге выбираем флажок<br />
 <i>Будет введён фиксированный набор значений</i>, жмём  <i>Далее></i>, в столбец1 введём две строки:<br />
 <b>Мужской</b> и <b>Женский</b>, жмём <i>Далее></i>, выбираем <i>Ограничиться списком</i>, и жмём <i>Готово</i>.</p>
<p class="Content2">Пока в конструкторе активно поле <i>Пол</i>, внизу в его свойствах активируем вкладку<br />
 <i>Подстановка</i> и убедимся, что поле <i>Тип источника строк</i>, есть <b>Список значений</b>,<br />
 а поле <i>Источник строк</i> содержит строки, которые мы только что ввели в мастере подстановок.</p>
<p class="Content2">Сохраняем, переходим в режим таблицы, щёлкнем в ячейку поля <i>Пол</i> и выберем любой пункт из списка.</p>
<p class="Content2">Самостоятельно и аналогично, полю <i>Пол</i>, создадим список для поля <i>Деятельность</i>.<br />
 В качестве набора значений введём: <b>Библиотекарь</b>, <b>Сотрудник профкома</b>, <b>Сотрудник актового зала</b>, <b>Участник КВН</b>, <b>Сотрудник профилактория</b>,<br />
 <b>IT-специалист</b>, <b>Лаборант</b>, <b>Сотрудник студ. городка</b>, <b>Музыкант</b> и <b>Волонтёр</b>. Затем в режиме таблицы для нескольких записей из раскрывающегося списка поля<br />
 <i>Деятельность</i> добавим несколько данных.</p>
<p class="Content2Top">В режиме конструктора добавим поле <i>Экскурсии</i>, тип данных <i>Мастер подстановок</i>.<br />
 В диалоге выбираем первый флажок, жмём  <i>Далее></i>, выбираем источник таблиц – <i>Экскурсии</i>, жмём  <i>Далее></i>,<br />
 из доступных полей кнопкой <b>></b> выбираем поля <i>Название</i> и <i>ДатаЭкскурсии</i>, жмём <i>Далее></i>,<br />
 выберем сортировку по любому полю, жмём  <i>Далее></i>, активность флажка который скрывает ключевой столбец полезен когда<br />
 ключевое поле не представляет никакой визуальной ценности, но поскольку у нас ключевое поле это названия экскурсий,<br />
 поэтому флажок отключаем чтобы названия экскурсий были видны, жмём <i>Далее></i>, выбираем поле по которому однозначно<br />
 можно определить строки таблицы, в нашем случае это названия экскурсий, жмём <i>Далее></i>, выбираем флажок проверки<br />
 целостности данных. Жмём <i>Готово</i>.</p>
<p class="Content2">В конструкторе таблицы <i>Студенты</i> в свойстве поля <i>Экскурсии</i> на вкладке <i>Подстановка</i>, убедитесь, что поле <i>Источник строк</i> содержит это:</p>
<p class="Content2"><b>SELECT [Экскурсии].[Название], [Экскурсии].[ДатаЭкскурсии] FROM Экскурсии;</b></p>
<p class="Content2Top">Также убедимся, что: строка <i>Присоединяемый столбец</i> имеет значение <b>1</b>, а <i>Число столбцов</i> – <b>2</b>.</p>
<p class="Content2">Сохраняем и в режиме таблицы из списка добавим в поле <i>Экскурсии</i> любые значения.</p>
<p class="Content2">Двойной клик по таблице <i>Экскурсии</i> откроем её в режиме таблица и убедимся что слева строк, появились плюсы, которые отражают взаимодействие таблиц <i>Студенты</i>  и <i>Экскурсии</i>. Закроем таблицы правым кликом по их ярлыку.</p>
<div class="Header2">Связи</div>
<p class="Content2">Таблицы <i>Студенты</i> и <i>Экскурсии</i> связаны между собой. Отобразим визуально связь: <i>Работа с базами данных/Отношения/Схема данных</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-012.jpg" alt="1" /></div>
<p class="Content2">На вкладке <i>Схема данных</i>, появится схема из двух таблиц, связанных между собой по полю <i>Название</i> и <i>Экскурсии</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-013.jpg" alt="1" /></div>
<p class="Content2">Цифра <b>1</b> и символ <b>&#8734;</b>, указывает на тип связи ОДИН-КО-МНОГИМ. Удалим связь: правый клик по линии и выбираем пункт <i>Удалить</i> или клавишей [Del]</p>
<p class="Content2">Установим связь вручную(старый метод): в схеме данных, щёлкнем над полем <i>Название</i> таблицы <i>Экскурсии</i>  и отпустим над полем <i>Экскурсии</i> таблицы <i>Студенты</i>. Появится диалог <i>Изменение связи</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-014.jpg" alt="1" /></div>
<p class="Content2">обратим внимание на тип отношения: <b>один-ко-многим</b> – это причина связи ключевого поля одной таблицы, с НЕ ключевым полем другой. Нажимаем – <i>Создать</i>. Связь появилась, но без цифры <b>1</b> и символа <b>&#8734;</b>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-015.jpg" alt="1" /></div>
<p class="Content2">Отобразим значки: правый клик по связи далее <i>Изменить связь</i>, ставим флажок <i>Обеспечение целостности данных</i>. Целостность данных не позволит:</p>
<ol class="align_justify">
<li>добавить студенту – экскурсию, которой нет в таблице <i>Экскурсии</i>,</li>
<li>удалить в таблице <i>Экскурсии</i>, ту экскурсию, которая уже есть у студента.</li>
</ol>
<p class="Content2">Ещё момент: тип поля <i>Название</i> и <i>Экскурсии</i> должны быть одинаковыми. У нас они текстовые.</p>
<p class="Content2Top">Теперь добавим в таблице <i>Студенты</i>, экскурсию <i>Музей</i>, хотя бы одному студенту, а затем попытаемся изменить название экскурсии <i>Музей</i> в таблице <i>Экскурсии</i>. Программа выдаст сообщение о невозможности изменить название этого поля, которое уже связанно с полем другой таблицы.</p>
<p class="Content2">Чтобы изменить в первичной таблице, значения которое связано с другой таблицей, мы должны установить обновление: закроем все таблицы, затем в схеме данных правый клик по связи/<i>Изменить связь</i>. В диалоге выбираем <i>Каскадное обновление связанных полей</i> и жмём ОК.</p>
<p class="Content2">Теперь Откроем таблицу <i>Экскурсии</i> в режиме таблицы, изменим название <i>Музей</i> на <i>Театр</i> и откроем таблицу <i>Студенты</i> для проверки данных поля <i>Экскурсии</i>. Закроем файл базы командой <i>Файл/Закрыть базу данных</i>.</p>
<p class="Content2Top">Продолжим работать с базой данных студентов. Откроем файл <a href ="wp-content/uploads/access/БД_Студенты_1.accdb">БД_Студенты_1</a>. Выбираем <i>Включить содержимое</i>.</p>
<p class="Content2">Откроем любые таблицы и увидим, что вкладок нет, т.к. файл был создан в старой версии программы<br />
 <b>MS Access 2010</b>. Исправим это командой: <i>Файл/Параметры/Текущая база данных/Параметры приложений</i><br />
 активируем флажок <b>Вкладки</b>.</p>
<p class="Content2">Теперь нужно <i>Закрыть</i> базу данных и снова открыть, для отображения вкладок. Закроем все открытые объекты правым кликом и пункт <i>Закрыть</i></p>
<p class="Content2">Отобразим схему данных: вкладка <i>Работа с базами данных/Отношения/Схема данных</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-012.jpg" alt="1" /></div>
<p class="Content2">Отобразилась связь между двумя таблицами. Проверим, нет ли других связей: <i>Конструктор/Связи/Все связи</i>.<br />
 Если ничего не произошло, то других связей нет. Создадим ещё одну связь.</p>
<div class="Header2">Связь ОДИН-КО-МНОГИМ 1 : <b>&#8734;</b></div>
<p class="Content2">Это добавление в одно поле таблицы, данных из поля другой таблицы. Первое поле называют внешний ключ и оно соединяется с первичным ключом(полем) другой таблицы.</p>
<p class="Content2"> В режиме конструктора таблицы <i>Студенты</i>, добавим поле <i>КодЭкскурсии</i>, тип данных <i>Мастер подстановок</i>. В качестве источника выбираем другую таблицу, жмём <i>Далее></i>, выбираем таблицу <i>Экскурсии</i> жмём <i>Далее></i>, кнопкой > выбираем поля: <i>КодЭкскурсии</i> (мы его потом выберем ключевым), <i>Название</i> и <i>ДатаЭкскурсии</i>, жмём <i>Далее></i>, выберем сортировку поля <i>Название</i> по возрастанию и поля <i>ДатаЭкскурсии</i> по убыванию, жмём <i>Далее></i>, отображаем ключевой столбец (т.е. галку снимаем), <i>Далее></i>, на этом шаге выбираем ключевой столбец который мы отразили на предыдущем шаге, жмём <i>Далее></i>, включаем проверку целостности, жмём <i>Готово</i>  и соглашаемся с сохранением.</p>
<p class="Content2">Убедимся, что тип данных нашего поля изменился на <i>Числовой</i>, это получилось, потому что мы связываем поле нашей таблицы <i>Студенты</i> с полем счётчик первичной таблицы <i>Экскурсии</i>. Обратим внимание на свойства вкладки <i>Подстановка</i>. Поле <i>Источник строк</i> содержит путь к нашим данным. Поле <i>Ширина столбцов</i> содержит три цифры. <b>2,54см;2,54см;2,54см</b> это размер трёх полей</p>
<p class="Content2">Откроем таблицу <i>Студенты</i> и введём в поле <i>КодЭкскурсии</i> несколько данных. В ячейках будут выводиться только цифры. Если нужно чтобы отобразились названия, то в режиме конструктора для поля <i>КодЭкскурсии</i> на вкладке <i>Подстановка</i> для свойства <i>Ширина столбцов</i>, первую цифру обнуляем &#8212; <b>0см;2,54см;2,54см</b>, проверим ввод данных в режиме таблица.</p>
<p class="Content2">Закроем таблицу <i>Студенты</i> и убедимся, что на экране только вкладка <i>Схема данных</i>, правый клик по пустому полю схемы, пункт <i>Отобразить всё</i>. Появилась ещё одна связь.</p>
<p class="Content2">Удалим новую связь правым кликом по ней пункт <i>Удалить</i>, а в конструкторе таблицы <i>Студенты</i>, удалим поле <i>КодЭкскурсии</i> правым кликом по нему и выбираем <i>Удалить</i> строки</p>
<p class="Content2">Мы удалили это поле, поскольку <i>Студенты</i> не хотят участвовать только в одной экскурсии, т.е. связь ОДИН-КО-МНОГИМ не подходит, нужна связь МНОГИЕ-КО-МНОГИМ.</p>
<div class="Header2">Связь МНОГИЕ-КО-МНОГИМ <b>&#8734;</b> : <b>&#8734;</b></div>
<p class="Content2">В этой связи один студент может пойти на несколько экскурсий. Однако для связи МНОГИЕ-КО-МНОГИМ, двух таблиц будет недостаточно, между таблицами <i>Студенты</i> и <i>Экскурсии</i> нужна третья таблица “посредник”, которая содержит как минимум два поля для соединения первых двух таблиц. Эти два поля по отдельности являются внешними ключами для первичных таблиц, но в совокупности для своей таблицы, они образуют первичный ключ.</p>
<p class="Content2">В нашей базе данных создадим новую таблицу командой <i>Создание/Таблицы/Конструктор</i> таблиц с двумя полями <i>КодСтудента</i> и <i>КодЭкскурсии</i>, оба поля одновременно делаем первичными: [Shift]+hold, выделяем оба поля и нажимаем на кнопку <i>Ключевое поле</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-016.jpg" alt="1" /></div>
<p class="Content2">Правый клик по вкладке, сохраним таблицу как <i>Экскурсанты</i></p>
<p class="Content2">Тип данных для поля <i>КодСтудента</i> &#8212; <i>Мастер подстановок</i>, в качестве источника выбираем другую таблицу, жмём <i>Далее></i>, выбираем таблицу <i>Студенты</i> жмём <i>Далее></i>, кнопкой > выбираем поля: <i>НомерСтудБилета</i> (мы его потом выберем ключевым), <i>Фамилия</i>, <i>Имя</i> и <i>Отчество</i>, жмём <i>Далее></i>,  выберем сортировку полей <i>Фамилия</i>, <i>Имя</i> и <i>Отчество</i> по возрастанию, жмём <i>Далее></i>, отображаем ключевой столбец (т.е. галку снимаем), <i>Далее></i>, на этом шаге выбираем ключевой столбец который мы отразили на предыдущем шаге, жмём <i>Далее></i>, включаем проверку целостности, жмём <i>Готово</i>  и соглашаемся с сохранением.</p>
<p class="Content2">Убедимся, что тип данных нашего поля изменился на <i>Числовой</i>.</p>
<p class="Content2">Аналогично свяжем поле <i>КодЭкскурсии</i> с таблицей <i>Экскурсии</i>: тип данных <i>Мастер подстановок</i>. В качестве источника выбираем другую таблицу, жмём <i>Далее></i>, выбираем таблицу <i>Экскурсии</i> жмём <i>Далее></i>, кнопкой > выбираем поля: <i>КодЭкскурсии</i> (мы его потом выберем ключевым), <i>Название</i> и <i>ДатаЭкскурсии</i> жмём <i>Далее></i>, сортировку пропускаем, жмём <i>Далее></i>, отображаем ключевой столбец (т.е. галку снимаем), <i>Далее></i>, на этом шаге выбираем ключевой столбец который мы отразили на предыдущем шаге, жмём <i>Далее></i>, включаем проверку целостности, жмём <i>Готово</i>  и соглашаемся с сохранением.</p>
<p class="Content2">Убедимся, что тип данных нашего поля изменился на <i>Числовой</i>. Закрываем все открытые таблицы, убедимся, что отображена схема данных:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-012.jpg" alt="1" /></div>
<p class="Content2">Правый клик по фону, выбираем <i>Все связи</i>.</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-017.jpg" alt="1" /></div>
<p class="Content2">Откроем таблицу <i>Экскурсанты</i> в режиме таблицы и заполним данные двух связанных полей. Убедимся, что один студент может быть отправлен в разные экскурсии, НО, только один раз иначе будет предупреждение. Поскольку это составной ключ(на схеме два ключика) и не может повториться.</p>
<div class="Header2">Связь ОДИН-К-ОДНОМУ 1 : 1</div>
<p class="Content2">В режиме конструктора создадим ещё одну таблицу с участниками футбольной команды учебного заведения:</p>
<table class=table_11TahomaHeaderUser>
	<valign="top" /></p>
<tr bgcolor="#f0f0f0" align="center">
<td width="100px"><b>Имя поля</b></td>
<td width="200px"><b>Тип данных</b></td>
</tr>
<tr>
<td height="20px">КодСтудента</td>
<td>Текстовый</td>
</tr>
<tr>
<td>Номер</td>
<td>Числовой</td>
</tr>
<tr>
<td>Основной</td>
<td>Логический</td>
</tr>
</table>
<p class="Content2">Для поля <i>Номер</i> на вкладке <i>Общие</i>, настроим следующие свойства:</p>
<ul class="align_justify">
<li><i>Размер поля</i>: <b>Байт</b></li>
<li><i>Число десятичных знаков</i>: <b>Авто</b></li>
<li><i>Обязательное поле</i>: <b>Да</b></li>
<li><i>Индексированное поле</i>: <b>Да (Совпадения не допускаются)</b></li>
</ul>
<p class="Content2Top">Для поля <i>КодСтудента</i>, создадим первичный ключ, тип данных &#8212; <i>Мастер подстановок</i>. Свяжем это поле с таблицей <i>Студенты</i>  по полю <i>НомерСтудБилета</i> аналогично тем действиям, что мы уже делали. Таблицу назовём <i>Спортсмены</i>. Закроем таблицу <i>Спортсмены</i>. Откроем схему данных:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-012.jpg" alt="1" /></div>
<p class="Content2">Правый клик по свободному месту рабочей области, выбираем <i>Все связи</i>. Отобразилась связь с новой таблицей. Однако между первичными простыми ключевыми полями двух таблиц может существовать одна связь ОДИН-К-ОДНОМУ, а у нас ОДИН-КО-МНОГИМ:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-017-2.jpg" alt="1" /></div>
<p class="Content2">Исправим это: правый клик по связи/<i>Изменить связь</i> в окне убеждаемся что тип отношения ОДИН-К-ОДНОМУ теперь снимем галку <i>Обеспечение целостности данных</i>, ОК, снова изменим связь, заново ставим галку <i>Обеспечение целостности данных</i> и ОК. Теперь между таблицами значки две единицы:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-018.jpg" alt="1" /></div>
<p class="Content2">Теперь в режиме таблицы заполним таблицу <i>Спортсмены</i> на своё усмотрение.</p>
<div class="Header2">Итого по связям</div>
<p class="Content2">Чтобы лучше разбираться в том, какую связь использовать, в базе данных <i>Студенты</i>, нужно решить, если студент посещает одну экскурсию, то это связь ОДИН-КО-МНОГИМ ( <b>1</b> : <b>&#8734;</b> ). Здесь связывается поле вторичной таблицы <i>Студенты</i>(которое является внешним ключом) с полем первичной таблицы <i>Экскурсии</i>(которое является первичным ключом). При этом одно или несколько экскурсий может быть в таблице <i>Студенты</i>, НО, только одну экскурсию может посетить студент. Отсюда название <b>1</b> : <b>&#8734;</b>.</p>
<p class="Content2">Если же в нашей базе студент посещает несколько экскурсий, то это связь МНОГИЕ-КО-МНОГИМ ( <b>&#8734;</b> : <b>&#8734;</b> ). Здесь таблица <b>Экскурсии</b> и <b>Студенты</b> являются первичными и между ними нужно создать вторичную таблицу посредник с минимум двумя полями, каждое для связи со своей первичной таблицей. Эти две таблицы, связываются с посредником отношением ОДИН-КО-МНОГИМ. И как уже упоминалось, два поля в таблице посредник, по отдельности являются внешними ключами для первичных таблиц, но в совокупности, они образуют первичный ключ для самой таблицы посредник.</p>
<p class="Content2">Связь <b>1</b> : <b>1</b> используется редко, понять её можно на примере таблицы <i>Студенты</i>, где НЕ КАЖДЫЙ студент может быть спортсменом и иметь собственный номер в спортивной игре. Поэтому такого студента можно связать с отдельной таблицей, например <i>Спортсмены</i>, где содержится спортивный номер студента. Причём в этом типе связи, таблицы соединяются по первичному ключу обоих таблиц. Если ВСЕ студенты будут спортсменами, то необходимость в отдельной таблице <i>Спортсмены</i> отпадает и соответственно связь <b>1</b> : <b>1</b>, не нужна.</p>
<div class="Header2">Самостоятельная работа 1</div>
<p class="Content2">Создать возможность, чтобы каждый студент мог из ДОУ мог выбрать только один курс. Подсказка – использовать связь <b>1</b> : <b>&#8734;</b>.</p>
<p class="Content2Top">Закрываем базу <b>БД_Студенты_1</b>  командой <i>Файл/Закрыть базу данных</i>.</p>
<div class="Header2">Самостоятельная работа 2</div>
<p class="Content2"> Откроем файл базы данных <b>БД_Студенты_1</b>, Выбираем <i>Включить содержимое</i>.</p>
<p class="Content2">Реализовать хранение данных, о прохождении каждым студентом множества курсов ДОУ с указанием данных<br />
 Дата сдачи (с маской ввода через точку), Кол-во баллов (цело число до 100), Наличие сертификата (Да/Нет). </p>
<p class="Content2">Подсказка 1. Поскольку один студент может пройти несколько курсов ДОУ, то здесь нужна отдельная таблица для реализации связи МНОГИЕ-КО-МНОГИМ через две связи ОДИН-КО-МНОГИМ. </p>
<p class="Content2">Подсказка 2. Другими словами создать таблицу <i>Сертифицированные студенты</i> из 5 полей: <i>Студент</i>, <i>Курс</i>, <i>Дата сдачи</i>, <i>Кол-во балов</i> и <i>Наличие сертификата</i>.<br />
 Первые два поля, связать с таблицами <i>Студенты</i> и ДОУ отношением ОДИН-КО-МНОГИМ.<br />
 Остальные поля создать согласно условию самостоятельной работы. В режиме таблицы добавить несколько студентов,<br />
 которые прошли несколько курсов.</p>
<p class="Content2Top">Закрываем базу <b>БД Студенты1</b>  командой <i>Файл/Закрыть базу данных</i>.</p>
<div class="Header1">Импорт данных</div>
<p class="Content2">Откроем файл базы данных <a href ="wp-content/uploads/access/БД_Студенты_2.accdb">БД_Студенты_2</a>. Выбираем <i>Включить содержимое</i>. Ни один объект этой базы не должен быть открыт. Активируем вкладку Внешние данные и в группе <i>Импорт и связи</i> выберем <i>Access</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-019.jpg" alt="1" /></div>
<p class="Content2">Откроется диалог для работы с источником наших внешних данных. Нажимаем <i>Обзор</i> выберем файл <a href ="wp-content/uploads/access/БД_Борей.accdb">БД_Борей</a>, оставим флажок <i>Импорт таблиц</i>…, жмём ОК. В диалоге на вкладке <i>Таблицы</i>, выбираем пункт <i>Поставщики</i>, жмём два раза ОК.</p>
<p class="Content2">В нашей базе <b>БД_Студенты_2.accdb</b>, появилась новая таблица <i>Поставщики</i>, которая базе благодаря флажку <i>Импорт</i>, есть физически в нашей.</p>
<p class="Content2Top">Аналогично импортируем текстовой файл <a href ="wp-content/uploads/access/Переведённые_студенты.txt">Переведённые_студенты</a>. Выполним команду импорта текстового файла:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-020.jpg" alt="1" /></div>
<p class="Content2">в диалоге нажимаем <i>Обзор</i>, выберем скопированный файл <i>Переведённые_студенты,</i> 	(откроется файл, правый клик, сохранить как, выбираем тип <i>Text Document</i>) активируем флажок <i>Импортировать данные</i>, жмём ОК. В диалоге выбираем флажок с разделителями, жмём <i>Далее></i>. На предварительном просмотре таблицы видно, что первая строка не относится к данным, потому что это заголовок полей таблицы, значит ставим флажок <i>Первая строка содержит имена полей</i>. Если появится сообщение, соглашаемся. Здесь же ставим флажок Табуляция, жмём <i>Далее></i>. Здесь можно выделить таблицу и настроить некоторые свойства полей, жмём <i>Далее></i>. Выберем флажок <i>автоматически создавать ключ</i>, жмём <i>Далее></i> Соглашаемся с именем таблицы по умолчанию, жмём <i>Готово</i> и <i>Закрыть</i>.</p>
<p class="Content2">Откроем эту таблицу и убедимся что добавлено ключевое поле <i>Код</i>. Закроем таблицу.</p>
<div class="Header2">Импорт с добавлением</div>
<p class="Content2">Теперь импортируем три таблицы <b>MS Excel</b>, в одну таблицу <b>MS Access</b>, т.е. одну таблицу Excel импортируем как новую таблицу Access, а остальные добавим к новой:</p>
<p class="Content2">Скопируем на свой диск файл <a href ="wp-content/uploads/access/БД_Студенты.xls"><i>БД_Студенты</i></a>. Выполним команду <i>Внешние данные/Импорт/Excel</i>, жмём <i>Обзор</i>, выбираем скопированный файл <b>БД_Студенты</b>,<br />
 флажок <i>Импортировать данные</i> и ОК, выберем данные с листа <i>Студенты_Iкурс</i>, жмём <i>Далее</i>, соглашаемся, что первая строка содержит заголовки, далее, выберем для поля <i>КодФакультета</i> тип данных <b>Байт</b>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-020-3.jpg" alt="1" /></div>
<p class="Content2">далее, активируем флажок не создавать ключ, далее, исправим имя таблицы на <i>Студенты импорт</i> жмём <i>Готово</i> и <i>Закрыть</i>.</p>
<p class="Content2Top">Откроем таблицу <i>Студенты импорт</i> и убедимся что строк 16. Закрываем таблицу и аналогично добавим в неё данные из листа <i>Студенты_IIкурс</i> файла MS Excel:</p>
<p class="Content2">Снова выполним команду <i>Внешние данные/Импорт/Excel</i>, жмём <i>Обзор</i> выбираем скопированный файл <b>БД_Студенты</b>, но теперь нам нужно импортировать не в новую таблицу, а добавить в таблицу <i>Студенты импорт</i>, значит активируем флажок <i>Добавить копию</i>… и в списке выбрать пункт <i>Студенты импорт</i>, ОК, выберем с какого листа будем брать данные – <i>Студенты_IIкурс</i>, далее, <i>Готово</i> и <i>Закрыть</i>.</p>
<p class="Content2">Откроем таблицу <i>Студенты импорт</i> и убедимся что строк уже 32. Закрываем таблицу и аналогично добавим в неё данные из листа <i>Студенты_IIIкурс</i>. После добавления таблицы, строк будет уже 48.</p>
<p class="Content2">В режиме конструктора таблицы <i>Студенты импорт</i> сделаем поле <i>Табельный номер</i> первичным ключом:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-021.jpg" alt="1" /></div>
<div class="Header2">Импорт связанной таблицы</div>
<p class="Content2">Выполним команду <i>Внешние данные/Импорт/Excel</i>, жмём <i>Обзор</i> выбираем файл <b>БД_Студенты.xls</b>, флажок <i>Создать</i> связанную таблицу, ОК, выберем любой лист, два раза <i>Далее</i>, <i>Готово</i> и ОК.</p>
<p class="Content2">Обратим внимание на значок новой таблицы:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-022.jpg" alt="1" /></div>
<p class="Content2">стрелочка указывает, что эта таблица физически в нашей базе данных не существуют,<br />
т.е. мы не можем её редактировать. Попробуем зайти в режим конструктора и добавить или удалить поле.<br />
 Такая таблица нужна в основном для просмотра.</p>
<div class="Header1">Анализ таблиц</div>
<p class="Content2">Это возможность разбиения таблицы на несколько таблиц с созданием связи и сохранением значений.</p>
<p class="Content2">Продолжаем работать с базой данных <b>БД Студенты2</b>. Закроем все таблицы, выполним: <i>Работа с базами данных/Анализ/Анализ таблиц</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-023.jpg" alt="1" /></div>
<p class="Content2">В диалоге на первом шаге будет описана теория нормализации таблиц которая позволяет оптимально работать с базой данных, слева ненормализованная таблица, полезно нажать кнопки для демонстрации последствий ненормализованной базы данных, жмём <i>Далее</i>, на втором шаге показана разбитая таблица из предыдущего шага, жмём <i>Далее</i>, теперь программа предложит разделить какую-нибудь таблицу, выберем таблицу <i>Студенты</i> и <i>Далее</i>, выберем флажок <i>Да, разделение…</i>, жмём <i>Далее</i>. Появилось окно с несколькими связанными таблицами:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-024.jpg" alt="1" /></div>
<p class="Content2">где поля <i>Город</i>, <i>Страна</i> и <i>Деятельность</i>, вынесены в отдельные таблицы. Все они связаны с таблицей описывающие студента. Что мастер сделал? Он нашёл в исходной таблице повторяющиеся города, вынес их в отдельную таблицу как уникальные данные, и связал её с исходной, т.е. города в отдельной таблице, теперь будут только в единственном экземпляре. Аналогично мастер вынес из таблицы с городами, страны, которые поместил в отдельную таблицу затем связал их.</p>
<p class="Content2">Мы хотим, чтобы города и страны были в одной таблице: тянем за поле <i>Страна</i> и помещаем в таблицу с городами. Также мы хотим чтобы таблица <i>Студенты</i> содержало поле <i>Деятельность</i>: аналогично тянем это поле в таблицу <i>Студенты</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-025.jpg" alt="1" /></div>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-026.jpg" alt="1" /></div>
<p class="Content2Top">И наоборот, если таки нужна отдельная таблица с деятельностью, тянем поле <i>Деятельность</i> обратно в пустую область диалога:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-027.jpg" alt="1" /></div>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-028.jpg" alt="1" /></div>
<p class="Content2">Нажимаем Далее, если нас не устроят имена таблиц, мы их можем в любое время переименовать. Теперь  мы можем добавить ключевые поля, например поле <i>Деятельность</i> можно сделать ключевым: выделим строку <i>Деятельность</i> и нажмём на ключик:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-029.jpg" alt="1" /></div>
<p class="Content2">Нажимаем <i>Далее</i>, отказываемся от создания запроса и <i>Готово</i>.</p>
<p class="Content2">Открываем таблицу 1 и видим поля Подстановка Таблица2 и Подстановка Таблица3 являются связанными с таблицами 2 и 3 соответственно.</p>
<p class="Content2">Закроем файл <b>БД_Студенты_2</b> командой <i>Файл/Закрыть базу данных</i>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=66</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1. MS Access. Уровень 1. Создание таблиц</title>
		<link>http://kshu.su/?p=64</link>
		<comments>http://kshu.su/?p=64#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:06:52 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Access]]></category>

		<guid isPermaLink="false">http://kshu/?p=64</guid>
		<description><![CDATA[Создание файла базы данных. Создание таблицы в базе данных. Режимы конструктора, режим таблицы. Типы и свойства полей таблицы. Ключевое поле Создание базы данных Запустим программу MS Access 2010. В окне программы создадим базу данных Студенты. В поле Имя файла вводим Студенты, выберем путь на диске где база данных будет находиться и нажмём Создать: Появится окно [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Создание файла базы данных. Создание таблицы в базе данных. Режимы конструктора, режим таблицы. Типы и свойства полей таблицы. Ключевое поле</p>
<p><span id="more-64"></span></p>
<div class="Header2">Создание базы данных</div>
<p class="Content2">Запустим программу <b>MS Access 2010</b>. В окне программы создадим базу данных <b>Студенты</b>. В поле <i>Имя файла</i> вводим <i>Студенты</i>, выберем путь на диске где база данных будет находиться и нажмём <i>Создать</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-001.jpg" alt="1" /></div>
<p class="Content2">Появится окно базы данных <i>Студенты</i>, с одной таблицей <i>Таблица1</i>, закроем таблицу &#8212; ПК(правый клик) по ярлыку и выбираем <i>Закрыть</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-002.jpg" alt="1" /></div>
<div class="Header2">Создание таблицы. Режим конструктора</div>
<p class="Content2">Создадим таблицу командой <i>Создание/Таблицы/Конструктор таблиц</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-003.jpg" alt="1" /></div>
<p class="Content2">Появится конструктор будущей таблицы, в нём мы будем редактировать каркас таблицы. В колонке <i>Имя поля</i>, создадим имена полей для будущей таблицы:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-004.jpg" alt="1" /></div>
<p class="Content2Top">Между полем <i>Фамилия</i> и <i>Имя</i>, добавим для будущей таблицы новое поле <i>Отчество</i>: курсор в поле <i>Пол</i>, затем выполним команду: <i>Конструктор/Сервис/Вставить строки</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-005.jpg" alt="1" /></div>
<p class="Content2">Введём в новую строку – <i>Отчество</i>,</p>
<p class="Content2">теперь изменим порядок полей. Переместим поле <i>ВремяНачалаУчёбы</i> под полем <i>ДатаРождения</i>: щелчком по серому квадратику левее названия поля выделим строку, затем размещаем ниже поля <i>ДатаРождения</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-006.jpg" alt="1" /></div>
<div class="Header2">Свойства полей</div>
<p class="Content2">Настроим свойства полей. Для полей <i>Фамилия</i>, <i>Имя</i>, <i>Отчество</i> и <i>Пол</i> ставим тип данных <i>Текстовый</i>, а для их свойства <i>Размер поля</i> ставим значения: <b>40</b>, <b>40</b>, <b>40</b> и <b>8</b> соответственно. Пример для типа данных поля <i>Пол</i> и его свойств:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-007.jpg" alt="1" /></div>
<p class="Content2">Для поля <i>ДатаРождения</i> ставим тип <i>Дата время</i>, свойство <i>Формат поля</i> ставим <b>Краткий формат даты</b>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-008.jpg" alt="1" /></div>
<p class="Content2">Аналогично, для поля <i>ВремяНачалаУчёбы</i> ставим тип <i>Дата время</i>, а свойство <i>Формат поля</i> ставим <b>Краткий формат времени</b></p>
<p class="Content2">Для поля <i>Деятельность</i> – тип <i>Текстовый</i>, свойство <i>Размер поля</i> ставим <b>255</b></p>
<p class="Content2">Для поля <i>Стипендия</i> – тип <i>Денежный</i>, свойство <i>Условие на значение</i> ставим <b>>=400</b> (больше или равно, т.е. стипендия должна быть минимум 400), свойство <i>Сообщение об ошибке</i> вводим: <b>Не менее 400 рублей</b></p>
<p class="Content2">Для поля <i>УдостоверениеВодителя</i> – тип <i>Логический</i>, свойство <i>Формат поля</i> раскрываем список и выбираем <b>Да/Нет</b>.</p>
<p class="Content2">Для поля <i>КолвоИнЯзыков</i> – тип <i>Числовой</i>, свойство <i>Размер поля</i> ставим <b>Байт</b>, свойство <i>Условие на значение</i> ставим <b><=6</b> (т.е. студент может знать не более 6 иностранных языков), свойство Сообщение об ошибке вводим строку: Не более 6 языко</p>
<p class="Content2">Для поля <i>e-mail</i> – тип <i>Гиперссылка</i></p>
<p class="Content2">Для поля <i>Фото</i> – тип <i>Поле объекта OLE<i></p>
<p class="Content2">Для поля <i>Документы</i> – тип <i>Вложения</i></p>
<p class="Content2">Для поля <i>Фамилия</i> в свойстве <i>Обязательное поле</i> выберем пункт <b>Да</b>.</p>
<div class="Header2">Ключевое поле</div>
<p class="Content2">Добавим новое поле, которое будет первым, т.е. левее поля <i>Фамилия</i>: выделим поле <i>Фамилия</i> затем: <i>Конструктор/Сервис/Вставить строки</i></p>
<p class="Content2">Назовём поле <i>НомерСтудБилета</i> тип <i>Счётчик</i> и пока поле выделено сделаем его ключевым: вкладка <i>Конструктор/Сервис/Ключевое поле</i></p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-009.jpg" alt="1" /></div>
<p class="Content2Top">Назовём таблицу <i>Студенты</i>: правый клик по ярлыку таблицы, выбираем пункт <i>Сохранить</i>, в диалоге водим имя <i>Студенты</i>. В левой панели программы MS Access, появился новый объект – таблица <i>Студенты</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-010.jpg" alt="1" /></div>
<p class="Content2">если он не появился, выберите команду <i>Все объекты Access</i>:</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-086.jpg" alt="1" /></div>
<p class="Content2">Закроем таблицу <i>Студенты</i>: правый клик по ярлыку – пункт <i>Закрыть</i>.</p>
<div class="Header2">Режим таблицы</div>
<p class="Content2">Теперь откроем таблицу двойным кликом по ярлыку в левой части программы. Откроется таблица <i>Студенты</i> в режиме ввода её данных. Введём данные, начиная с поля <i>Фамилия</i> на своё усмотрение кроме поля <i>НомерСтудБилета</i>, <i>Пол</i> и <i>Деятельность</i>.</p>
<p class="Content2">Для поля <i>Фото</i> правый клик в ячейке и выбираем <i>Вставить объект</i>. В диалоге выбираем флажок <i>Создать из файла</i>, из указанной папки выбираем папку Access/Фото и выберем любой файл(или выберите любое фото человека).</p>
<p class="Content2">Вместо поля <i>Документы</i> нарисована скрепка, двойной клик по скрепке и в диалоге нажимаем <i>Добавить</i>, затем в диалоге добавьте сколь угодно любые документы из вашего диска.</p>
<div class="Header3"><strong>Переключения между режимами</strong></div>
<p class="Content2">Мы будем работать только в двух режимах: <b>режим таблицы</b> это результирующая таблица для пользователя и <b>режим конструктора</b> это каркас таблицы для настройки имён полей их типов и свойств. Запомним три способа переключения между этими режимами:</p>
<ol class="align_justify">
<li>если таблица не активна, в левом окне программы правый клик по таблице и выбираем один из двух пунктов <i>Открыть</i> или <i>Конструктор</i>. Самый удобный запуск режима таблицы – двойной клик по таблице в левой панели</li>
<li>если таблица активна, правый клик по вкладке таблицы и выбираем либо <i>Режим таблицы</i>, либо <i>Конструктор</i></li>
<li>если таблица активна, выполним: <i>Главная/Режимы</i> нажимаем кнопку с треугольником(если её нет, то раскроем кнопку <i>Режимы</i> и выберем пункт <i>Конструктор</i>)</li>
</ol>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-085.jpg" alt="1" /></div>
<p class="Content2Top">В режиме конструктора выделяем поле <i>ДатаРождения</i> и в свойство <i>Подпись</i> вводим(с пробелом) <b>Дата рождения</b>. Сохраняем таблицу, переключаемся в режим таблицы и проверяем, что название поля <i>ДатаРождения</i> будет с пробелом. Закроем таблицу правым кликом по ярлыку.</p>
<p class="Content2Top">Самостоятельно создадим таблицу <i>Факультеты</i> с двумя полями: <i>Название</i> и <i>Численность</i>. Поле <i>Численность</i> должно выводить числовые значения каждое значение не более 3000.</p>
<p class="Content2Top">Откроем таблицу <i>Студенты</i> в режиме конструктора, добавим последним поле <i>КодПропуска</i> тип <i>Числовой</i>, в свойстве <i>Индексированное поле</i> пункт <b>Да (Совпадения не допускаются)</b>, сохраняем таблицу.</p>
<p class="Content2">Теперь открываем её в режиме таблицы и пробуем для нового поля <i>КодПропуска</i> ввести два одинаковых значения и перейти на следующую строку. Появится сообщение об ошибке. Также можно попробовать специально забыть ввести данные в поле <i>Фамилия</i>. Это тоже не получится, поскольку мы активировали свойство <i>Обязательное поле</i></p>
<p class="Content2">Закройте окно программы <b>MS Access 2010</b>, сохранение файла базы данных происходит автоматически.</p>
<p class="Content2Top">Снова запустим программу <b>MS Access 2010</b>. Откроем файл нашей базы данных <b>Студенты.accdb</b></p>
<p class="Content2">Откроем таблицу <i>Студенты</i> в режиме конструктора. Добавим последним поле <i>Рост</i> с типом данных <i>Числовой</i>, свойство <i>Размер поля</i> – <i>Байт</i> и свойство <i>Формат поля</i> вводим строку – <b>0” см”</b> (кавычки в английской раскладке):</p>
<div id="block30x30center"><img src="wp-content/uploads/access/acs-011.jpg" alt="1" /></div>
<p class="Content2">В режиме таблицы в поле <i>Рост</i> введём несколько числовых данных &#8212; к числу будет добавлена строка <b>см</b>. Попробуем ввести значение, превышающее 255 см.</p>
<p class="Content2">В режиме конструктора, между полями <i>Стипендия</i> и <i>УдостоверениеВодителя</i> добавим новое поле: курсор в поле <i>УдостоверениеВодителя</i>, далее выполним <i>Конструктор/Сервис/Вставить строки</i>.</p>
<p class="Content2">Новое поле назовём <i>Грант</i>, тип данных <i>Денежный</i>, в свойство <i>Формат поля</i> вводим строку <b># ###0,00&#8220; USD&#8220;</b>(английская кавычка), появится значок с молнией, раскроим его и выбираем пункт <i>Обновить формат везде</i>, соглашаемся со всем и в режиме таблицы введём в поле <i>Грант</i> любые числа.</p>
<p class="Content2">При желании вместо <b>USD</b> можно было ввести символ <b>$</b>.</p>
<div class="Header2">Маска ввода</div>
<p class="Content2">В режиме конструктора таблицы <i>Студенты</i>, выделим поле <i>ДатаРождения</i>  и в поле свойства <i>Маска ввода</i> ведём – <b>00.00.0000</b> (Нули это есть обязательное правило, для вода цифр)</p>
<p class="Content2">Теперь после сохранения переходим в режим таблицы и в поле <i>Дата рождения</i>, ведём любую дату без точек. В режиме конструктора для поля <i>ВремяНачалаУчёбы</i>  в поле свойства <i>Маска ввода</i> вводим &#8212; <b>00:00</b>. Сохраняем и в режиме таблицы в поле <i>ВремяНачалаУчёбы</i> вводим любое время без двоеточия.</p>
<p class="Content2">В режиме конструктора в конце добавим новое поле <i>Телефон</i>, тип данных <i>Текстовый</i>, в поле свойства <i>Размер поля</i> введём значение <b>9</b>, а в поле <i>Маска ввода</i> вводим <b>000-00-00</b>. В режиме таблицы введём семизначный телефон без дефисов.</p>
<p class="Content2">В режиме конструктора в конце добавим новое поле <i>МобТелефон</i> тип данных <i>Текстовый</i>, в поле свойства <i>Размер поля</i> введём значение <b>20</b>, а в поле <i>Маска ввода</i> вводим <b>+7 (000) 000-00-00</b>. В режиме таблицы в поле <i>МобТелефон</i> введём трёхзначный код и семизначный телефон( без дефисов скобок и +7).</p>
<p class="Content2">В режиме конструктора в конце добавим новое поле <i>КодЗачётнойКнижки</i> тип данных <i>Текстовый</i>, в поле свойства <i>Размер поля</i> введём значение <b>15</b>.</p>
<p class="Content2">Пусть код зачётной книжки состоит из трёх обязательных букв, четырёх обязательных цифр, двух обязательных букв, а затем либо две, либо три цифры, например, пусть есть два возможных кода зачётной книжки:</p>
<p class="Content2"> <b>ФИЗ-1994-ЛТ-25</b> или <b>МАТ-1994-АН-336</b>, тогда для маски ввода нужно использовать символ для необязательных цифр:</p>
<p class="Content2">Введём в поле свойства <i>Маска поля</i> – <b>LLL-0000-LL-009</b></p>
<p class="Content2">где, <b>L</b> – служит для ввода текстового символа, <b>0</b> – обязательная цифра и <b>9</b> – необязательная цифра</p>
<p class="Content2">В режиме таблицы в поле <i>КодЗачётнойКнижки</i> введём <b>ФИЗ2015КР80</b> и <b>МАТ2014КР220</b></p>
<p class="Content2">Заставим чтобы все буквы кода зачётной книжки были заглавными: в режиме конструктора для свойства <i>Маска ввода</i> добавим символ <b>></b> – <b>>LLL-0000-LL-009</b></p>
<div class="Header2">Самостоятельная работа</div>
<p class="Content2">Создадим таблицу <i>Экскурсии</i> с полями:</p>
<ul class="align_justify">
<li><i>Название</i> (ключевое)</li>
<li><i>Дата экскурсии</i> (маска ввода)</li>
<li><i>Время сбора</i> (маска ввода)</li>
<li><i>Стоимость экскурсии</i> (в у.е.)</li>
</ul>
<p class="Content2Top">Ниже представлен конструктор таблицы <i>Экскурсии</i>  и собственно таблица <i>Экскурсии</i>  с введёнными данными. Обратите внимание, что имя поля в конструкторе слитно, а в режиме таблицы раздельно. В поля <i>Дата</i>, <i>Время</i> и <i>Стоимость экскурсии</i> вводятся только цифры (точки, двоеточия и у.е. добавляется автоматически):</p>
<table class=table_11TahomaHeaderUser>
	<valign="top" /></p>
<tr bgcolor="#f0f0f0" align="center">
<td width="100px"><b>Имя поля</b></td>
<td width="200px"><b>Тип данных</b></td>
</tr>
<tr>
<td height="20px">Название</td>
<td>Текстовый</td>
</tr>
<tr>
<td>ДатаЭкскурсии</td>
<td>Дата/время</td>
</tr>
<tr>
<td>ВремяСбора</td>
<td>Дата/время</td>
</tr>
<tr>
<td>СтоимостьЭкскурсии</td>
<td>Денежный</td>
</tr>
</table>
<p></p>
<table class=table_11TahomaHeaderUser>
	<valign="top" /></p>
<tr bgcolor="#f0f0f0" align="center">
<td width="100px"><b>Название</b></td>
<td width="100px"><b>Дата экскурсии</b></td>
<td width="100px"><b>Время сбора</b></td>
<td width="200px"><b>Стоимость экскурсии</b></td>
</tr>
<tr>
<td height="20px">Планетарий</td>
<td>12.03.2015</td>
<td>10:00</td>
<td>100 у.е.</td>
</tr>
<tr>
<td>Обсерватория</td>
<td>20.03.2015</td>
<td>10:30</td>
<td>500 у.е.</td>
</tr>
<tr>
<td>Музей</td>
<td>24.03.2015</td>
<td>11:00</td>
<td>350 у.е.</td>
</tr>
</table>
<p class="Content2">Закрываем нашу базу данных командой <i>Файл/Закрыть базу данных</i> и закроем окно программы <b>MS Access 2010</b>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=64</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4. Условное форматирование. Сортировка и фильтры</title>
		<link>http://kshu.su/?p=58</link>
		<comments>http://kshu.su/?p=58#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:02:04 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Excel]]></category>

		<guid isPermaLink="false">http://kshu/?p=58</guid>
		<description><![CDATA[Выделение ячеек таблицы по заданному критерию, например, выделить ячейки с числами, большими чем 5 или выделить ячейки с повторяющимися данными. Сортировка ячеек таблицы по алфавиту. Удаление повторяющихся данных. Фильтрация данных, например, отображение данных только одного или двух наименований. Фильтрация данных по нескольким условиям. Суммирование ячеек нескольких листов с помощью консолидации Условное форматирование, применяется для построения [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="Content2">Выделение ячеек таблицы по заданному критерию, например, выделить ячейки с числами, большими чем 5 или выделить ячейки с повторяющимися данными. Сортировка ячеек таблицы по алфавиту. Удаление повторяющихся данных. Фильтрация данных, например, отображение данных только одного или двух наименований. Фильтрация данных по нескольким условиям. Суммирование ячеек нескольких листов с помощью консолидации</p>
<p>	<span id="more-58"></span></p>
<p><!--Условное форматирование-->	</p>
<div class="Header2"><strong></strong></div>
<p class="Content2">Условное форматирование, применяется для построения таблиц, ячеек в зависимости от наших условий. Например, ячейка содержит данные о наличии той или иной продукции, и можно эту ячейку подкрасить цветом. Откроем файл <a href ="wp-content/uploads/excel/SmartFormating.xlsx">Условное форматирование</a>, лист <i>тест</i>.</p>
<div class="Header3">Таблица <b>Больше 5</b></div>
<p class="Content2">Выделим ячейки, числа которых больше 5:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-04.jpg" alt="1" /></div>
<p class="Content2">Выделим ячейки <b>A2:C6</b>, затем на вкладке <i>Главная/Стили/Условное форматирование/Правила выделения ячеек/Больше</i>(появится диалог в котором будет выполнено вычисление по умолчанию). В левое поле вводим <b>5</b>, в списке справа выбираем любой цвет:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-01.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-02.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-03.jpg" alt="1" /></div>
<div class="Header3">Таблица <b>Выше среднего</b></div>
<p class="Content2">Выделим ячейки, числа которых выше среднего значения: Выделим ячейки <b>E2:G6</b>, затем на вкладке <i>Главная/Стили/Условное форматирование/Правила отбора первых и последних значений</i>. В списке выбираем <i>Выше среднего</i>. Появится диалог для выбора цвета и в ячейках <b>E2:G6</b>, будут выделены ячейки согласно условию цветом из предыдущего шага условного форматирования.</p>
<div class="Header3">Таблица <b>Одинаковые данные</b></div>
<p class="Content2">Выделим ячейки, с совпадающими значениями . Выделим ячейки <b>I2:K6</b>, на вкладке <i>Главная/Стили/Условное форматирование/Правила выделения ячеек/Повторяющиеся данные</i>. В диалоге в списке слева убеждаемся, что выбрано значение повторяющиеся, а справа выбираем любой цвет.</p>
<div class="Header3">Таблица <b>Текст содержит Манго</b></div>
<p class="Content2">Выделим ячейки, содержащие текст <b>Манго</b>: выделим ячейки <b>A9:C11</b>, на вкладке <i>Главная/Стили/Условное форматирование/Правила выделения ячеек/Текст содержит</i>. В диалоге в левом поле вводим <i>Манго</i>, а справа выбираем любой цвет.</p>
<div class="Header3">Таблица <b>Гистограммы</b></div>
<p class="Content2">Построим внутри ячеек с числовыми значениями гистограммы: Выделим ячейки <b>E9:G11</b>, на вкладке <i>Главная/Стили/Условное форматирование/Гистограммы/Градиентная заливка</i>. После анализа чисел, программа построит диаграмы.</p>
<div class="Header3">Таблица <b>Стрелки</b></div>
<p class="Content2">Опция Наборы значков для условного форматирования содержит графические наборы, которые выделяют числа в диапазоне по определённому критерию. Например, три стрелки делят диапазон чисел на минимальные, максимальные и средние относительно друг друга значения: Выделим ячейки <b>I9:K11</b>, на вкладке <i>Главная/Стили/Условное форматирование/Наборы значков/Направления</i>. Выбираем три стрелки</p>
<p class="Content2Top">Удалить форматирование для выделенных ячеек поможет команда <i>Главная/Стили/Условное форматирование/Удалить правила/Удалить правила из выделенных ячеек</i></p>
<p></p>
<p class="Content2Top">Перейдём на лист <i>Значки</i></p>
<p class="Content2">Отобразим красный флажок для ячеек, значения которых больше <b>60</b>: Выделим диапазон <b>A2:D9</b>. На вкладке <i>Главная/Стили/Условное форматирование/Наборы значков/Другие правила</i>.</p>
<p class="Content2">В диалоге в списке <i>Стиль значка</i> находим три флажка. Ниже три кнопки <i>Значок:</i> для первого выбираем красный флажок, для второго и третьего выбираем пункт <i>Нет значения</i>. Тип для двух  полей выбираем число. В первое и второе поле <i>Значения</i>, выбираем <b>60</b></p>
<p><!--end of Условное форматирование--></p>
<p><!--Сортировка и фильтры-->	</p>
<div class="Header2"><strong>Сортировка и фильтры</strong></div>
<p class="Content2">Откроем файл <a href ="wp-content/uploads/excel/SortsFilters.xlsx">Сортировка и фильтры</a>, лист <i>Дежурство</i>. Отсортируем колонку <b>Дежурство</b>, по алфавиту:</p>
<p class="Content2">Курсор в любую ячейку колонки <b>Дежурство</b>, затем вкладка <i>Главная/Редактирование/Сортировка и фильтр/Сортировка от А до Я</i>. Или, вкладка <i>Данные/Сортировка и фильтр/От А до Я</i></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-05.jpg" alt="1" /></div>
<p class="Content2">Отменим сортировку комбинацией [Ctrl+Z]</p>
<p class="Content2">Теперь проведём сортировку по дням недели: курсор внутрь таблицы с данными, вкладка <i>Данные/Сортировка и фильтр/Сортировка</i>. В диалоге для поля <b>Столбец</b> выбираем <i>Дежурство</i>, <b>Сортировка</b> – <i>значения</i>, <b>Порядок</b> – <i>Настраиваемый список</i>. Появится ещё диалог, где в поле <i>Списки</i> выбираем дни недели</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-06.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-07.jpg" alt="1" /></div>
<p></p>
<p class="Content2Top">Перейдём на лист <i>Дубликаты</i></p>
<p class="Content2">Удалим повторяющиеся наименования: курсор внутрь таблицы с данными, вкладка <i>Данные/Работа с данными/Удалить дубликаты</i>. В диалоге снимаем галки со столбцов, кроме <i>Наименование</i>. Получилась таблица, где не оказалось города <i>Минск</i>. Поскольку в этот город поставили наименования, которые отобрали ранее. </p>
<p class="Content2">Отменим предыдущую команду комбинацией [Ctrl+Z]</p>
<div class="Header3"><b>Фильтрация</b></div>
<p class="Content2">Перейдём на лист <i>Фильтр</i>. Простое условие. Выберем в метро <b>ВДНХ</b> всех машинистов:</p>
<p class="Content2">Курсор внутрь таблицы, далее вкладка <i>Данные/Сортировка и фильтр/Фильтр</i>(в заголовках должны появиться кнопки):</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-08.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-09.jpg" alt="1" /></div>
<p class="Content2">Раскрываем список для поля <i>METRO</i>, снимаем все галки(клик по строке <i>Выделить всё</i>), затем активируем флажок <i>ВДНХ</i>:</p>
<p class="Content2">Курсор внутрь таблицы, далее вкладка <i>Данные/Сортировка и фильтр/Фильтр</i>(в заголовках должны появиться кнопки). Раскрываем список для поля <i>METRO</i>, снимаем все галки(клик по строке <i>Выделить всё</i>), затем активируем флажок <i>ВДНХ</i>.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-10.jpg" alt="1" /></div>
<p class="Content2">Аналогично повторим для колонки <i>OTDEL</i>, только теперь будем активировать только флажок <i>машинист</i>.</p>
<p class="Content2Top">Сложное условие.</p>
<p class="Content2">Отменим фильтр, снова нажав на кнопку <i>Фильтр</i>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-08.jpg" alt="1" /></div>
<p class="Content2">Теперь нужно выбрать для метро <b>ВДНХ</b> машинистов, а для метро <b>Южная</b> &#8212; водителей. Если поступить предыдущим способом, то получатся лишние данные. Применим расширенный фильтр. Для этого создадим таблицу условий: Скопируем поля <i>METRO</i> и <i>OTDEL</i> правее нашей таблицы. Далее введём в поле <i>METRO</i> значения: <b>ВДНХ</b> и <b>Южная</b>, а в поле <i>OTDEL</i> – <b>машинист</b> и <b>водитель</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-11.jpg" alt="1" /></div>
<p class="Content2">Теперь курсор внутрь первой таблицы и затем вкладка <i>Данные/Сортировка и фильтр/Дополнительно</i>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-12.jpg" alt="1" /></div>
<p class="Content2">В диалоге выбираем флажок <i>скопировать результат в другое место</i>, курсор в поле <i>Исходный диапазон</i> и мышью выделяем диапазон нашей большой таблицы (включая заголовки), для поля <i>Диапазон условий</i> выбираем новую таблицу и для поля <i>поместить результат в диапазон</i>, выберем любую пустую ячейку правее большой таблицы и ОК.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-13.jpg" alt="1" /></div>
<p class="Content2">Должна получиться ещё одна таблица с машинистами из ВДНХ и водителями из метро Южная</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-14.jpg" alt="1" /></div>
<p class="Content2Top">Задание для сложного условия. Активируем лист <i>ФильтрСложн</i>.</p>
<p class="Content2">Отобразить жителей метро Смоленская и Перово которые в 3-м квартале 2015 года, получили оклад более 22000 рублей:</p>
<p class="Content2">Правее создадим таблицу с полями <i>METRO</i>, <i>DATA</i>, <i>DATA</i> и <i>OKLAD</i>. Заполним новую таблицу: в поле <i>METRO</i>, вводим <b>Смоленская</b> и <b>Перово</b>, в первое поле <i>DATA</i> и для метро <b>Смоленская</b> и для <i>Перово</i> вводим &#8212; <b>>=01.07.2015</b>, для следующего поля <i>DATA</i> и для метро <b>Смоленская</b> и для <b>Перово</b> вводим &#8212; <b><=30.09.2015</b>, для поля <i>OKLAD</i> вводим <b>>22000</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-15.jpg" alt="1" /></div>
<p class="Content2">Из этого изображения и вспоминая алгебру логики которая изучалась в курсе информатики, делаем вывод, что два поля DATA для одной строки реализуют логическую операцию <b>И</b>, т.е. так записывается интервал для III-го квартала. Другая запись интервала: <b>>=01.07.2015 И <=30.09.2015</b>. И наоборот, две строки в одном поле METRO, реализуют логическую операцию <b>ИЛИ</b>.</p>
<p class="Content2">Аналогично действиям предыдущей задачи: курсор внутрь большой таблицы, далее вкладка <i>Данные/Сортировка и фильтр/Дополнительно</i>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-12.jpg" alt="1" /></div>
<p class="Content2">В диалоге выбираем <i>флажок</i> скопировать результат в другое место, курсор в поле <i>Исходный диапазон</i> и мышью выделяем диапазон нашей большой таблицы, для поля <i>Диапазон условий</i> выбираем новую таблицу для поля <i>поместить результат</i>, выберем любую пустую ячейку правее большой таблицы и ОК.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-16.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-17.jpg" alt="1" /></div>
<p><!--end of Сортировка и фильтры--></p>
<p><!--Консолидация--></p>
<div class="Header2"><strong>Консолидация</strong></div>
<p class="Content2">Известно, что произвести вычисления между несколькими листами одной рабочей книги, или между несколькими рабочими книгами позволяет формула вида:</p>
<p class="Content2"><b>имя листа ! имя ячейки + имя листа ! имя ячейки</b></p>
<p class="Content2">В данном случае суммируются две ячейки в двух листах. <b>Консолидация</b> позволит суммировать ячейки более удобным способом. Откроем файл <a href ="wp-content/uploads/excel/Consolidation.xlsx">Консолидация</a>, убедимся что он состоит из листов <i>2013</i>, <i>2014</i>, <i>2015</i> и <i>Итого</i>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-18.jpg" alt="1" /></div>
<p class="Content2">Просуммируем продажи 4-х кварталов за три года:</p>
<p class="Content2">Итоговые суммы будут находится в диапазоне <b>C3:G7</b>, поэтому на листе <i>Итого</i> курсор в ячейку <b>C3</b>, далее вкладка <i>Данные/Работа с данными/Консолидация</i></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-19.jpg" alt="1" /></div>
<p class="Content2">Появится диалог <i>Консолидация</i>, настроим его:</p>
<p class="Content2">В поле <i>Функция</i> – <b>Сумма</b>, курсор в поле <i>Ссылка</i>, затем заходим на лист <i>2013</i> и выделяем ячейки с данными – <b>C3:G7</b>, в диалоге <i>Консолидация</i> нажимаем <i>Добавить</i> (в поле <i>Список диапазонов</i> должна появиться строка – <b>&#8216;2013&#8217;! C3:G7</b>):</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-20.jpg" alt="1" /></div>
<p class="Content2">Повторим эти шаги для листов <i>2014</i> и <i>2015</i>, затем в диалоге <i>Консолидация</i>, активируем флажок <i>Создавать связи с исходными данными</i> и ОК:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-21.jpg" alt="1" /></div>
<p class="Content2">В листе <i>Итого</i>, мы получим итоговые данные за три года в каждом квартале. Например, ячейка <b>C6</b> содержит сумму продаж телевизоров в I-м квартале 2013, 2014 и 2015 годов. Кнопка <b>+</b> правее строк таблицы позволит подробно отобразить суммы за каждый год</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-04-22.jpg" alt="1" /></div>
<p><!--end of Консолидация--></p>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=58</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3. Применение функций</title>
		<link>http://kshu.su/?p=56</link>
		<comments>http://kshu.su/?p=56#comments</comments>
		<pubDate>Mon, 29 Sep 2014 17:00:52 +0000</pubDate>
		<dc:creator><![CDATA[Kirill Schurakhtenkov]]></dc:creator>
				<category><![CDATA[Microsoft Excel]]></category>

		<guid isPermaLink="false">http://kshu/?p=56</guid>
		<description><![CDATA[Определение функции в MS Excel. Рассмотрено применение некоторых функций ЕСЛИ, СУММ, СУММЕСЛИ, СЧЁТЕСЛИ, ЧАС, ГПР, СЧИТАТЬПУСТОТЫ, МАКС, МИН, СРЗНАЧ, РАНГ. Показана разница между простым суммированием ячеек и функцией СУММ. Функции Это подпрограмма написанная разработчиками, которая имеет своё имя в скобках аргумент или аргументы и самое главное – функция возвращает результат. Результат будет вычислен для того, [&#8230;]]]></description>
				<content:encoded><![CDATA[
<p class="Content2">Определение функции в MS Excel. Рассмотрено применение некоторых функций ЕСЛИ, СУММ, СУММЕСЛИ, СЧЁТЕСЛИ, ЧАС, ГПР, СЧИТАТЬПУСТОТЫ, МАКС, МИН, СРЗНАЧ, РАНГ. Показана разница между простым суммированием ячеек и функцией СУММ.</p>
<p><span id="more-56"></span></p>
<div class="Header2"><strong>Функции</strong></div>
<p class="Content2">
Это подпрограмма написанная разработчиками, которая имеет своё имя в скобках аргумент или аргументы и самое главное – функция возвращает результат. Результат будет вычислен для того, что введено в скобках, это может быть число, ячейка или логическое выражение, и он будет отображён в той ячейке, в которой написана функция.
</p>
<p class="Content2">
Рассмотрим, как можно просуммировать ячейки из колонки A, результат разместим в ячейке A7. Курсор помещаем в A7, и вводим последовательно операторы сложения =A1+A2+A3+A4+A5:
</p>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-01.png" width="339" height="289" alt="1" /></div>
<p class="Content2">
Но при большом количестве ячеек, данная процедура утомительна, и поэтому здесь применяют функцию суммирования которая имеет синтаксис <b>СУММ(параметры)</b>, где в скобках через оператор <b>;</b> можно указать одиночные ячейки, а через оператор <b>:</b> диапазон ячеек. Диапазон удобен, т.к. из множества смежных ячеек, указываются только две ячейки &#8212; первая и последняя.
</p>
<p class="Content2">
Рассмотрим некоторые примеры диапазонов:
</p>
<ul class="align_justify">
<li>Диапазон ячеек: A1:A5 или A1..A5 – все ячейки от A1 до A5</li>
<li>Диапазон ячеек: A1:B10 или A1..B10 – все ячейки от A1 до B10</li>
<li>Группа ячеек: A1;A3;A5 – просто три ячейки</li>
<li>Два в одном диапазон и группа: A1;A3;A5:A10 – восемь ячеек</li>
</ul>
<p></p>
<p class="Content2">Теперь просуммируем ячейки из колонки <b>B</b>: вводим в ячейке <b>B7</b> формулу <b>=СУММ(B1:B5)</b></p>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-02.png" width="339" height="289" alt="1" /></div>
<div class="Content2">Суммировать можно как часть диапазона, так и отдельные ячейки, последние отделяются оператором <b>;</b>. Сложим <b>A1</b>, <b>A2</b>, <b>A3</b>, <b>A5</b> &#8212; здесь в скобках можно писать так <b>A1;A2;A3;A5</b>, но удобнее так <b>A1:A3;A5</b></div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-03.png" width="339" height="289" alt="1" /></div>
<div class="Header3"><strong>Редактирование формул</strong></div>
<div class="Content2">Часто нужно редактировать формулу. Пусть ячейка <b>A7</b>, содержит формулу суммы ячеек <b>A1:A5</b></div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-04.png" width="242" height="287" alt="1" /></div>
<div class="Content2">Мы захотели редактировать диапазон суммирования. Это можно сделать двумя способами, вручную или с помощью <b>drag&#038;drop</b> за цветную границу диапазона. Воспользуемся первым случаем:</div>
<div class="Content2">Курсор в ячейку <b>A7</b>, нажимаем [<b>F2</b>] и меняем 5 на 3:</div>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-05.png" width="242" height="289" alt="1" />
  </td>
<td>  <img src="wp-content/uploads/excel/exel-03-06.png" width="242" height="289" alt="1" />
  </td>
</tr>
</table>
</div>
<div class="Content2">drag&#038;drop это перемещение цветовой рамки. Если перемещать за угловые маркеры, то диапазон будет увеличиваться или уменьшаться. Увеличим диапазон A1:A3 на A1:B3:</div>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-07.png" width="244" height="289" alt="1" />  </td>
<td>  <img src="wp-content/uploads/excel/exel-03-08.png" width="244" height="289" alt="1" />
  </td>
</tr>
</table>
</div>
<div class="Content2">Если перемещать за рамку, то диапазон суммирования будет смещаться:</div>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-09.png" width="240" height="289" alt="1" />
</td>
<td>  <img src="wp-content/uploads/excel/exel-03-10.png" width="240" height="289" alt="1" />
</td>
</tr>
</table>
</div>
<p class="Content2">Функции добавляются тремя способами: вручную, кнопкой Вставить функцию левее строки формул или на вкладке Формулы слева кнопка этаже кнопка.</p>
<p class="Content2">Введём в ячейки A1:A3 числа 10,20 и 30, а в ячейке A4 отобразим сумму:</p>
<p class="Content2">1 способ: в ячейке A4 введём =СУММ(A1:A3), нажимаем [Enter]</p>
<p class="Content2">2 способ: курсор в A4, перед строкой формул, нажимаем кнопку Вставить функцию , в диалоге Мастер функций в списке категорий выбираем Математические, ниже в списке функций выбираем СУММ нажимаем ОК. В диалоге Аргументы функции в поле Число1 указываем диапазон A1:A3. Нажимаем ОК</p>
<p class="Content2">3 способ: в ячейке A4 введём =СУММ( и нажмём комбинацию [Shift+F3], далее диалоге Аргументы функции поступаем аналогично второму способу</p>
<div class="Header3"><b>Добавление данных в середину диапазона</b></div>
<p class="Content2">Итак, уже известно что функция СУММ(), суммирует ячейки указанные в скобках и это удобно вместо «ручного» суммирования ячеек, т.е. функция=СУММ(A1:A4), заменяет формулу=A1+A2+A3+A4. Просуммируем этими способами одинаковые числа на двух разных:</p>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-11.png" alt="1" />
</td>
<td>  <img src="wp-content/uploads/excel/exel-03-12.png" alt="1" />
</td>
</tr>
</table>
</div>
<p class="Content2">Но при использовании функции, добавление ячеек в диапазон суммирования, автоматически изменит запись диапазона в функции, тогда как в обычной формуле, автоматически ничего не произойдёт. Добавим между 2-й и 3-й строкой, пустую строку, и введём в диапазон суммирования, число 5000:</p>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-13.png" alt="1" />
</td>
<td><img src="wp-content/uploads/excel/exel-03-14.png" alt="1" />
</td>
</tr>
</table>
</div>
<p><!--Логические функции--></p>
<p></p>
<div class="Header2"><strong>Логические функции</strong></div>
<p class="Content2">Логика это наука о формах и способах мышления. Форма мышления содержит высказывание. Высказывание, это повествовательное предложение в котором что то утверждается, или что то отрицается, а результат этого повествования будет либо истинна, либо ложь.</p>
<p class="Content2">В MS Excel истинна и ложь обозначается, как ИСТИННА и ЛОЖЬ, а можно числовыми значениями 1 и 0. Эти значения есть результат проверки исходных данных ни истинность или ложность. Проверку, делают операторы сравнения. Проверим исходные данные.</p>
<p class="Content2"> Откроем файл <a href ="wp-content/uploads/excel/LogicFunctions.xlsx">Логические функции</a>, активируем лист <i>Логические операторы</i>.</p>
<p class="Content2">Начиная с ячейки <b>A1</b>, введём числовую последовательность [-20..20] с шагом 10. Сравним эти элементы последовательности с некоторыми значениями:</p>
<ul class="align_justify">
<li>Введём в ячейку <b>B1</b>: =A1>0 и скопируем ячейку <b>B1</b> вниз, до последнего элемента.</li>
<li>Введём в ячейку <b>C1</b>: =A1<0 и скопируем ячейку <b>C1</b> вниз, до последнего элемента.</li>
<li>Введём в ячейку <b>D1</b>: =A1=0 и скопируем ячейку <b>D1</b> вниз, до последнего элемента.</li>
</ul>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-15.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-16.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ЕСЛИ</b></div>
<p class="Content2"> В ячейке <b>E1</b> введём <b>=ЕСЛИ(</b> и нажмём [Shift+F3], в первом поле введём условие <b>A1>0</b>, во втором поле введём любое значение, которое отобразится в ячейке <b>E1</b>, если результат в первом поле истина например, <b>ДА</b>. В третьем поле введём любое значение которое отобразится в ячейке <b>E1</b>, если результат в первом поле ложь например, <b>НЕТ</b></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-17.jpg" alt="1" /></div>
<p class="Content2">Копируем формулу в <b>E1</b> для ячеек <b>E2:E5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-18.jpg" alt="1" /></div>
<div class="Header3">Функция <b>НЕ</b></div>
<p class="Content2">меняет значение ИСТИНА на ЛОЖЬ и наоборот или значение 0 на 1 и наоборот. В колонке <b>F</b> отобразим изменённые значения колонки <b>D</b>: введём в ячейку <b>F1</b> формулу: <b>=НЕ(D1)</b> и скопируем до последнего элемента</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-19.jpg" alt="1" /></div>
<div class="Header3"><strong>Функция И</strong></div>
<p class="Content2">Это одновременное выполнение всех условий. Составим сложное условие. Выведем – ИСТИНА, если значения в колонке <b>A</b> положительные и в ячейке <b>G7</b> будет слово “ромашки” и ЛОЖЬ в любом другом случае: в ячейку <b>F1</b> вводим <b>=И(</b> и нажимаем [Shift+F3]. В первое поле вводим <b>A1>0</b>, во второе <b>G$7=”ромашки”</b>.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-20.jpg" alt="1" /></div>
<p class="Content2">Копируем формулу в <b>G1</b> для ячеек <b>G2:G5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-21.jpg" alt="1" /></div>
<p class="Content2">Теперь вместо ИСТИНА выведем – ЛЮБИТ, а вместо ЛОЖЬ – НЕ ЛЮБИТ: курсор снова в ячейку <b>G1</b>.<br />
	В строке формул разместим курсор между знаком <b>=</b> и функцией <b>И</b>:</p>
<div class="Header3"><b>=|И(A1>0;G$7=”ромашки”)</b></div>
<p class="Content2">вводим <b>ЕСЛИ(</b> и нажимаем [Shift+F3]. Откроется диалог с аргументами функции <b>И</b>, нам он не нужен т.к. параметры этой функции корректны.</p>
<p class="Content2">Курсор в конец строки и вводим символ <b>;</b> Появится диалог функции <b>ЕСЛИ</b>:</p>
<div class="Header3"><b>=ЕСЛИ(И(A1>0;G$7=”ромашки”);|</b></div>
<p class="Content2">Во второе поле вводим ЛЮБИТ, в третье НЕ ЛЮБИТ:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-22.jpg" alt="1" /></div>
<p class="Content2">Нажимаем ОК и снова копируем формулу в <b>G1</b> для ячеек <b>G2:G5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-23.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ИЛИ</b></div>
<p class="Content2">Это выполнение хотя бы одного условия из двух. Перепишем предыдущую формулу, но вместо <b>И</b> вставим <b>ИЛИ</b>:</p>
<div class="Header3"><b>=ЕСЛИ(ИЛИ(A1>0;G$7=&#187;ромашки&#187;);&#187;ЛЮБИТ&#187;;&#187;НЕ ЛЮБИТ&#187;)</b></div>
<p class="Content2">проверим результат для ячеек <b>G1:G5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-24.jpg" alt="1" /></div>
<p class="Content2">поменяем в ячейке <b>G7</b> ромашки на лютики, смотрим результат:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-25.jpg" alt="1" /></div>
<p class="Content2">Перейдём на лист <i>Премия</i>. Нужно начислить премию согласно условию, если стаж сотрудника больше 10 лет, то премия 20% от оклада, иначе премия 4000</p>
<p class="Content2">В ячейке <b>D2</b> введём <b>=ЕСЛИ(</b> и нажмём [Shift+F3], в первом поле введём условие <b>B2>10</b>, во втором поле введём <b>C2*20%</b>, в третьем &#8212; <b>4000</b>. Скопируем ячейку в столбце <b>D</b>, для премий всех сотрудников</p>
<p></p>
<p class="Content2">Перейдём на лист <i>ЕСЛИ Вложенное</i>. Здесь нужно вычислить сумму скидки, которая зависит от суммы покупки. Скидок три:</p>
<ul class="align_justify">
<li>если сумма покупки менее 2000 – скидка 12%,</li>
<li>если сумма покупки от 2000 до 3000 – скидка 16%,</li>
<li>если сумма покупки более 3000 – скидка 20%,</li>
</ul>
<p class="Content2">Обычная функция <b>ЕСЛИ</b> не подходит, т.к. у нас не два, а три условия. Нужно применить функцию <b>ЕСЛИ</b>, дважды в одной формуле:</p>
<p class="Content2">В ячейке <b>C3</b> введём <b>=ЕСЛИ(</b> и нажмём [Shift+F3], в первом поле введём условие <b>B3<2000</b>, во втором параметре введём <b>12%</b>, а для третьего параметра нужно ввести вложенную функцию <b>ЕСЛИ</b>: в списке имён находим функцию <b>ЕСЛИ</b>. Если её там нет то выбираем пункт <i>Другие функции</i>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-26.jpg" alt="1" /></div>
<p></p>
<p class="Content2">Далее в мастере функций в категории <i>Логические</i> внизу ищем функцию <b>ЕСЛИ</b>. Перед нами снова диалог с тремя полями для вложенной функции. В первом поле вводим <b>B3>3000</b> во втором поле – <b>20%</b>, а в третьем поле <b>16%</b>. Конечный вид формулы для ячейки <b>C3</b>:</p>
<div class="Header3">=ЕСЛИ(B3<2000;12%;ЕСЛИ(B3>3000;20%;16%))</div>
<p class="Content2">Скопируем ячейку <b>C3</b>, для ячеек <b>C4:C10</b></p>
<p class="Content2">Колонка <b>Скидка</b> содержит произведение стоимости заказа на процент скидки</p>
<p class="Content2">Колонка <b>К оплате</b> содержит разность между стоимостью заказа и скидкой</p>
<p>	<!--end of Логические функции--></p>
<p>	<!--Математические функции--><br />
	
<div class="Header2"><b>Математические функции</b></div>
<p class="Content2">Изучим математические функции. Для этого откроем файл <a href ="wp-content/uploads/excel/MathFunctions.xlsx">Математические функции</a>, а в нём лист <i>Функции</i></p>
<div class="Header3">Функция <b>ЦЕЛОЕ</b></div>
<p class="Content2">округляет до ближайшего меньшего целого числа. В колонке <b>B</b> округлим значения ячеек <b>A2:A5</b>:</p>
<p class="Content2">Курсор в ячейку <b>B2</b>, вводим с клавиатуры <b>=целое(</b> пока скобка открыта, щёлкнем по ячейке <b>A2</b>. Закроем скобку и нажмём [Enter]</p>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-27.jpg" alt="1" />
	</td>
<td><img src="wp-content/uploads/excel/exel-03-28.jpg" alt="1" />
	</td>
</tr>
</table></div>
<p class="Content2">Копируем ячейку <b>B2</b> и вставляем в ячейки <b>B3:B5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-29.jpg" alt="1" /></div>
<p class="Content2">Обратим внимание, что -64,3 стало -65</p>
<div class="Header3">Функция <b>ОТБР</b></div>
<p class="Content2">отбрасывает дробную часть числа, т.е. оставляет целое без округления. </p>
<p class="Content2">Вводим для <b>C2</b> &#8212; <b>=ОТБР(</b> нажимаем [Shift+F3]. В диалоге в первом поле введём <b>А2</b>, во втором поле – <b>0</b>. Нажмём ОК и копию <b>C2</b> поместим в <b>C3:C5</b></p>
<p class="Content2">Тоже самое проделаем, но для второго поля введём 1:</p>
<div class="block30x30center">
<table>
<col width="300" valign="top" />
<tr>
<td>  <img src="wp-content/uploads/excel/exel-03-30.jpg" alt="1" />
	</td>
<td><img src="wp-content/uploads/excel/exel-03-31.jpg" alt="1" />
	</td>
</tr>
</table></div>
<div class="Header3">Функция <b>ОКРУГЛ</b></div>
<p class="Content2">округляет число до указанного количества разрядов.<br />
	Это количество указывается во втором параметре. Проведём 6 тестов для ячейки <b>A3</b>:</p>
<ol class="align_justify">
<li>число разрядов 0, результат округлён до целого – 283</li>
<li>число разрядов 1, результат округлён до десятых 283,9</li>
<li>число разрядов 2, результат округлён до сотых 283,91</li>
<li>число разрядов -1, результат округлён до десяток 280</li>
<li>число разрядов -2, результат округлён до сотен 300</li>
<li>число разрядов -3, результат округлён до тысяч 0</li>
</ol>
<p class="Content2">Чтобы после 6-го теста получить тысячу достаточно в ячейке <b>A3</b> ввести число ,больше или равно 500</p>
<p class="Content2">В колонке <b>D</b> округлим до десятых, в колонке <b>E</b> округлим до целых, в колонке <b>F</b> округлим до сотен:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-32.jpg" alt="1" /></div>
<div class="Header3">Функции <b>ОКРУГЛВВЕРХ</b> и <b>ОКРУГЛВНИЗ</b></div>
<p class="Content2">округляют до ближайшего по модулю большего и меньшего соответственно</p>
<p class="Content2">Вводим для <b>G2</b> &#8212; <b>=ОКРУГЛВВЕРХ(A2;0)</b>. А копию <b>G2</b> поместим в <b>G3:G5</b>. Вводим для <b>H2</b> &#8212; <b>=ОКРУГЛВНИЗ(A2;0)</b>. А копию <b>H2</b> поместим в <b>H3:H5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-33.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ОКРВВЕРХ</b></div>
<p class="Content2">округляет число до ближайшего большего по модулю числа, кратного указанному значению. Имеет два параметра, Число которое нужно округлить и Точность, которое указывает кратность.</p>
<p class="Content2">Введём в ячейку <b>I2</b> <b>=окрвверх(</b>, затем нажмём [Shift+F3]. Появится диалог <i>Аргументы функции</i>.</p>
<p class="Content2">щёлкнем по ячейке <b>A2</b>. А теперь экспериментируем с точностью: ставим 3, а внизу диалога вычислен результат этой точности 78, т.е. это число, которое будет делиться на 3 без остатка.</p>
<p class="Content2">Теперь ставим точность 9, а результат 81.</p>
<p class="Content2">Ставим точность 4 и нажмём ОК. Копируем ячейку <b>I2</b> и вставляем в ячейки <b>I3:I5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-34.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ОКРВВНИЗ</b></div>
<p class="Content2">округляет число до ближайшего меньшего по модулю числа, кратного указанному значению. Имеет два параметра, Число которое нужно округлить и Точность, которое указывает кратность.</p>
<p class="Content2">Аналогично функции <b>ОКРВВЕРХ</b>, округлим вниз значение в ячейке <b>A2</b> с точностью до 3 и 9. Сравним результаты, с результатами полученными с функцией <b>ОКРВВЕРХ</b>.</p>
<p class="Content2">Копируем ячейку <b>J2</b> и вставляем в ячейки <b>J3:J5</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-35.jpg" alt="1" /></div>
<div class="Header3">Функции <b>СЛЧИС</b> и <b>СЛУЧМЕЖДУ</b></div>
<p class="Content2">есть генераторы случайных чисел. Позволяют тестировать формулы на любых числах. Полезно когда нет исходных данных или исходные данные не позволяют в полной мере, протестировать ту или иную формулу.</p>
<p class="Content2">Первая функция возвращает случайные числа в диапазоне от 0 до 1. Аргументов не имеет, просто вводим функцию в каждую ячейку.</p>
<p class="Content2">Вторая функция возвращает случайные числа в заданном диапазоне. Два параметра отвечают за нижнюю и верхнюю границу диапазона. В колонке L сгенерированы случайные числа в диапазоне от 1 до 3:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-36.jpg" alt="1" /></div>
<div class="Header3">Функции <b>ЧЁТН</b> и <b>НЕЧЁТ</b></div>
<p class="Content2"><b>ЧЁТН</b> – возвращает ближайшее чётное целое. Положительные числа округляются в сторону увеличения, отрицательные &#8212; наоборот</p>
<p class="Content2"><b>НЕЧЁТН</b> – возвращает ближайшее нечётное целое. Положительные числа округляются в сторону увеличения, отрицательные &#8212; наоборот:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-37.jpg" alt="1" /></div>
<div class="Header3">Функция <b>РИМСКОЕ</b></div>
<p class="Content2">преобразует арабские числа в целые:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-38.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ABS</b></div>
<p class="Content2">получает модуль числа. В колонках <b>P2:P5</b> получим модуль значений ячеек <b>A2:A5</b>:</p>
<p class="Content2">Курсор в ячейку <b>P2</b>, далее вкладка <i>Формулы</i>, в группе <i>Библиотека функций</i>, в списке <i>Математические</i> находим функцию <b>ABS</b></p>
<p class="Content2">В диалоге <i>Аргументы функции</i> введём ячейку <b>A2</b>, либо щёлкнем по этой ячейке в таблице. Нажимаем ОК</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-39.jpg" alt="1" /></div>
<div class="Header3">Функция <b>СУММЕСЛИ</b> и <b>СУММЕСЛИМН</b></div>
<p class="Content2">Чтобы понять функцию <b>СУММЕСЛИ</b> нужно вернуться к логической функции <b>ЕСЛИ</b>. В документе <b>Математические функции</b> активируем лист <i>Конфеты</i>.</p>
<p class="Content2">Вычислим в ячейках <b>G4</b>, <b>G6</b>, <b>G8</b>, <b>G10</b>:</p>
<ol class="align_justify">
<li>Общий объём продаж – <b>СУММ(диапазон проданного)</b>,</li>
<li>суммарный объём продаж конфет ирис – <b>СУММЕСЛИ(диапазон наименований; условие поиска; диапазон проданного)</b>. Где <i>диапазон продаж</i> это данные колонки <b>B</b>, <i>условие поиска</i> это наименование искомых конфет: нужно в латинских кавычках ввести наименование конфеты <i>Ирис</i> и наконец <i>диапазон проданного</i> вводим данные колонки <b>С</b>: <b>=СУММЕСЛИ(B2:B26;&#187;Ирис&#187;;C2:C26)</b></li>
<li>объём проданного после 20 июня 2014 &#8212; <b>СУММЕСЛИ(диапазон дат; условие поиска; диапазон проданного	)</b>. Здесь аналогично предыдущему примеру, только <i>диапазон дат</i> &#8212; это данные колонки D, а в качестве условия поиска выбираем в кавычках &#171;>20.06.2014&#8243;.</li>
<li>объём проданных конфет карамель после 20 мая 2004 года &#8212; <b>СУММЕСЛИМН(диапазон проданного; диапазон наименований; условие для наименования; диапазон дат; условие для дат)</b>. Здесь два диапазона для каждого условия и один диапазон общий, он же безусловный. Общий диапазон &#8212; первый в функции и содержит данные колонки <b>С</b>, <i>диапазон наименований</i> &#8212; это данные колонки <b>B</b>, <i>условие для наименования</i> это &#8212; <i>Карамель</i>, <i>диапазон дат</i> &#8212; это данные колонки <b>D</b>, и <i>условие для дат</i> &#8212; это &#171;>20.05.2014&#8243;.</li>
</ol>
<p>
<div class="Header3">Самостоятельная работа</div>
<p class="Content2">В документе <b>Математические функции</b> активируем лист <i>СР</i>.</p>
<p class="Content2">Вычислим в ячейках <b>G4</b>, <b>G6</b>, <b>G8</b>, <b>G10</b>:</p>
<ol class="align_justify">
<li>Общий объём продаж – <b>СУММ(диапазон проданного)</b>,</li>
<li>суммарный объём продаж киви – <b>СУММЕСЛИ(диапазон наименований; условие поиска; диапазон проданного)</b>,</li>
<li>объём проданного после 10 октября 2004 &#8212; <b>СУММЕСЛИ(диапазон дат; условие поиска; диапазон проданного)</b></li>
<li>объём проданного киви после 20 октября 2004 года &#8212; <b>СУММЕСЛИМН(диапазон проданного; диапазон наименований; условие для наименования; диапазон дат;  условие для дат)</b></li>
</ol>
<p><!--end of Математические функции--></p>
<p>	<!--Текстовые функции--><br />
	
<div class="Header2"><b>Текстовые функции</b></div>
<p class="Content2">Откроем файл <a href ="wp-content/uploads/excel/TextFunctions.xlsx">Текстовые функции</a>. В листе <i>Разбить</i>, дан список фамилий имён и отчеств в одном столбце <b>C</b>. Требуется разбить по столбцам фамилию, имя и отчество.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-40.jpg" alt="1" /></div>
<p class="Content2">Разбивать будем инструментом <i>Текст по столбцам</i>. Для этого выделяем ячейки с <b>ФИО</b>, без заголовка.<br />
	Затем, вкладка <i>Данные</i> группа <i>Работа с данными</i>, команда <i>Текст по столбцам</i>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-41.jpg" alt="1" /></div>
<p class="Content2">Появится мастер по работе с текстом. На первом его шаге, выбираем с флажок с разделителями и нажимаем <i>Далее</i>.</p>
<p class="Content2">Т.к. <b>ФИО</b> разделены пробелами, выбираем флажок пробел(если бы текст был с другими разделителями например <b>;</b>,	то нужно было выбрать переключатель <i>Другой</i> и в поле указать символ <b>;</b>).</p>
<p class="Content2">Переключатель <i>Считать последовательные разделители одним</i>, позволяет в случае если между словами несколько пробелов НЕ СОЗДАВАТЬ для второго и последующего пробелов, отдельную колонку. (Проверим на примере с несколькими пробелами и снятым переключателем)</p>
<p class="Content2">Список <i>Ограничитель строк</i>, позволяет поместить в один столбец несколько разделённых слов,<br />
	но ограниченных выбранным символом. Например, если выбранный символ <b>&#171;</b>, то слова <b>&#171;ООО Новая Заря&#187;</b> будут помещены в один столбец. Нажимаем <i>Далее</i></p>
<p class="Content2">На 3-м шаге мастера указываем место, куда нужно расположить разделённый текст. Курсор поместим в поле <i>Поместить в</i>, затем щелкнем в ячейке таблицы, где появится разделённый текст. В нашем случае это <b>F2</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-42.jpg" alt="1" /></div>
<p class="Content2">Нажимаем <i>Готово</i></p>
<div class="Header3">Функция <b>СЦЕПИТЬ</b></div>
<p class="Content2">Перейдём на лист <i>СЦЕПИТЬ</i>, и воспользуемся функцией <b>СЦЕПИТЬ</b> для того чтобы	соединить несколько текстовых строк в одну. Например, чтобы в ячейке <b>H2</b>, появились данные из <b>C2</b>, <b>C3</b> и <b>C4</b>:</p>
<p class="Content2">Курсор в ячейку <b>H2</b>, далее вкладка <i>Функции</i>, в группе <i>Библиотека функций</i>, в списке <i>Текстовые</i> находим функцию <b>СЦЕПИТЬ</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-44.jpg" alt="1" /></div>
<p class="Content2">В диалоге <i>Аргументы функции</i> ставим курсор в первое поле и щёлкнем в ячейке <b>C2</b> таблицы</p>
<p class="Content2">
<p class="Content2">Теперь ставим курсор во второе поле диалога и щёлкнем в ячейке <b>D2</b>. Однако такой простой подход, получит фамилию и имя одной строкой т.е. вместо <b>Иванов Иван</b> появится <b>ИвановИван</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-45.jpg" alt="1" /></div>
<p class="Content2">Изменим нашу конструкцию так, чтобы между словами был пробел, для этого между полями, где мы вводим слово, нажимаем пробел:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-46.jpg" alt="1" /></div>
<p class="Content2">Нажимаем ОК, и вставляем копию ячейки <b>H2</b> для ячеек <b>H3:H23</b></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-47.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ЛЕВСИМВ</b></div>
<p class="Content2">Перейдём на лист <i>Инициалы</i>, и изучим работу функции <b>ЛЕВСИМВ</b>. Мы можем получить вместо полного имени только первый символ. Например:</p>
<p class="Content2"><b>=ЛЕВСИМВ(D1;1)</b> из слова <b>Иван</b>, получим <b>И</b></p>
<p class="Content2"><b>=ЛЕВСИМВ(D1;2)</b> &#8212;  получим <b>Ив</b></p>
<p class="Content2">Теперь соединим известной нам функцией <b>СЦЕПИТЬ</b>, слова из ячеек <b>C2</b>, <b>C3</b> и <b>C4</b>, а также получим вместо имён инициалы. Для такой операции понадобится вложенная запись из двух функций <b>СЦЕПИТЬ</b> и <b>ЛЕВСИМВ</b>:</p>
<p class="Content2">Курсор в ячейку <b>H2</b>, далее вкладка <i>Функции</i>, в группе <i>Библиотека функций</i>, в списке <i>Текстовые</i> находим функцию <b>СЦЕПИТЬ</b>.</p>
<p class="Content2">В диалоге <i>Аргументы функции</i> в первом поле вводим ячейку <b>C2</b>, для второго поля нажимаем пробел. Курсор в третье поле, раскрываем список функций в поле <b>ИМЯ</b> и выбираем <b>ЛЕВСИМВ</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-48.jpg" alt="1" /></div>
<p class="Content2">Если в списке нет функции <b>ЛЕВСИМВ</b>, то в этом списке выбираем пункт <i>Другие функции</i>, затем в диалоге тип <i>Текстовый</i>, находим функцию <b>ЛЕВСИМВ</b>.</p>
<p class="Content2">В диалоге <i>Аргументы функции</i>, в первом поле вводим ячейку <b>D2</b>, а во втором число <b>1</b>, но!!! не нажимаем ОК!!!, а щёлкнем по слову <b>СЦЕПИТЬ</b> в строке формул:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-50.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-49.jpg" alt="1" /></div>
<p class="Content2">В четвёртом поле ставим точку, для пятого повторим аналогично для третьего поля, для шестого вводим точку и нажимаем ОК:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-51.jpg" alt="1" /></div>
<div class="Header3"><b>Конкатенация</b>(соединение строк)</div>
<p class="Content2">Перейдём на лист <i>Конкатенация</i>. Повторим соединение строк, используя знак амперсанда (<b>&#038;</b>). Это символ, который соединяет две и более строк</p>
<p class="Content2">Введём в ячейку <b>H2</b> формулу <b>=C2&#038;D2&#038;E2</b>. Однако так мы получим одно слово <b>ИвановИванИванович</b>, тогда добавим ещё по одному знаку <b>&#038;</b>, а между ними, поставим пробел в кавычках(кавычки на английской раскладке!!!):</p>
<p class="Content2">=<span style="color:#0000ff">C2</span>&#038;&#187; &#171;&#038;<span style="color:#008000">D2</span>&#038;&#187; &#171;&#038;<span style="color:#ff00ff">E2</span></p>
<div class="Header3">Функция <b>ПРОПИСН</b></div>
<p class="Content2">Перейдём на лист <i>ПРОПИСН</i>. Нам нужно чтобы в колонке <b>E</b>, были слова из колонки <b>B</b>, но прописными буквами:</p>
<p class="Content2">Курсор в ячейку <b>E2</b>, вводим функцию <b>=ПРОПИСН(B2)</b>, нажимаем [Enter]. После скопируем ячейку <b>E2</b> в ячейки <b>E3:E22</b></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-52.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ПРОПНАЧ</b></div>
<p class="Content2">Перейдём на лист <i>Пропнач</i>. Нам нужно чтобы в колонке <b>E</b>, были слова из колонки <b>B</b>, но с маленькими буквами и большая заглавная:</p>
<p class="Content2">Курсор в ячейку <b>E2</b>, вводим функцию <b>=ПРОПНАЧ(B2)</b>, нажимаем [Enter]. После скопируем ячейку <b>E2</b> для ячеек <b>E3:E22</b></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-53.jpg" alt="1" /></div>
<p class="Content2">Теперь для колонки <b>F</b> получим ВСЕ маленькие буквы функцией <b>=СТРОЧН(C2)</b></p>
<div class="Header3">Функция <b>СЖПРОБЕЛ</b></div>
<p class="Content2">Перейдём на лист <i>Строчн</i>. Нам нужно чтобы в колонке <b>C</b>, были слова из колонки <b>A</b>, но с удалёнными лишними пробелами. Для этого воспользуемся функцией которая сжимает пробелы СЖПРОБЕЛ:</p>
<p class="Content2">Курсор в ячейку <b>C2</b>, вводим функцию <b>=СЖПРОБЕЛ(A2)</b>, нажимаем [Enter]. После скопируем ячейку <b>C2</b> для ячеек <b>C3:F10</b>.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-54.jpg" alt="1" /></div>
<div class="Header3">Функция <b>ДЛСТР</b></div>
<p class="Content2">Вычислим в колонке <b>B</b>, сколько символов в ячейках колонки <b>A</b>. Затем в колонке <b>D</b> вычислим, сколько символов в ячейках колонки <b>C</b>. В обоих случаях воспользуемся функцией ДЛСТР:</p>
<p class="Content2">Курсор в ячейку <b>B2</b>, вводим <b>=ДЛСТР(A2)</b> и нажимаем [Enter], скопируем ячейку <b>B2</b> для ячеек <b>B3:B10</b>. Аналогично в колонке <b>D</b> вычислим длину строк в колонке <b>C</b></p>
<p class="Content2">Теперь в колонке <b>E</b> вычислим разницу, между и <b>B</b> и <b>D</b>.</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-55.jpg" alt="1" /></div>
<p class="Content2">Перейдём на лист <i>РАЗБАДР</i>. Требуется разбить строки в колонке <b>A</b> по городам и улицам для колонок <b>B</b> и <b>C</b>. Известно, что город и улицы разделены запятой. </p>
<p class="Content2">Для этого нужна функция, которая вычисляет количество символов до запятой включительно, это функция <b>НАЙТИ</b>. Например, запись <b>НАЙТИ(&#171;,&#187;;A2)</b>, возвратит <b>11</b>, а <b>НАЙТИ(&#171;,&#187;;A3)</b>, возвратит <b>8</b></p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-56.jpg" alt="1" /></div>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-57.jpg" alt="1" /></div>
<p class="Content2">Т.к. для колонки <b>B</b>, нужно получить только первую часть строки, то воспользуемся функцией <b>ЛЕВСИМВ</b>:</p>
<div class="Header3">Функция <b>НАЙТИ</b></div>
<p class="Content2">Т.к. для колонки <b>B</b>, нужно получить только первую часть строки, то воспользуемся функцией <b>ЛЕВСИМВ</b>:</p>
<p class="Content2">Курсор в ячейку <b>B2</b>, далее вкладка <i>Функции</i>, в группе <i>Библиотека функций</i>, в списке <i>Текстовые</i> находим функцию <b>ЛЕВСИМВ</b></p>
<p class="Content2">В диалоге <i>Аргументы функции</i> в первом поле вводим ячейку <b>A2</b>, а для второго поля будем использовать вложенную функцию <b>НАЙТИ</b> через поле имя:</p>
<p class="Content2">Курсор во второе поле, раскрываем список функций в поле <b>ИМЯ</b> и находим функцию <b>НАЙТИ</b>. Если в списке нет функции <b>НАЙТИ</b>, то выбираем пункт <i>Другие функции</i>, затем в диалоге тип <i>Текстовый</i>, находим функцию <b>НАЙТИ</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-58.jpg" alt="1" /></div>
<p class="Content2">В диалоге <i>Аргументы функции</i> для функции <b>НАЙТИ</b>, в первом поле вводим символ <b>,</b> во втором ячейку <b>A2</b>, но!!! не нажимаем ОК!!!, а щёлкнем в строке формул по слову <b>ЛЕВСИМВ</b>:</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-59.jpg" alt="1" /></div>
<p class="Content2">Нажимаем ОК. Вид формулы для <b>B2</b>:</p>
<p class="Content2">=ЛЕВСИМВ(<span style="color:#0000ff">A2</span>;НАЙТИ(&#171;,&#187;;<span style="color:#0000ff">A2</span>))</p>
<div id="block10x10center"><img src="wp-content/uploads/excel/exel-03-60.jpg" alt="1" /></div>
<p class="Content2">Если нужно было удалить запятую, то в функции <b>ЛЕВСИМВ</b> добавим значение <b>-1</b>:</p>
<p class="Content2">=ЛЕВСИМВ(<span style="color:#0000ff">A2</span>;НАЙТИ(&#171;,&#187;;<span style="color:#0000ff">A2</span>)-1)</p>
<p class="Content2">скопируем ячейку <b>B2</b> для ячеек <b>B3:B4</b></p>
<div class="Header3">Функция <b>ПРАВСИМВ</b></div>
<p class="Content2">Теперь получим адрес без города. Для этого нужна функция, которая вычисляет часть символов справа от строки – это  <b>ПРАВСИМВ</b>. И функция, которая вычисляет длину строки &#8212; <b>ДЛСТР</b>. Т.е. из общей строки, вычесть строки только с городом.</p>
<p class="Content2">Курсор в <b>C2</b> и вводим:</p>
<p class="Content2">=ПРАВСИМВ(<span style="color:#0000ff">A2</span>;ДЛСТР(<span style="color:#0000ff">A2</span>)-ДЛСТР(<span style="color:#0000ff">B2</span>))</p>
<p class="Content2">Мы получили адрес и символ <b>,</b> с пробелом. Отнимем два символа:</p>
<p class="Content2">=ПРАВСИМВ(<span style="color:#0000ff">A2</span>;ДЛСТР(<span style="color:#0000ff">A2</span>)-ДЛСТР(<span style="color:#0000ff">B2</span>)-2)</p>
<p class="Content2">скопируем ячейку <b>C2</b> для ячеек <b>C3:C4</b></p>
<div class="Header3">Функция <b>ЗАМЕНИТЬ</b></div>
<p class="Content2">Перейдём на лист <i>ЗАМЕНА</i>. Требуется заменить в номере телефона первые два символа <b>8-</b> на другие два символа <b>+7</b>. Для этого нужна функция, которая заменяет указанное количество символов, на текст – это <b>ЗАМЕНИТЬ</b>:</p>
<p class="Content2"><b>ЗАМЕНИТЬ(номер телефона; номер заменяемого символ; количество заменяемых символов; заменяемые символы)</b></p>
<p class="Content2">Так для нашей задачи вид формулы будет таким:</p>
<p class="Content2">=ЗАМЕНИТЬ(<span style="color:#0000ff">B2</span>;1;2;&#187;+7&#8243;)</p>
<p class="Content2">Если нужно заменить только 8 на 7, то вид формулы такой:</p>
<p class="Content2">=ЗАМЕНИТЬ(<span style="color:#0000ff">B2</span>;1;1;&#187;7&#8243;)</p>
<p>	<!--end of Текстовые функции--></p>
<p>	<!--Статистические функции--><br />
	</p>
<div class="Header2"><strong>Статистические функции</strong></div>
<p class="Content2">В MS Excel содержится большое количество статистических функций. Мы же рассмотрим наиболее популярные из них.</p>
<div class="Header3">Функции<b>МАКС</b>, <b>МИН</b>, <b>СРЗНАЧ</b>, <b>СЧЁТ</b>, <b>СЧЁТЕСЛИ</b>, <b>СРЗНАЧЕСЛИ</b> и <b>СЧЁТЕСЛИМН</b></div>
<p class="Content2">Откроем файл <a href ="wp-content/uploads/excel/StatisticFunctions.xlsx">Статистические функции</a>, В листе <i>Функции</i> дан список наименований продукции, количество проданной продукции и даты продаж. Проведём некоторые вычисления с помощью статистических функций:</p>
<ol class="align_justify">
<li>Функция <b>МАКС</b> возвращает максимальное числовое значение из указанного диапазона. Вычислим максимальное значение из колонки <b>C</b>, результат поместим в ячейку <b>G4</b>(запись аналогична функции <b>СУММ</b>)</li>
<li>Функция <b>МИН</b> возвращает минимальное числовое значение из указанного диапазона. Вычислим минимальное значение из колонки <b>C</b>, результат поместим в ячейку <b>G6</b>(запись аналогична функции <b>СУММ</b>)</li>
<li>Функция <b>СРЗНАЧ</b> возвращает среднее значение из указанного диапазона. Вычислим среднее значение из колонки <b>C</b>, результат поместим в ячейку <b>G8</b>(запись аналогична функции <b>СУММ</b>)</li>
<li>Функция <b>СЧЁТ</b> возвращает количество числовых(не текстовых) значений из указанного диапазона. Вычислим количество заполненных числами ячеек в колонке <b>C</b>, результат поместим в ячейку <b>G10</b>(запись аналогична функции <b>СУММ</b>)</p>
</li>
<li>Функция <b>СЧЁТЕСЛИ</b> возвращает количество значений, из указанного диапазона используя определённое условие. Функция имеет два аргумента. Вычислим, сколько было сделок с ирис, результат поместим в ячейку <b>G12</b>:</li>
<p class="Content2"><i>=СЧЁТЕСЛИ(диапазон наименований; критерий)</i></p>
<li>Аналогично вычислим, сколько было сделок с объёмом партии менее 250 кг, результат поместим в ячейку <b>G14</b></li>
<p class="Content2"><i>=СЧЁТЕСЛИ(диапазон проданной продукции; критерий)</i></p>
<li>Функция <b>СРЗНАЧЕСЛИ</b> возвращает среднее значение из указанного диапазона используя определённое условие. Вычислим средний объём продаж карамель, результат поместим в ячейку <b>G16</b>:</li>
<p class="Content2"><i>=СРЗНАЧЕСЛИ(диапазон наименований; критерий; диапазон проданной продукции)</i></p>
<li>Функция <b>СЧЁТЕСЛИМН</b> возвращает количество значений из указанного диапазона используя несколько условий. Вычислим, сколько было сделок с конфетами ирис, после 20 июля 2014. Результат поместим в ячейку <b>G18</b>:</li>
<p class="Content2"><i>=СЧЁТЕСЛИМН(диапазон наименований; критерий наименования; диапазон дат; критерий даты)</i></p>
</ol>
<p class="Content2">В данном случае функция <b>СЧЁТЕСЛИМН</b> работает так: проходит по колонке с наименованиями продукции, если находит ирис, то в этой же строке, но в колонке с датами проверяет больше ли дата чем 20 июля, если да то увеличивает свой счётчик на 1. Счётчик перед работой был равен 0.</p>
<p class="Content2Top">Перейдём на лист <i>МАРКЕТ</i>. Аналогично работе с листом <i>Функции</i> проведём расчёты для ячеек: <b>H4</b>, <b>H6</b>, <b>H8</b>, <b>H10</b>, <b>H12</b> и <b>H14</b>.</p>
<div class="Header3">Функции<b>СЧЁТЗ</b> и <b>СЧИТАТЬПУСТОТЫ</b></div>
<p class="Content2">Перейдём на лист <i>СЧЁТ<i/>. Здесь дана таблица с данными продаж. Продажи были проведены не везде. Поведём статистические расчёты.</p>
<p class="Content2">Для ячеек колонки <b>N</b> вычислим общую сумму продаж каждого товара за все 12 месяцев</p>
<p class="Content2">Для ячеек колонки <b>O</b> вычислим все заполненные ячейки с помощью функцией <b>СЧЁТЗ</b>. Использовать будем только один параметр:</p>
<p class="Content2"><i>=СЧЁТЗ(диапазон значений за 12 месяцев)</i></p>
<p class="Content2">В колонке <b>P</b> нужно вычислить среднее значение проданных товаров в месяцев. Здесь можно воспользоваться функцией <b>СРЗНАЧ</b> или данные колонки <b>N</b> разделить на данные колонки <b>O</b></p>
<p class="Content2">В колонке <b>Q</b> нужно вычислить среднее значение проданных товаров за 12 месяцев. Если точно известно что число месяцев 12, то можно воспользоваться формулой <b>N/12</b>, но если число месяцев неизвестно, то вычислить количество месяцев удобно с помощью функции <b>СЧЁТЗ</b>, которая считает не только числовые ячейки, но и строковые:</p>
<p class="Content2"><i>=N/СЧЁТЗ(диапазон названий месяцев)</i></p>
<p class="Content2">Здесь диапазон названий месяцев смещаться не должен, иначе получим ошибку деления на 0: <b>#ДЕЛ/0</b></p>
<p class="Content2">В колонке <b>R</b> нужно вычислить отсутствия продаж с помощью функции <b>СЧИТАТЬПУСТОТЫ</b>, которая воспринимает пустую ячейку как отсутствие продаж. Если будет стоять 0, то данная функция не посчитает что продаж не было.</p>
<p class="Content2">Здесь нужно воспользоваться программной заменой 0 на пустоту, но только если указать что в ячейке один символ “0”, иначе нули будут убраны везде: Курсор в ячейку выше данных затем вкладка <i>Главная/Редактирование/Найти и выделить/Заменить</i>. В диалоге <i>Заменить</i> в первое поле ставим 0, во второе ничего. Теперь самое главное: раскрываем в диалоге параметры и ставим галку <i>Ячейка целиком</i>, ОК.</p>
<p class="Content2">Теперь воспользуемся функцией <b>СЧИТАТЬПУСТОТЫ</b></p>
<div class="Header3"><b>Самостоятельная работа</b></div>
<p class="Content2">Перейдём на лист <b>СР1</b>. Аналогично работе с листом Функции проведём расчёты для ячеек: <b>G4</b>, <b>G6</b>, <b>G8</b>, <b>G10</b>, <b>G12</b> и <b>G14</b>.</p>
<p class="Content2">Перейдём на лист <b>СР2</b>. Аналогично работе с листом Маркет проведём расчёты для ячеек: <b>H4</b>, <b>H6</b>, <b>H8</b>, <b>H10</b>, <b>H12</b> и <b>H14</b>.</p>
<p class="Content2">Перейдём на лист <b>СР3</b>. Аналогично работе с листом СЧЁТ проведём расчёты для колонок: <b>H</b>, <b>O</b>, <b>P</b>, <b>Q</b>, <b>R</b>.</p>
<p>	<!--end of Статистические функции--></p>
<p>	<!--Финансовые функции--><br />
	
<div class="Header2"><b>Финансовые функции</b></div>
<p class="Content2">В MS Excel содержится большое количество финансовых функций. Мы же рассмотрим наиболее популярные из них.</p>
<p class="Content2">Откроем файл <a href ="wp-content/uploads/excel/FinancialFunctions.xlsx">Финансовые функции</a>, В листе <i>Примеры</i> даны три задачи:</p>
<p class="Content2"><b>Задача 1</b>. Мы открываем счёт на год под 8%. Первый раз вносим 5000 руб.	, затем каждый месяц докладываем по 1000 руб. Сколько мы получим в конце периода</p>
<p class="Content2"><b>Задача 2</b>. Мы берём такой то кредит, под такое то количество процентов годовых. Сколько нужно платить каждый месяц</p>
<p class="Content2"><b>Задача 3</b>. Мы берём такой то кредит, на такое то количество времени, можем ежемесячно платить такую то сумму. За сколько времени мы выплатим весь кредит</p>
<p class="Content2">Функции, которыми будем пользоваться:</p>
<ul class="align_justify">
<li><b>БС</b> – баланс на конец периода</li>
<li><b>ПЛТ</b> – платёж</li>
<li><b>КПЕР</b> – количество периодов</li>
</ul>
<p class="Content2">Эти функции взаимосвязаны, например, функция <b>БС</b> будет иметь в качестве параметров функции <b>ПЛТ</b> и <b>КПЕР</b>.</p>
<p class="Content2"><b>Решение задачи 1:</b></p>
<p class="Content2">Курсор в <b>A9</b>, далее вкладка <i>Формулы/Библиотека функций/Финансовые</i>. В списке выбираем функцию <b>БС</b></p>
<ul class="align_justify">
<li><i>Ставка</i> – ставим процент из ячейки <b>A7</b>, делённый на 12</li>
<li><i>КПЕР</i> – количество периодов 12, сколько будем платить – <b>B7</b></li>
<li><i>ПЛТ</i> – размер ежемесячного платежа – <b>C7</b></li>
<li><i>ПС</i> – приведённый вклад, т.е. то, что внесли первоначально – <b>D7</b></li>
</ul>
<p class="Content2">Тип платежа 0 или 1: в конце или в начале периода, для вклада это не важно 0 или 1. Это будет важно, когда мы будем отдавать кредит, если мы будем отдавать в тот день, в который взяли кредит – это начало периода, если мы отдадим в конце месяца – это конец периода. Нажимаем ОК.</p>
<p class="Content2"><b>Решение задачи 2:</b></p>
<p class="Content2">Нужно рассчитать размеры одинаковых платежей, т.е. аннуитетный платёж</p>
<p class="Content2">Курсор в <b>A20</b>, далее вводим <b>=ПЛТ(</b> и нажимаем [Shift+F3]. В диалоге те же самые аргументы:</p>
<ul class="align_justify">
<li><i>Ставка</i> – процент из <b>A18</b>, делим на 12.</li>
<li><i>КПЕР</i> – количество периодов 12, сколько будем платить – <b>B18</b></li>
<li><i>Пс</i> – приведённый вклад, т.е. сколько мы взяли в долг – <b>C18</b></li>
<li><i>Бс</i> – баланс на конец периода 0</li>
<li><i>Тип</i> – теперь тип важно указать. Если мы получили деньги и в этот же день вносим платёж, то ставим 1, если вносим в конце месяца, то &#8212; 0. Ставим 0 и нажимаем ОК</li>
</ul>
<p class="Content2"><b>Решение задачи 3:</b></p>
<p class="Content2">Взяли кредит на 15000 под 18% годовых. Отдавать можем только по 2000 в месяц. Нужно узнать через сколько месяцев мы отдадим кредит.</p>
<p class="Content2">Курсор в <b>A31</b>, далее вводим <b>=КПЕР(</b> и нажимаем [Shift+F3]. В диалоге те же самые аргументы:</p>
<ul class="align_justify">
<li><i>Ставка</i> – процент из <b>A29</b>, делим на 12</li>
<li><i>ПЛТ</i> – размер ежемесячного платежа – <b>B29</b></li>
<li><i>ПС</i> – сколько взяли – <b>C29</b></li>
<li><i>Бс</i> – баланс в конце периода, должны всё отдать, значит 0</li>
<li><i>Тип</i> – 0</li>
</ul>
<p class="Content2">Нажимаем ОК</p>
<p class="Content2">Если вместо 15000 ввести например, 1 000 000, то такую сумму банк не даст.</p>
<p class="Content2Top">Минусы и плюсы: направление потока денег. ОТ нас – отрицательный поток, К нам – положительный поток</p>
<div class="Header3"><b>Примеры для закрепления:</b></div>
<p class="Content2">Перейдём на лист <i>Кредит</i>. Здесь даны таблицы с некоторыми кредитами.</p>
<p class="Content2">Мы берём кредит на покупку автомобиля. Функции для расчёта выплат те же что и ранее только срок кредита не 1 год, а 3.</p>
<p class="Content2">Курсор в <b>B5</b>, далее вводим <b>=ПЛТ(</b> и нажимаем [Shift+F3]. В диалоге вводим аргументы:</p>
<ul class="align_justify">
<li><i>Ставка</i> – процент из <b>B3</b>, делим на 12</li>
<li><i>КПЕР</i> – количество периодов <b>B4*12</b>, сколько будем платить</li>
<li><i>Пс</i> – приведённая стоимость, т.е. сумма нашего долга – <b>B2</b></li>
<li><i>Бс</i> – баланс на конец периода 0</li>
<li><i>Тип</i> – ставим 0 и нажимаем ОК. Получаем ежемесячные выплаты</li>
</ul>
<p class="Content2Top">Теперь эта же задача, только если бы мы не платили проценты:</p>
<p class="Content2">Для ячейки <b>B6</b> вводим отношение кредита к периоду: <b>B2/(B4*12)</b></p>
<p class="Content2">Вычислим переплату: <b>(B5+B6)*B4*12</b></p>
<p class="Content2">Самостоятельно рассчитаем сумму выплат кредита за квартиру.</p>
<p class="Content2Top">Перейдём на лист <i>Анализ кредитов</i>. Здесь нужно вычислить оптимальный процент из 8-и предложенных для кредита 1000000, ежемесячная выплата за которого не должна превысить 33000</p>
<p class="Content2">Здесь функцию <b>ПЛТ</b> соединим со смешанными ссылками:</p>
<p class="Content2">Выделяем диапазон <b>C4:J8</b> (от <b>C4</b>), вводим с клавиатуры <b>=ПЛТ(</b> и нажимаем [Shift+F3].</p>
<ul class="align_justify">
<li>В поле <i>Ставка</i> процент из <b>C3</b>, но т.к. при копировании вправо смещаться должен столбец, мы фиксируем строку и делим на 12</li>
<li><i>КПЕР</i> – количество периодов это <b>B4</b>, но т.к. при копировании смещаться должна строка, мы фиксируем столбец и умножаем на 12</li>
<li><i>Пс</i> – размер кредита всегда – <b>D10</b> т.е. фиксируем столбец и строку</li>
<li><i>Бс</i> – баланс на конец периода 0</li>
<li><i>Тип</i> – ставим 0</li>
</ul>
<p class="Content2">Если нажмём ОК, то формула будет вычислена только для активной ячейки. Нажимаем [Ctrl+Enter].</p>
<p>	<!--end of Финансовые функции--></p>
<p>	<!--Функции даты и времени--><br />
	
<div class="Header2"><strong>Функции даты и времени</strong></div>
<div class="Header3">Функция <b>ДЕНЬ</b></div>
<p class="Content2">Откроем файл <a href ="wp-content/uploads/excel/DataTimeFunctions.xlsx">Функции ДАТА и ВРЕМЯ</a>, лист <i>День Месяц Год</i>.</p>
<p class="Content2">Нужно колонку <b>Дата рождения</b>, разбить на колонки <b>День</b>, <b>Месяц</b> и <b>Год</b>. Функция <b>ДЕНЬ</b>, вытаскивает из даты день, <b>МЕСЯЦ</b> – вытаскивает из даты месяц и функция <b>ГОД</b>, вытаскивает из даты год:</p>
<ol class="align_justify">
<li>В ячейку <b>E2</b> вводим <b>=ДЕНЬ(D2)</b>, затем <b>E2</b> копируем для своего столбца.</li>
<li>В ячейку <b>F2</b> вводим <b>=ДЕНЬ(D2)</b>, затем <b>F2</b> копируем для своего столбца.</li>
<li>В ячейку <b>G2</b> вводим <b>=ДЕНЬ(D2)</b>, затем <b>G2</b> копируем для своего столбца.</li>
</ol>
<p class="Content2Top">Колонка <b>H</b> содержит обратную задачу, т.е. мы должны собрать из колонок <b>E</b>, <b>F</b> и <b>G</b> дату с помощью функции <b>ДАТА</b>:</p>
<p class="Content2">В ячейку <b>E2</b> вводим <b>=ДАТА(</b>, затем [Shift+F3] и в поля вводим названия ячеек(обратим внимание что первое поле содержит год). теперь <b>H2</b> копируем для своего столбца.</p>
<div class="Header3">Функция <b>ДЕНЬНЕД</b></div>
<p class="Content2">Перейдём на лист <i>ДЕНЬНЕД</i></p>
<p class="Content2">Функция <b>ДЕНЬНЕД</b> выдаёт порядковый номер дня недели в виде числа: введём в <b>A2</b> сегодняшнюю дату, а в <b>B2</b> &#8212; <b>=ДЕНЬНЕД(</b>, затем [Shift+F3]. В первое поле вводим <b>A2</b>, во второе тип, который определяет	отсчёт недели. Тип может быт 1, 2 или 3:</p>
<ul class="align_justify">
<li>если тип 1, то с Вс=1 до Сб=7</li>
<li>если тип 2, то с Пн=1 до Вс=7</li>
<li>если тип 3, то с Пн=0 до Вс=6</li>
</ul>
<p class="Content2">Нам нужен тип 2. Нажимаем ОК.</p>
<p class="Content2">Теперь нам нужен не номер, а название недели. Для этого в ячейке <b>C2</b>, просто ссылаемся на ячейку<br />
	с датой: <b>=A2</b>, выходим из режима редактирования и для <b>C2</b> вызываем диалог формат ячеек:<br />
	вкладка <i>Главная/Число/Формат ячеек</i></p>
<p class="Content2">В диалоге <i>Формат ячеек</i> в списке форматов выбираем <i>(все форматы)</i> в поле <i>Тип</i>, можем ввести:</p>
<ul class="align_justify">
<li>Д &#8212; получаем номер дня из одной цифры</li>
<li>ДД &#8212; получаем номер дня из двух цифр</li>
<li>ДДД &#8212; получаем название дня недели в сокращённом виде</li>
<li>ДДДД &#8212; получаем название дня недели в полном виде</li>
<li>М &#8212; получаем номер месяца из одной цифры</li>
<li>ММ &#8212; получаем номер месяца из двух цифр</li>
<li>МММ &#8212; получаем название месяца в сокращённом виде</li>
<li>ММММ &#8212; получаем название месяца в полном виде</li>
<li>Г &#8212; получаем год в сокращённом виде</li>
<li>ГГ &#8212; получаем год в сокращённом виде</li>
<li>ГГГ &#8212; получаем год в полном виде</li>
<li>ГГГГ &#8212; получаем год в полном виде</li>
</ul>
<p class="Content2">Введём собственный шаблон даты например, для <i>8 фев. 14г.</i> Нужно ввести в поле <i>Тип</i> Д МММ. ГГ”г.”. Проверим результат в ячейке <b>C2</b>.</p>
<p class="Content2">При желании можно перед <b>Д</b> ввести <b>“Сегодня &#8212; ”</b></p>
<div class="Header3">Функция <b>ЧИСТРАБДНИ</b></div>
<p class="Content2">Перейдём на лист <i>ЧИСТРАБДНИ</i>.</p>
<p class="Content2">У нас есть две даты 22.12.2011 и 30.12.2011, нужно посчитать количество дней между ними.</p>
<p class="Content2">1 вариант: из конечной даты вычесть начальную дату <b>=A4-A3</b>, но мы получим 8, т.к. это просто разность между 30 и 22.</p>
<p class="Content2">2 вариант: Если нужно между этими датами вычесть выходные, то воспользуемся функцией <b>ЧИСТРАБДНИ</b>:</p>
<p class="Content2">Введём в <b>C3</b>, <b>=ЧИСТРАБДНИ(</b> и нажмём [Shift+F3], в первом поле вводим <b>A3</b> во втором <b>A4</b>, и ОК мы получили количество только рабочих дней без субботы и воскресенья -7</p>
<div class="Header3">Функция <b>СЕГОДНЯ</b></div>
<p class="Content2">Изучим, как можно вычислить сколько нам полных лет или какой у нас стаж работы:</p>
<p class="Content2">Введём в ячейку <b>E2</b> свою дату рождения, а в <b>F2</b> с помощью функции <b>СЕГОДНЯ</b> текущую дату без параметра.</p>
<div class="Header3">Функция <b>ГОД</b> и <b>ДОЛЯГОДА</b></div>
<p class="Content2">Посчитаем сколько нам сейчас лет:</p>
<p class="Content2">1 вариант: формула <b>=ГОД(F2)-ГОД(E2)</b> правильна, только если сегодняшний день и месяц больше дня и месяца даты рождения,</p>
<p class="Content2">2 вариант формула  <b>=F2-E2</b> возвратит количество дней</p>
<p class="Content2">3 вариант: применяем функцию <b>ДОЛЯГОДА</b>, в первом её параметре вводим дату рождения, во втором сегодняшнюю дату и нажимаем ОК. Мы можем получить дробное число, если дни и месяцы не совпадают.</p>
<div class="Header3">Функция <b>РАЗНДАТ</b></div>
<p class="Content2">И наконец, недокументированная функция <b>РАЗНДАТ</b>. В мастере её нет, поэтому аргументы вводим вручную, т.е. [Shift+F3] не сработает. Синтаксис функции <b>РАЗНДАТ</b>:</p>
<p class="Content2"><i>=РАЗНДАТ(нач дата; конечн дата; критерий работы функции)</i></p>
<p class="Content2">Критерий работы функции: в кавычках символы на английском</p>
<ul class="align_justify">
<li>“d” – дни,</li>
<li>“m” – месяцы</li>
<li>“y” – годы,</li>
<li>“ym” месяцы без учёта лет</li>
<li>“md” дни без учёта месяцев</li>
</ul>
<p class="Content2Top">=РАЗНДАТ(E2;D2;”d”)</p>
<p class="Content2">=РАЗНДАТ(E2;D2;”m”)</p>
<p class="Content2">=РАЗНДАТ(E2;D2;”y”)</p>
<p class="Content2">=РАЗНДАТ(E2;D2;”ym”)</p>
<p class="Content2">=РАЗНДАТ(E2;D2;”md”)</p>
<p>	<!--end of Функции даты и времени--></p>
<p><!--Функции ссылок и подстановки--></p>
<div class="Header2"><b>Функции ссылок и подстановки</b></div>
<p class="Content2">Откроем файл <a href ="wp-content/uploads/excel/LinksArraysFunctions.xlsx">Функции ссылки и массивы</a>, лист <i>Заказы</i>.</p>
<p class="Content2">Здесь есть таблица <b>Прайс лист</b>, где каждому товару есть своя цена, и таблица заказов где для каждого товара нужно вытащить цену из прайс листа. Делать это вручную долго, поэтому для таких целей есть функция ВПР(Вертикальный поиск результата)</p>
<p class="Content2">Курсор в <b>D3</b>, далее слева от строки формул нажимаем кнопку <i>Вставить функцию</i>, категория <i>Ссылки и массивы</i>, находим функцию <b>ВПР</b> и нажимаем ОК. В диалоге будут четыре аргумента:</p>
<ul class="align_justify">
<li><i>Искомое значение</i> &#8212; в первом поле вводим ячейку <b>B3</b>,</li>
<li><i>Таблица</i> &#8212; это ссылка на таблицу с ценами, т.е. Прайс лист. Вводим <b>G3:H19</b>. Эту формулу будем копировать, но таблица не должна смещаться, значит формулу нужно фиксировать. </li>
<li><i>Номер столбца</i> – номер столбца таблицы, откуда нужно брать цену, указываем 2.</li>
<li><i>Интервальный просмотр</i> – нужно указать одно из четырёх значений: ИСТИНА, 1, ЛОЖЬ и 0. Если нужно искать точное совпадение например Яблок Яблоки, то вводим 0.</li>
</ul>
<p class="Content2">Конечная формула:</p>
<p class="Content2"><b>=ВПР(B3;G$3:H$19;2;0)</b></p>
<p>	<!--end of Функции ссылок и подстановки--></p>
<p>
<div class="Header2"><b>Самостоятельная работа</b></div>
<p class="Content2">Выполним вычисления в электронной таблице используя функции: ЕСЛИ, СУММ, СУММЕСЛИ, СЧЁТЕСЛИ, ЧАС, ГПР, СЧИТАТЬПУСТОТЫ, МАКС, МИН, СРЗНАЧ и РАНГ.</p>
<div class="Header3"><b>Логическая функция ЕСЛИ</b></div>
<p class="Content2">
Рассмотрим таблицу финансовых операций в клубе проката роликовых коньков:
</p>
<div id="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-01.png" alt="1" width="768" class="baget"></div>
<p class="Content2">
Колонка <b>Бронь</b> содержит информацию о брони. Колонка <b>Доплата</b> контролирует данные в колонке <b>Бронь</b> и выводит значение <b>100</b>, если посетитель забронировал себе коньки, и <b>0</b> в противном случае. Этот контроль реализует функция ЕСЛИ, которая имеет следующий синтаксис:
</p>
<div class="Content2">
<b>ЕСЛИ(A;B;C)</b> где:</div>
<div class="Content2"><b>A</b> – логическое выражение, например 5&gt;2, C2&gt;7</div>
<div class="Content2"><b>B</b> – истина, если логическое выражение истинно</div>
<div class="Content2"><b>C</b> – ложь, если логическое выражение ложно</div>
<div class="Content2">
Значит, логическое выражение будет проверять установлен ли ”<b>+</b>” в ячейках колонки <b>Бронь</b>, если установлен, то функция выводит значение истины, иначе функция выводит ложь. Псевдокод нашей функции выглядит так:
</div>
<div class="Content2">ЕСЛИ(в ячейках колонки Бронь есть “+”; выведем 100; ведем 0):</div>
<p class="Content2">Реализуем условие доплаты на практике:</p>
<ol class="align_justify">
<li>Курсор в ячейку <b>D6</b>, вызываем команду <b>Вставить функцию</b>:</li>
<div id="block30x30center"><img src="wp-content/uploads/excel/exel-03-sr-02.png" alt="1" width="760" class="baget"></div>
<li>В окне <b>Мастер функций</b>, выбираем в списке Категория <b>Логические</b>, и функцию <b>ЕСЛИ</b>, нажимаем <b>ОК</b>:</li>
<div class="block30x30center">
<img src="wp-content/uploads/excel/exel-03-sr-03.png" alt="1" width="429" height="370" class="baget">
</div>
<li>Установим аргументы функции и нажимаем <b>ОК</b>:</li>
<div class="block30x30center"><img src="wp-content/uploads/excel/exel-03-sr-04.png" alt="1" height="309" width="606" class="baget"></div>
<li>
За маркер автозаполнения копируем формулу вдоль колонки <b>Доплата</b>:</li>
</ol>
<div class="block30x30">
<table align="center">
<tr>
<td><img src="wp-content/uploads/excel/exel-03-sr-05.png" alt="1" height="195" width="318" class="baget"></td>
<td><img src="wp-content/uploads/excel/exel-03-sr-06.png" alt="1" height="195" width="318" class="baget"></td>
</tr>
</table>
</div>
<div class="Content2">Слева результат работы функции ЕСЛИ, для колонки <b>Доплата</b>, справа действия маркера автозаполнения над формулой колонки <b>Доплата</b>:</div>
<div class="block30x30">
<table align="center">
<tr>
<td><img src="wp-content/uploads/excel/exel-03-sr-07.png" alt="1" height="195" width="318" class="baget"></td>
<td><img src="wp-content/uploads/excel/exel-03-sr-08.png"  alt="1" height="195" width="318" class="baget"></td>
</tr>
</table>
</div>
<div class="Header3"><b>Функция времени ЧАС</b></div>
<div class="Content2">
Аналогично с помощью функции ЕСЛИ, вычислим скидку. Скидка составляет 150 рублей и предоставляется, если посетитель катался 3 и более часа. Время катания у нас указано в колонках <b>F</b> и <b>E</b>, количество часов вычисляется разностью этих колонок, только это количество должно быть в числовом, а не временном формате. Функция <b>ЧАС(ссылка)</b>, переводит параметр <b>ссылка</b> из формата время в числовой.
</div>
<div class="Content2">
Например, количество проведённых часов первого в списке посетителя, можно вычислить по формуле <b>ЧАС(F9)-ЧАС(E9)</b>, а условие для скидки будет выглядеть так:
</div>
<div class="Content2">
(ЧАС(F9)-ЧАС(E9)&gt;=3
</div>
<div class="Content2">
Курсор в ячейку <b>H6</b>. Пишем функцию выводящую скидку:
</div>
<div class="Content2">
=ЕСЛИ((ЧАС(F6)-ЧАС(E6))&gt;=3;150;0)
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-09.png" alt="1" height="193" width="547" class="baget"></div>
<div class="Content2">
Копируем ячейку <b>H6</b>:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-10.png" alt="1" height="193" width="547" class="baget"></div>
<div class="Content2">
выделяем диапазон <b>H7:H10</b>:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-11.png" alt="1" height="193" width="547" class="baget">
</div>
<div class="Content2">
Вставляем:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-12.png" alt="1" height="193" width="547" class="baget">
</div>
<div class="Header3"><b>Функция ГПР</b></div>
<div class="Content2">
Функция ГПР ищет значение внешней таблицы и возвращает как результат значение ячейки в указанной строке того же столбца. Функция ГПР имеет следующий синтаксис:</div>
<div class="Content2">
ГПР(<b>искомое_значене</b>;<b>таблица</b>;<b>номер_строки</b>;[интервальный_просмотр]), где</div>
<div class="Content2">
<b>искомое_значение</b> – это ячейка основной таблицы, а её значение должно совпасть со значениями 1-й строкой внешней таблицы</div>
<div class="Content2"><b>таблица</b> – внешняя таблица, где производится поиск данных. 1-я строка должна быть отсортирована по возрастанию</div>
<div class="Content2"><b>номер_строки</b> – номер строки внешней таблицы из которой берётся результат</div>
<div class="Content2">интервальный_просмотр – логическое значение ИСТИНА или ЛОЖЬ
</div>
<div class="Content2">
Нам нужно найти в 1-й строке внешней таблицы совпадение, которое есть в ячейках основной таблицы, затем выбрать из внешней таблицы значение 2-й строки:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-13.png" alt="1" height="265" width="392" class="baget"></div>
<div class="Content2">
Пример: Выведем в ячейку <b>I6</b>, значение 2-й внешней таблицы, а имя столбца этой таблицы указано в ячейке <b>G6</b>, т.е. в <b>I6</b> должно быть <b>300</b>:
</div>
<ol class="align_justify">
<li>Курсор в ячейку <b>I6</b>, [<b>Shift+F3]</b> &#8212; вызываем команду <b>Вставить функцию</b></li>
<li> В окне <b>Мастер функций</b>, выбираем в списке Категория <b>Ссылки и массивы</b>, функцию <b>ГПР</b> и нажимаем <b>ОК</b>:</li>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-14.png" alt="1" height="375" width="433" class="baget"></div>
<li> Установим аргументы функции и нажимаем <b>ОК</b>:</li>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-15.png" alt="1" height="334" width="603" class="baget"></div>
</ol>
<div class="Content2">
Формула в ячейке <b>I6</b> имеет такую запись:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-16.png" alt="1" height="265" width="392" class="baget"></div>
<div class="Content2">
Копируем ячейку <b>I6</b> и вставляем в диапазон <b>I7:I10</b>, но при этом не забываем, что перед копированием, ссылка в формуле на внешнюю таблицу, должна быть постоянной т.е. абсолютной <b>G$1:I$1</b>:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-17.png" alt="1" height="265" width="392" class="baget"></div>
<div class="Content2">
Клавишей [<b>F2</b>], проверим формулы в ячейках колонки <b>I</b>:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-18.png" alt="1" height="265" width="392" class="baget"></div>
<div class="Content2">
Сумма вычисляется по формуле <b>Время катания ? Стоимость часа &#8212; Скидка + Доплата</b>
</div>
<div class="Content2">сумма для Андреева <b>=(ЧАС(F6)-ЧАС(E6))*I6-H6+D6</b></div>
<div class="Content2">Итоговый вид таблицы:</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-19.png" alt="1" width="768" class="baget"></div>
<div class="Header3"><b>Функция СУММЕСЛИ</b></div>
<div class="Content2">
Если функция <b>СУММ(J6:J10)</b>, выведет общую сумму диапазона <b>J6:J10</b> ячеек, то функция СУММЕСЛИ, суммирует только определённые ячейки. Рассмотрим несколько примеров:
</div>
<div class="Content2"><b>СУММЕСЛИ(J6:J10;”&gt;500”)</b></div>
<div class="Content2"> просуммирует ячейки <b>J6</b>, <b>J8</b> и <b>J9</b></div>
<div class="Content2"> <b>СУММЕСЛИ(G6:G10;”Фристайл”;J6:J10)</b></div>
<div class="Content2">суммирует только те значения из диапазона <b>J6:J10</b>, для которых соответствующие значения из диапазона <b>G6:G10</b> равны Фристайл, т.е просуммируются все фристайлеры:
</div>
<div class="block30x30center">
<table align="center">
<tr>
<td><img src="wp-content/uploads/excel/exel-03-sr-20.png" alt="1" width="373" class="baget"></td>
<td><img src="wp-content/uploads/excel/exel-03-sr-21.png" alt="1" width="373" class="baget"></td>
</tr>
</table>
</div>
<div class="Content2"> Просуммируем теперь всех, кто катался на роликах типа <b>Фитнес</b> и <b>Агрессив</b>:</div>
<div class="Content2">
<b>СУММЕСЛИ(G6:G10;”Фитнес”;J6:J10)</b>
</div>
<div class="Content2">
<b>СУММЕСЛИ(G6:G10;”Агресив”;J6:J10)</b>
</div>
<div class="Header3"><b>Функция СЧЁТЕСЛИ</b></div>
<div class="Content2">
Возвращает количество ячеек в диапазоне которые соответствуют в заданному условию. Примеры:</div>
<div class="Content2"> <b>СЧЁТЕСЛИ(J6:J10;&#187;&gt;400&#8243;)</b></div>
<div class="Content2">выведет количество посетителей заплативших более <b>400</b> рублей, в нашем случае это <b>3</b></div>
<div class="Content2"> <b>СЧЁТЕСЛИ(G6:G10;&#187;Фристайл&#187;)</b></div>
<div class="Content2"> посчитает количество фристайлеров посетивших клуб: </div>
<div class="block30x30center">
<table align="center">
<tr>
<td><img src="wp-content/uploads/excel/exel-03-sr-22.png" alt="1" width="373" class="baget"></td>
<td><img src="wp-content/uploads/excel/exel-03-sr-23.png" alt="1" width="373" class="baget"></td>
</tr>
</table>
</div>
<div class="Header3"><b>Функции СЧИТАТЬПУСТОТЫ, МАКС, МИН, СРЗНАЧ, РАНГ</b></div>
<div class="Content2">Дана таблица посещений бассейна учениками 3-х классов в неделю:</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-24.png" alt="1" height="385" width="394" class="baget"></div>
<div class="Content2">
В ячейках <b>B9</b>, <b>C9</b>, <b>D9</b> с помощью функции СУММ, выведем итоговое количество посещений учеников за неделю по классам:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-25.png" alt="1" height="385" width="394" class="baget"></div>
<div class="Content2">
Функция СЧИТАТЬПУСТОТЫ(диапазон) возвращает количество пустых ячеек в диапазоне. В ячейках <b>B10</b>, <b>C10</b>, <b>D10</b> с помощью функции СЧИТАТЬПУСТОТЫ, выведем количество пропущенных дней по классам:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-26.png" alt="1" height="385" width="394" class="baget"></div>
<div class="Content2">
Функция МАКС, МИН и СРЗНАЧ вычисляют максимальное, минимальное и среднее значение указанного диапазона ячеек. Выведем с помощью этих функций максимальное и минимальное количество посещений учеников из 3-х классов в день, а также среднее значение посещений в неделю:
</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-27.png" alt="1" height="385" width="394" class="baget"></div>
<div class="Content2">
Функция РАНГ вычисляет ранг или рейтинг числа в списке чисел. Она имеет следующий синтаксис
</div>
<div class="Content2">
РАНГ(<b>число</b>; <b>ссылка</b>; [порядок]), где
</div>
<div class="Content2">
<b>число</b> – значение, которому нужно установить рейтинг
</div>
<div class="Content2">
<b>ссылка</b> – список чисел для установки рейтинга
</div>
<div class="Content2">
[порядок] – определяет сортировку рейтинга, 0 по возрастанию и 1 по убыванию
</div>
<div class="Content2">
Пример, ячейки <b>B9</b>, <b>C9</b>, <b>D9</b> содержат список количества учеников посетивших бассейн в неделю, указав любую из этих ячеек, например <b>B9</b>, функция РАНГ выведет порядковый номер этой ячейки из 3-х возможных. Вычислим рейтинг 9-А класса из 3-х классов:
</div>
<ol class="align_justify">
<li>Курсор в ячейку <b>B15</b>, вызываем команду <b>Вставить функцию</b></li>
<div class="block30x30center">
<img src="wp-content/uploads/excel/exel-03-sr-28.png" alt="1" class="baget"> </div>
<li>В окне <b>Мастер функций</b>, выбираем в списке Категория <b>Статистические</b>, и функцию <b>Ранг.РВ</b>, нажимаем <b>ОК</b></li>
<div class="block30x30center">
<img src="wp-content/uploads/excel/exel-03-sr-29.png" alt="1" height="371" width="431" class="baget"> </div>
<li>Установим аргументы функции и нажимаем <b>ОК</b>:</li>
</ol>
<div class="block30x30center">
<img src="wp-content/uploads/excel/exel-03-sr-30.png" alt="1" height="311" width="610" class="baget"> </div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-31.png" alt="1" height="385" width="394" class="baget"></div>
<div class="Content2">
Копируем ячейку <b>B15</b> и вставляем в <b>B16:B17</b> не забываем перед копированием, изменить относительную ссылку на абсолютную вдоль строки <b>$B9:$D9</b>
</div>
<div class="Content2">Результат работы наших вычислений</div>
<div class="block30x30center">
  <img src="wp-content/uploads/excel/exel-03-sr-32.png" alt="1" height="385" width="394" class="baget"></div>
]]></content:encoded>
			<wfw:commentRss>http://kshu.su/?feed=rss2&#038;p=56</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
