switch menu что это

Электроника для всех

Блог о электронике

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

Источник

Информ портал о технике и не только