Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

В образовательных целях прикольная прога

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> В образовательных целях прикольная прога
Имя
Сообщение << Старые топики   Новые топики >>
В образовательных целях прикольная прога - 2011-09-22 18:14:30.050000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
Прога читает текст из файла и воспроизводит его азбукой Морзе.
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <windows.h>

void play(char[]);

int main()
{
    char txt[99];
    int i=0;
    printf("# Morse code #\n# Don't use punctuation or" " upper case letters.\nText: ");
    fgets(txt, sizeof(txt), stdin);
    while(txt != '\0')
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(txt)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'a': play(".- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'b': play("-… "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'c': play("-.-. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'd': play("-.. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'e': play(". "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'f': play("..-. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'g': play("–. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'h': play("…. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'i': play(".. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'j': play(".— "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'k': play("-.- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'l': play(".-.. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'm': play("– "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'n': play("-. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'o': play("— "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'p': play(".–. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'q': play("–.- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'r': play(".-. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 's': play("… "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 't': play("- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'u': play("..- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'v': play("…- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'w': play(".– "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'x': play("-..- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'y': play("-.– "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 'z': play("–.. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '1': play(".—- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '2': play("..— "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '3': play("…– "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '4': play("….- "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '5': play("….. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '6': play("-…. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '7': play("–… "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '8': play("—.. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '9': play("—-. "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '0': play("—– "); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case ' ': play("/"); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; return 0;
}

void play(char code[]) // Beep
{
&nbsp;&nbsp; int z=0;
&nbsp;&nbsp; while(code[z] != '\0')
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep(150);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(code[z])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '.': printf("."); Beep(900, 150); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '-': printf("-"); Beep(900, 450); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case ' ': printf(" "); Sleep(500); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '/': printf(" "); Sleep(750); break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z++;
&nbsp;&nbsp; }
}
Post #: 1
RE: В образовательных целях прикольная прога - 2011-09-23 12:43:30.823333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
1) нужно использовать тэг [code] для оформления кода
2) не найден файл stdafx.h :)
3) лишний инклюд windows.h
4) прога не читает текст из файла, а читает поток ввода, который по умолчанию идёт от клавиатуры
5) прога поддерживает максимум 98 входных символов (подсказка - не обязательно читать всю строку сразу, можно читать входной поток посимвольно)
6) Чему можно научиться по этому "прикольному", как следует из заголовка темы, коду? Работу с массивами / функциями в языке си объясняют на первых двух лекциях первокурсникам, а винапишные функции Beep и Sleep гуглятся с первого раза.

p.s. какая я кака ^^
Post #: 2
RE: В образовательных целях прикольная прога - 2011-09-23 13:54:32.993333   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
2_SaZ_
удивительно. столько всего наговорил, а то, что прога не работает, не сказал)
[i]switch(txt[i]) { ... i++ } [/i][/i]
про стиль вообще молчу.

а прога (еслиб она была рабочей) прикольна тем, что описывалась в книге "Криптономикон" :) там глав гер знал, что его экран мониторят, и таким способом прочитал файлик с координатами местонахождения золота :) правда выводил сигналы не на бипер, а на led капслока.
так то


пс. ааааа. этот говнофорум просто порезал код))) нет смещения по i относительно txt
Post #: 3
RE: В образовательных целях прикольная прога - 2011-09-23 15:41:50.270000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: vvviperrr
пс. ааааа. этот говнофорум просто порезал код))) нет смещения по i относительно txt

Форум всё сделал правильно: воспринял [i] как тэг курсива. Именно для этих случаев и придумали тэг [code]
Post #: 4
RE: В образовательных целях прикольная прога - 2011-09-23 16:03:11.323333   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
ну запинали ппц…злые вы…уйду я от вас…
п.с. прога рабочая.
Post #: 5
RE: В образовательных целях прикольная прога - 2011-09-23 19:49:16.590000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Не, чего сразу запинали? Это всё - здоровая критика. Если хочешь - можешь на вопросы ответить ))
Post #: 6
RE: В образовательных целях прикольная прога - 2011-09-23 21:54:40.790000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: _SaZ_
4) прога не читает текст из файла, а читает поток ввода, который по умолчанию идёт от клавиатуры

Это как раз очень правильно. Программу, которая читает из stdin легко можно натравить на файл перенаправлением ввода/вывода. При желании, вместо stdin этой программе можно подсунуть pipe и засовывать данные из другого процесса. Если же программа читает из файла, то вот её применимость будет гораздо уже. Точнее, в большинстве ситуаций с этим можно справится, но гораздо сложнее.

И я бы сделал это ещё "хуже". =)
Я бы написал программку типа:char* trans[] = { ['a'] = ".- ", ['b'] = "-... ", ['c'] = "-.-. ", ['d'] = "-.. ", ['e'] = ". ", ['f'] = "..-. ", ['g'] = "--. ", ['h'] = ".... ", ['i'] = ".. ", ['j'] = ".--- ", ['k'] = "-.- ", ['l'] = ".-.. ", ['m'] = "-- ", ['n'] = "-. ", ['o'] = "--- ", ['p'] = ".--. ", ['q'] = "--.- ", ['r'] = ".-. ", ['s'] = "... ", ['t'] = "- ", ['u'] = "..- ", ['v'] = "...- ", ['w'] = ".-- ", ['x'] = "-..- ", ['y'] = "-.-- ", ['z'] = "--.. ", ['1'] = ".---- ", ['2'] = "..--- ", ['3'] = "...-- ", ['4'] = "....- ", ['5'] = "..... ", ['6'] = "-.... ", ['7'] = "--... ", ['8'] = "---.. ", ['9'] = "----. ", ['0'] = "----- ", [' '] = "/" }; int main() { int ch; while((ch = getc(stdin)) != EOF) { if(ch &gt; 0 && ch &lt; 256 && trans[ch]) printf("%s", trans[ch]); else fprintf(stderr, "Unknown char at input (#%d)\n", ch); } return 0; }Эта программка бы просто переводила бы ASCII в последовательность символов ".-/ ". И я б написал вторую программку, которая бы пикала:int main() { int ch; while((ch = getc(stdin)) != EOF) { switch(ch) { case '.': Beep(900, 150); break; case '-': Beep(900, 450); break; case ' ': Sleep(500); break; case '/': Sleep(750); break; default: fprintf(stderr, "Unknown char at input (#%d)", ch); break; } } return 0; }
И уже эти две программки, легко можно было бы сочетать в командной строке в любом формате. Можно было бы использовать только первую, и получать графическое представление морзе. Можно было бы использовать совместно и получать только писки, или и писки и графику. Можно было бы использовать только вторую и засовывая в неё морзе, получать на выходе писки. Самый что ни на есть труЪ юникс-вей.
Post #: 7
RE: В образовательных целях прикольная прога - 2011-09-24 16:20:57.410000   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000

quote:

ORIGINAL: _SaZ_
Форум всё сделал правильно: воспринял [i] как тэг курсива. Именно для этих случаев и придумали тэг [code]


в нормальных форумах проверяется парность тегов. нет пары - значит просто текст. вывод тот же - говнофорум
Post #: 8
RE: В образовательных целях прикольная прога - 2011-09-27 20:07:38.800000   
antiporno

Сообщений: 79
Оценки: 0
Присоединился: 2010-12-24 14:22:00.863333
Мне понравилось. я ваше незнал что в программировании есть азбука морзе))
Post #: 9
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> В образовательных целях прикольная прога







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.