Электроника для всех
Блог о электронике
1.4.5. Оператор switch
Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:
Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось выше.
Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора smitch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.
Так как константное выражение вычисляется во время трансляции, оно не может содержать переменные или вызовы функций. Обычно в качестве константного выражения используются целые или символьные константы.
Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default.
Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.
Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.
Схема выполнения оператора switch следующая:
— если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.
Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.
Рассмотрим ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, переписанной теперь с использованием оператора switch.
Использование оператора break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch, путем передачи управления оператору, следующему за switch.
Отметим, что в теле оператора switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые константные выражения.
1.4.6. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
C Урок 10. Оператор switch
Очень часто при составлении исходного кода будущей программы мы сталкиваемся с ситуацией, когда дальнейший ход нашей программы зависит от конкретного значения какой-то переменной либо выражения, причём когда выбор таких значений, мягко говоря, немаленький. Мы, конечно же в данном случае можем воспользоваться условными конструкциями if, else, else if, но в данном случае это будет не совсем удобно и читабельно. Для этой ситуации существует такая конструкция, чтобы было очевидно, что мы выбираем какие-то конкретные варианты значений одной переменной или одного выражения.
И таким оператором и служит switch, который также можно отнести к оператору ветвления. Также данный оператор очень часто называют оператором вариантов. Ещё в народе его зовут переключателем в соответствии с его переводом на русский.
switch – оператор, который сравнивает последовательно значение переменной, находящейся в скобках со всеми вариантами значений, находящимися после каждого ключевого слова case. При совпадении данных значений выполняется код, следующий за case. Затем, если встретится ключевое слово break либо закрывающая фигурная скобка, произойдет выход из конструкции switch. Если со значением переменной не совпадет ни одно из значений, выполнится код после необязательной инструкции default
Оператор break в ветвях case является необязательным. Если его не будет в какой-то из ветвей, то выхода из тела оператора не произойдёт и код продолжит выполнение дальше внутри тела. Причём, если дальше встретится следующая ветвь case, то её код выполнится независимо от сравниваемого значения. Приём без break используется как правило для того, чтобы выполнить ту или иную ветвь в зависимости не от одного, а от нескольких вариантов значения переменной (выражения), находящейся(гося) в скобках. Выглядеть такая ветвь будет примерно вот так
Ветвь default, как было указано выше, также необязательна и при её отсутствии в случае несовпадения значения переменной или выражения ни с одним значением в вариантах ничего не делается, то есть ни один участок кода, находящийся в теле оператора switch, не будет выполнен.
Также нелишним будет заметить что ветви case и default можно располагать в любом порядке, хотя мы привыкли, что ветвь default, которая, кстати быть должна только одна, всегда в конструкции switch расположена в самом низу тела.
Если вы вдруг что-то не поняли или недопоняли из объяснения выше, то, надеюсь, смысл оператора switch будет понятен из практической части. Также данным оператором в будущих уроках мы будем очень часто пользоваться и вы непременно к нему привыкнете.
И давайте теперь перейдём к нашей практической части. Я постараюсь дать такой простой пример, который будет понятен каждому. Пусть он не пригодится в будущем, но сейчас самое важное для нас то, чтобы мы уяснили, как именно работает конструкция switch.
Создадим новый проект из проекта прошлого занятия с именем MYPROG09 и присвоим ему имя MYPROG10.
Откроем файл main.c и в функции main(), как обычно, удалим весь код тела кроме возврата нуля, останется от него вот это
int main()
return 0 ; //Return an integer from a function
Добавим код, в котором программа попросит пользователя ввести целое число из предложенных вариантов. Затем мы введённое пользователем число с помощью оператора switch, с которым мы познакомились выше, обработаем соответствующим образом. В свою очередь, ввод числа и конструкцию switch мы также обернём в бесконечный цикл, чтобы нас после каждого ввода числа не выбрасывало из программы
Полное руководство по switch-выражениям в Java 12
В этом руководстве я расскажу Вам обо всем, что необходимо знать о switch-выражениях в Java 12.
Предварительный обзор
Это означает, что данная управляющая конструкция может быть изменена в будущих версиях спецификации языка.
Так что имейте ввиду, что switch, как выражение, не имеет на данный момент окончательного варианта синтаксиса в Java 12.
Если у вас возникло желание поиграть со всем этим самим, то вы можете посетить мой демо-проект Java X на гитхабе.
Проблема с операторами в switch
Прежде, чем мы перейдем к обзору нововведений в switch, давайте быстро оценим одну ситуацию. Допустим, мы столкнулись с «ужасным» тернарным булеаном и хотим преобразовать его в обычный булеан. Вот один из способов сделать это:
Согласитесь, что это очень неудобно. Как и многие другие варианты switch, встречающиеся в «природе», представленный выше пример просто вычисляет значение переменной и присваивает его, но реализация обходная (объявляем идентификатор result и используем его позже), повторяющаяся (мои break ‘и всегда результат copy-pasta) и подвержена ошибкам (забыл еще одну ветку? Ой!). Тут явно есть, что улучшить.
Давайте попробуем решить эти проблемы, поместив switch в отдельный метод:
Так намного лучше: отсутствует фиктивная переменная, нет break ‘ов, загромождающих код и сообщений компилятора об отсутствии default (даже если в этом нет необходимости, как в данном случае).
Но, если подумать, то мы не обязаны создавать методы только для того, чтобы обойти неуклюжую особенность языка. И это даже без учёта, что такой рефакторинг не всегда возможен. Нет, нам нужно решение получше!
Представляем switch-выражения!
Как я показал в начале статьи, начиная с Java 12 и выше, вы можете решить вышеуказанную проблему следующим образом:
Сразу возникают две мысли:
Прежде чем углубляться в детали новых возможностей switch, в начале я расскажу об этих двух основных аспектах.
Выражение или оператор
Возможно, вы удивлены, что switch теперь является выражением. А чем же он был до этого?
До Java 12 switch был оператором — императивной конструкцией, регулирующей поток управления.
Думайте о различиях старой и новой версии switch, как о разнице между if и тернарным оператором. Они оба проверяют логическое условие и выполняют ветвление в зависимости от его результата.
Разница в том, что if просто выполняет соответствующий блок, тогда как тернарный оператор возвращает какой-то результат:
Теперь же всё выражение оператора switch оценивается (выбирается для выполнения соответствующая ветка), и результат вычислений может быть присвоен переменной.
Еще одним отличием между выражением и оператором является то, что выражение switch, поскольку оно является частью оператора, должно заканчиваться точкой с запятой, в отличие от классического оператора switch.
Стрелка или двоеточие
В вводном примере использовался новый синтаксис в лямбда-стиле со стрелкой между меткой и выполняющейся частью. Важно понимать, что для этого не обязательно использовать switch в качестве выражения. Фактически, пример ниже эквивалентен приведенному в начале статьи коду:
Обратите внимание, что теперь вы можете использовать break со значением! Это идеально согласуется с инструкциями switch старого стиля, которые используют break без какого-либо значения. Так в каком случае стрелка означает выражение вместо оператора, для чего она здесь? Просто хипстерский синтаксис?
В свою очередь, использование стрелки означает, что будет выполнен только блок справа от нее. И никакого «проваливания».
Подробнее об эволюции switch
Несколько меток на case
До сих пор каждый case содержал только одну метку. Но теперь все изменилось — один case может соответствовать нескольким меткам:
Поведение должно быть очевидным: TRUE и FALSE приводят к одному и тому же результату — вычисляется выражение «sane».
Типы за пределами Enum
Подробнее о стрелке
Давайте рассмотрим два свойства, характерных для стрелочной формы записи разделителя:
Отсутствие сквозного перехода к следующему case
Вот, что говорится в JEP 325 об этом:
Текущий дизайн оператора switch в Java тесно связан с такими языками, как C и C++ и по умолчанию поддерживает сквозную семантику. Хотя этот традиционный способ управления часто полезен для написания низкоуровневого кода (такого как парсеры для двоичного кодирования), поскольку switch используется в коде более высокого уровня, ошибки такого подхода начинают перевешивать его гибкость.
Я полностью согласен и приветствую возможность использовать switch без поведения по умолчанию:
Важно усвоить, что это не имеет никакого отношения к тому, используете ли вы switch в качестве выражения или оператора. Решающим фактором тут является стрелка против двоеточия.
Блоки операторов
Как и в случае с лямбдами, стрелка может указывать либо на один оператор (как выше), либо на блок, выделенный фигурными скобками:
Блоки, которые приходится создавать для многострочных операторов имеют дополнительное преимущество (что не требуется при применении двоеточия), которое заключается в том, что для использования одинаковых имен переменных в разных ветках, switch не требует специальной обработки.
Подробнее о выражениях switch
И последнее, но не менее важное — особенности использования switch в качестве выражения:
Обратите внимание, что при этом не имеет значения, какая форма используется!
Множественные выражения
С помощью switch-выражений тип определяется по взаимодействию между тем, где используется switch и типами его веток. Если switch-выражение назначается типизированной переменной, передается в качестве аргумента или иным образом используется в контексте, где известен точный тип (это называется целевым типом), то все его ветки должны соответствовать этому типу. Вот что мы делали до сих пор:
То же самое происходит и здесь:
А что произойдет сейчас?
(Про использование типа var читайте в нашей прошлой статье 26 рекомендаций по использованию типа var в Java — примечание переводчика)
Если целевой тип неизвестен, из-за того, что мы используем var, тип вычисляется путем нахождения наиболее конкретного супертипа из типов, создаваемых ветками.
Ранний возврат
Следствием различия между выражением и оператором switch является то, что вы можете использовать return для выхода из оператора switch :
… вы не можете использовать return внутри выражения …
Это имеет смысл независимо от того, используете ли вы стрелку или двоеточие.
Покрытие всех вариантов
Чтобы предотвратить такой исход, компилятор может помочь вам. Для switch-выражений компилятор будет настаивать, чтобы все возможные варианты были охвачены. Давайте посмотрим на пример, который может привести к ошибке компиляции:
Да, компилятор наконец-то сможет определить, охватываются ли все значения enum (исчерпывают ли все варианты), и не установить бесполезные значения по умолчанию! Давайте посидим минуту в безмолвной благодарности.
Размышление
Из статьи мы узнали, что Java 12 превращает switch в выражение, наделяя его новыми возможностями:
Затем, предполагая, что switch остается таким, каким он является в данный момент, я думаю, что стрелочная форма станет новым вариантом по умолчанию. Без сквозного перехода к следующему case и с лаконичными лямбда-выражениями (это очень естественно иметь case и один оператор в одной строке) switch выглядит намного компактнее и не ухудшает читаемость кода. Я уверен, что буду использовать только двоеточие, если у меня возникнет необходимость в сквозном проходе.
Что вы думаете? Довольны тем, как все сложилось?
Switch menu что это
Разделы
Реализация меню на switch конструкции.
В моем понимании меню – это часть интерфейса осуществляющего взаимодействие между пользователем и устройством. В обязанности этого интерфейса входит обработка нажатий кнопок, вывод информации на дисплей и выполнение различных действий инициированных пользователем. Меню имеет графическое отображение, которое представляет из себя одноуровневую или многоуровневую иерархическую структуру и часть этой структуры обычно видна на дисплее.
Вариант реализации меню, который я здесь предлагаю, основан на switch конструкции. В языке Си switch – это один из операторов ветвления. Он позволяет осуществлять выбор между несколькими заданными альтернативами. Поскольку ноги Си растут из ассемблера, в ассемблере можно реализовать точно такой же оператор, ну а точнее конструкцию. Пример ассемблерного варианта switch приведен ниже.
Switch:
Case1:
cpi r16, 1
brne Case2
rcall func1
ret
Case2:
cpi r16, 2
brne Case3
rcall func2
ret
Case3:
cpi r16, 3
brne Default
rcall func3
ret
Default:
rcall func4
ret
//@0 – константа с которой происходит сравнение,
//@1 – подпрограмма вызываемая в данной ветви
.MACRO Case
cpi r16, @0
brne ExitCase
rcall @1
ret
ExitCase:
.ENDMACRO
Case 1, func1
Case 2, func2
Case 3, func3
Default:
rcall func4
ret
……
Навигация по меню и запуск каких-то действий в микроконтроллерном девайсе осуществляется с помощью кнопок. Поэтому программа микроконтроллера имеет подпрограммы обрабатывающие их нажатия (обработчики). Собственно на switch конструкции и построен обработчик нажатия одной кнопки.
Проще всего разобраться в его работе на примере. Допустим, у нас есть одноуровневое меню из трех пунктов, которые имеют нумерацию 1, 2, 3. Есть кнопка Up, нажатие которой вызывает перемещение вверх по пунктам меню. Вот как будет выглядеть обработчик этой кнопки.
.def CurrentState = r16
.equ pCurrentState = 0x60
HandlerUpButton:
lds CurrentState, pCurrentState
Case1:
cpi CurrentState, 1
brne Case2
rcall func1
ldi CurrentState, 1
rjmp ChangeState
Case2:
cpi CurrentState, 2
brne Case3
rcall func2
ldi CurrentState, 1
rjmp ChangeState
Case3:
cpi CurrentState, 3
brne ExitHandler
rcall func3
ldi CurrentState, 2
rjmp ChangeState
ExitHandler:
ret
ChangeState:
sts pCurrentState, CurrentState
ret
pCurrentState – это адрес в оперативной памяти микроконтроллера. По этому адресу хранится номер пункта меню, в котором мы находимся в данный момент. В начале обработчика микроконтроллер считывает это значение и записывает его в переменную CurrentState. Далее начинается последовательный обход switch конструкции, каждая ветвь которой выполняет обработку нажатия кнопки Up в конкретном пункте меню. Как только микроконтроллер находит нужную ветвь, он вызывает подпрограмму. Потом записывает в переменную CurrentState номер пункта меню, в который мы должны перейти после завершения работы обработчика, переходит на метку ChangeState и сохраняет значение CurrentState в ОЗУ. Если микроконтроллер не найдет нужную ветвь, то он просто выйдет из подпрограммы HandlerUpButton.
А вот какая логика работы будет у меню. Если мы находимся в первом пункте – нажатие кнопки Up вызывает выполнение подпрограммы func1, но не вызывает перехода. Если мы находимся во втором пункте меню – нажатие Up вызывает переход в первый пункт и вызывает выполнение подпрограммы func2. И наконец, если мы находимся в третьем пункте – нажатие Up вызывает переход во второй пункт меню и выполнение подпрограммы func3.
Вообще запись обработчика в таком виде довольно громоздка и не наглядна. Исправить положение можно с помощью макроса.
.def CurrentState = r16
.equ pCurrentState = 0x60
.MACRO Case
cpi CurrentState, @0
brne ExitCase
rcall @2
ldi CurrentState, @1
rjmp ChangeState
ExitCase:
.ENDMACRO
Case – макрос одной ветви конструкции switch, где @0 – номер пункта меню, @1 – константа задающая переход, @2 – подпрограмма
Вот как будет выглядеть обработчик кнопки Up с использованием макросов.
HandlerUpButton:
lds CurrentState, pCurrentState
Case 1, 1, func1
Case 2, 1, func2
Case 3, 2, func3
ret
ChangeState:
sts pCurrentState, CurrentState
ret
.def tmp = r16
.equ pButtonBuf= 0x61
Main:
//проверяем кнопочный буфер
lds tmp, pButtonBuf
cpi tmp, 0
breq Main
cpi tmp, 5
brsh ClearBufButtons
//вычисляем адрес
//и прыгаем на него
dec tmp
lsl tmp
ldi ZL, Low(CheckButtons)
ldi ZH, High (CheckButtons)
add ZL, tmp
ijmp
CheckButtons:
rcall HandlerUpButton
rjmp ClearBufButtons
rcall HandlerDownButton
rjmp ClearBufButtons
rcall HandlerEnterButton
rjmp ClearBufButtons
rcall HandlerCancelButton
//rjmp ClearBufButtons
//очищаем кнопочный буфер
//возвращаемся на Main
ClearBufButtons:
clr tmp
sts pButtonBuf, tmp
rjmp main
Действую от обратного, мы разобрали идеологию реализации меню на switch конструкции. Не спрашивайте, почему я излагал материал именно так – я и сам не знаю. Просто в таком порядке мысли выливались на бумагу.
Теперь можно собрать все вышеизложенное воедино в виде блок схемы.
Горячие клавиши для входа в меню BIOS, Boot Menu, восстановления из скрытого раздела

При установке Windows (например), очень часто необходимо выбрать загрузочный носитель, отличный от жесткого диска. Сделать это можно двумя путями:
Ч тобы войти в BIOS (вызвать Boot Menu) в большинстве случаев используется клавиши: F2, Del, Esc, F12 (в зависимости от производителя устройства). Кнопку нажимать нужно сразу же после включения компьютера (можно несколько раз, чтобы не пропустить нужный момент.
Кстати, если приглядеться на первый экран, который виден сразу после включения компьютера, то на нем часто пишут кнопку для входа в нужные настройки (вызова меню). Пример на скрине ниже. 👇
👉 Важно!
Войти в UEFI (BIOS) можно из интерфейса Windows 11, 10, 8 (без использования спец. клавиш F2, Del и др.)!
Справочная: «горячие» клавиши
Модель мат. платы (ноутбука) и пр.
Чтобы пользоваться таблицами ниже — Вам необходимо точно знать какая у вас материнская плата (модель ноутбука). Узнать это можно несколькими путями, приведу самые быстрые:
Speccy
Простая бесплатная программа, которая расскажет о вашем железе довольно много. Например, можно узнать информацию о: процессоре (CPU), оперативной памяти (Ram), материнской плате (Motherboard), видеокарте (Graphics), накопителях HDD, SSD (Storage) и пр.
Кроме этого, можно узнать и контролировать в режиме онлайн температуру основных компонентов: жесткого диска, видеокарты, процессора.
Скриншот работы данной утилиты показан на рис. 2. 👇
Таблица №1: для компьютеров (по производителю мат. платы)
| Материнская плата | Версия BIOS | Горячая клавиша | Какое меню будет открыто |
|---|---|---|---|
| Acer | Del | Enter Setup | |
| F12 | Boot Menu | ||
| ASRock | AMI | F2 or DEL | run Setup |
| F6 | Instant Flash | ||
| F11 | Boot Menu | ||
| TAB | switch Screen | ||
| Asus | Phoenix-Award | DEL | BIOS Setup |
| TAB | Display BIOS POST Message | ||
| F8 | Boot Menu | ||
| Alt + F2 | Asus EZ Flash 2 | ||
| F4 | Asus Core Unlocker | ||
| BioStar | Phoenix-Award | F8 | Enable System Configuration |
| F9 | Select Booting Device after POST | ||
| DEL | Enter SETUP | ||
| ChainTech | Award | DEL | Enter SETUP |
| ALT+F2 | Enter AWDFLASH | ||
| ECS (EliteGrour) | AMI | DEL | Enter SETUP |
| F11 | BBS POPUP | ||
| FoxConn (WinFast) | TAB | POST Screen | |
| DEL | SETUP | ||
| ESC | Boot Menu | ||
| GigaByte | Award | ESC | Skip memory test |
| DEL | Enter SETUP/Q-Flash | ||
| F9 | Xpress Recovery Xpress Recovery 2 | ||
| F12 | Boot Menu | ||
| Intel | AMI | F2 | Enter SETUP |
Таблица №2: для ноутбуков (BIOS + Boot Menu, и пр.)
Примечание : на современных ноутбуках также работает комбинация клавиш в Windows: зажать кнопку SHIFT + выбрать мышкой кнопку перезагрузки.
Boot Menu представляет из себя небольшое окно, в котором при помощи мышки (стрелок на клавиатуре) вы сможете выбрать устройство, с которого произвести загрузку. Пример такого меню показан на рис. 3. 👇
Рис. 3. Классическое Boot Menu (Ноутбук Toshiba)
Таблица №2
| Производитель ноутбука | Версия BIOS | Горячая клавиша | Функция / вызов меню |
|---|---|---|---|
| Acer (инструкция) | Phoenix | F2 | Enter Setup |
| F12 | Boot Menu (Change Boot Device,Multi Boot Selection Menu) | ||
| Alt+F10 | D2D Recovery (disk-to-disk system recovery) | ||
| Asus (инструкция) | AMI | F2 | Enter Setup |
| ESC | Popup Menu | ||
| F4 | Easy Flash | ||
| Phoenix-Award | DEL | BIOS Setup | |
| F8 | Boot Menu | ||
| Benq | Phoenix | F2 | BIOS Setup |
| Dell [инструкция] | Phoenix,Aptio | F2 | Setup |
| F12 | Boot Menu | ||
| Digma | ESC (нажимать лучше до вкл. устройства) | BIOS Setup | |
| eMachines (Acer) | Phoenix | F12 | Boot Menu |
| Fujitsu Siemens | AMI | F2 | BIOS Setup |
| F12 | Boot Menu | ||
| Gateway (Acer) | Phoenix | Click mouse or Enter | Menu |
| F2 | BIOS Settings | ||
| F10 | Boot Menu | ||
| F12 | PXE Boot | ||
| Irbis | F2 (ESC) | BIOS Settings | |
| HP (Hewlett-Packard)/ Compaq [инструкция] | Insyde | ESC | Startup Menu |
| F1 | System Information | ||
| F2 | System Diagnostics | ||
| F9 | Boot Device Options | ||
| F10 | BIOS Setup | ||
| F11 | System Recovery | ||
| Enter | Continue Startup | ||
| HONOR | F2 (лучше зажать до вкл. устройства) | BIOS Setup | |
| HUAWEI | F2 | BIOS Setup | |
| HUAWEI MateBook | Кнопка питания и кнопка увел. громкости. | BIOS Setup | |
| Next | F1 | Вызов Boot-Menu | |
| F2 | Настройка BIOS | ||
| Lenovo (IBM) [инструкция] | Phoenix SecureCore Tiano | F2 | Setup |
| F12 | MultiBoot Menu | ||
| Клавиша Recovery на корпусе | MultiBoot Menu | ||
| LG (Gram) | Phoenix | F2 | BIOS |
| MSI (Micro Star) | *** | DEL | Setup |
| F11 | Boot Menu | ||
| TAB | Show POST screen | ||
| F3 | Recovery | ||
| Packard Bell (Acer) | Phoenix | F2 | Setup |
| F12 | Boot Menu | ||
| PRESTIGIO | AMI | ESC (нажимать перед включением) | BIOS |
| Toshiba | Phoenix | Esc,F1,F2 | Enter Setup |
| Toshiba Satellite A300 | F12 | Bios |
Таблица №3: восстановление из скрытого раздела (для ноутбуков)
В большинстве современных ноутбуков встроен специальный скрытый раздел с возможностью восстановления ОС Windows с помощью «пары» клавиш (нет необходимости подготавливать загрузочную флешку, скачивать ISO образы с Windows и пр.).
Примечание : при восстановлении информации, системный диск «C:\» часто форматируется и вся информация с него удаляется. Сделайте заранее копию важных данных с него.
Таблица №3
| Производитель ноутбука | Сочетание кнопок | Примечание |
|---|---|---|
| Acer | Alt+F10 | Сначала необходимо войти в Bios ноутбука, и включить функцию D2D Recovery. В системе восстановления, по умолчанию, установлен пароль: 000000 или AIM1R8. |
| Asus | F9 | |
| Dell Inspiron | Ctrl + F11 | |
| Fujitsu Siemens | F8 | |
| HP | F10, F11 | |
| LG | F11 | |
| Lenovo ThinkPad | F11 | |
| MSI | F3 | |
| Packard Bell | F10 | |
| RoverBook | Alt | |
| Samsung | F4 | |
| Sony VAIO | F10 | |
| Toshiba | F8, F11 |









