Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Pashqa121
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 29
1

Генерировать ноту МИ пока не будет нажата клавиша Y на клавиатуре

19.06.2015, 18:25. Просмотров 589. Ответов 7
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <dos.h>
main() {
  unsigned int gamma[] =  /* Коэффициенты деления для нот */
    { 912,813,724,678,609,542,483 };
  char *gnames[] =        /* Названия нот */
    { "до","ре","ми","фа","соль","ля","си" };
  int i;
  for(i=0; i<7; i++) {  /* Перебор нот */
    printf("%s ",gnames[i]);
    tone(gamma[i]); /* Звучание ноты */
    delay(700);     /* Задержка на звучание 700 мсек */
    silence();      /* Выключение звука */
    delay(50);      /* Пауза 50 мсек */
    }
  printf("\n");
  }
/*==== Звучание ноты. Аргумент a - коэфф.деления ====*/
tone(unsigned int a) {
  outportb(0x43,0xb6);     /* Запись управляющего байта
                                      (выбор канала 2) */
  outportb(0x42,a&0x00ff); /* Младший байт счетчика
                   записывается в порт данных канала 2 */
  outportb(0x42,a>>8);     /* Старший байт счетчика */
  /* Включение динамика. Читается содержимое порта, в него
     записываются 1 в разряды 0, 1, затем пишется в порт */
  outportb(0x61,inportb(0x61)|0x03);
  }
/*==== Выключение звука ====*/
silence() {
  /* записываются 0 в разряды 0, 1 порта 0x61 */
  outportb(0x61,inportb(0x61)&0xfc);
  }
4.1 Вариант 1. Генерировать ноту МИ пока не будет нажата клавиша Y на клавиатуре.
4.2 Вариант 2. Генерировать ноты ДО, СИ, пока не будет нажата любая клавиша.
4.3 Вариант 3. Используя PPI генерировать звук.
4.4 Вариант 4. Используя таймер генерировать ноты ДО, РЕ, МИ, пока не будет
нажата любая клавиша.
4.5 Вариант 5. При нажатии клавиши Y начать генерировать звук, до тех пор, пока не
будет нажата клавиша N.
4.6 Вариант 6. Генерировать ноты ФА, СОЛЬ, пока не будет нажата любая клавиша.
4.7 Вариант 7. Генерировать звук, изменяя частоту и длительность звучания, пока не
будет нажата любая клавиша.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2015, 18:25
Ответы с готовыми решениями:

В цикле проверить нажата ли была клавиша 8
Необходимо в цикле проверить нажата ли была клавиша 8, и что бы вывод сообщения...

Анимация движения линии, пока не будет нажата клавиша
Uses GraphABC,crt; Var i:integer; Begin Floodfill(10,10,clyellow);...

Выполнение цикла до тех пор, пока не будет нажата определенная клавиша
Доброе время суток, люди добрые! Начал заниматься С++ не так давно, поэтому...

Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша <<ESC>>
Задание: Вводить с клавиатуры числа до тех пор, пока не будет нажата клавиша...

Пока нажата клавиша
Приветствую всех. Просветите пожалуйста как сделать чтобы событие происходило...

7
Ethereal
4857 / 1877 / 245
Регистрация: 17.02.2013
Сообщений: 2,792
19.06.2015, 23:48 2
Цитата Сообщение от Pashqa121 Посмотреть сообщение
tone(unsigned int a) {
void tone(unsigned int a) {

Добавлено через 17 секунд
Цитата Сообщение от Pashqa121 Посмотреть сообщение
silence() {
void silence() {
0
Pashqa121
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 29
23.06.2015, 18:34  [ТС] 3
Цитата Сообщение от Ethereal Посмотреть сообщение
void silence() {
всё равно не работает, те же ошибки.
0
Ethereal
4857 / 1877 / 245
Регистрация: 17.02.2013
Сообщений: 2,792
24.06.2015, 04:20 4
Те-же, это какие ?

Добавлено через 8 минут
Специально взял и проверил. Даже в том варианте, что ты выложил
Borland C++ 3.1 твою программу компилирует. С предупреждениями,
но компилирует. Вот лог компиляции :
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
D:\BC31\BIN>bcc -ID:\BC31\INCLUDE -LD:\BC31\LIB b.c 
Borland C++  Version 3.1 Copyright (c) 1992 Borland International
b.c:
Warning b.c 9: Call to function 'printf' with no prototype in function main
Warning b.c 10: Call to function 'tone' with no prototype in function main
Warning b.c 12: Call to function 'silence' with no prototype in function main
Warning b.c 15: Call to function 'printf' with no prototype in function main
Warning b.c 16: Function should return a value in function main
Warning b.c 27: Function should return a value in function tone
Warning b.c 32: Function should return a value in function silence
Turbo Link  Version 5.1 Copyright (c) 1992 Borland International
 
 
        Available memory 4187016
А после компиляции, если запустить, то программа работает.
Она действительно воспроизводит 7 восходящих нот.
0
Pashqa121
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 29
24.06.2015, 09:33  [ТС] 5
Цитата Сообщение от Ethereal Посмотреть сообщение
А после компиляции, если запустить, то программа работает.
Она действительно воспроизводит 7 восходящих нот.
Вот скрин, посмотри:
Генерировать ноту МИ пока не будет нажата клавиша Y на клавиатуре
0
Ethereal
4857 / 1877 / 245
Регистрация: 17.02.2013
Сообщений: 2,792
24.06.2015, 17:17 6
Я спрашиваю какие ошибки, а ты кидаешь скрин на котором
- надписей почти не разобрать
- не различить ошибки и предупреждения (warning)
Предупреждения меня не интересуют. Интересует первая ошибка.

И вообще ты чем компилируешь-то ?

Добавлено через 5 минут
Ведь было сказано-же
Цитата Сообщение от Ethereal Посмотреть сообщение
Borland C++ 3.1 твою программу компилирует
Добавлено через 12 минут
Цитата Сообщение от Pashqa121 Посмотреть сообщение
#include <dos.h>
Вот ты это видел ?
И имея такую строчку ты компилируешь компилятором для сборки Виндозных 32-разрядных приложений ?
Программа-то под MS-DOS написана. Значит и надо брать компилятор, который собирает 16-разрядные
приложения под MS-DOS. Borland C++ 3.1 твой выбор для данного случая.
И как соберешь EXE-шник не пытайся запустить его под сраными 7-ми и 8-ми виндами.
Максимум Win9x или WinXP-32. Я как раз в WinXP-32 твою программу успешно запустил.
Ну или MS-DOS с флешечки грузани. А не хочешь - так с DOS-BOX мучайся.

Добавлено через 11 минут
Кстати, функции delay inportb outportb в твоей программе не расписаны. Значит они должны подключаться из внешнего объектного файла. В стандартной библиотеке Borland C++ 3.1 эти функции есть и в файле dos.h их прототипы есть. А вот у DevC++ в файле dos.h прототипов этих функций нет. Значит и в библиотеках нет.
Отсюда вывод - твоя программа однозначно была написана на и для Borland C++ 3.x
0
Pashqa121
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 29
30.06.2015, 18:46  [ТС] 7
Я попробовал через борланд запустить, выдал ошибки компиляции и ноты не воспроизвел. в чем трабл?
0
Байт
Эксперт C
19226 / 12351 / 2607
Регистрация: 24.12.2010
Сообщений: 25,424
09.11.2015, 15:10 8
Получил в личку
Цитата Сообщение от Pashqa121
Здравствуйте, не могли бы вы мне помочь с двумя задачами на с++?
В правилах сказано 4.6
Обсуждение вопросов - только в теме на форуме. Приглашения к обсуждению еще где-либо (в том числе и с помощью системы личных сообщений) запрещены, за исключением коммерческих разделов.
От себя могу добавить, что такие сообщения вызывают только раздражение и значительно уменьшают ваши шансы получить ответ.
0
09.11.2015, 15:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2015, 15:10

Движение пока нажата клавиша Delphi 7
Подскажите пожалуста как сделать в delphi 7 движение объекта пока нажата...

Реле замкнуто пока нажата клавиша 'd' на ПК
Народ ! Есть такая задача, управлять платой релюшек с помощью комповой...

Работа цикла, пока не нажата кнопка на клавиатуре
Ребята, помогите плиз! Нужно соорудить цикл, который работает до тех пор, пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru