LINUX.ORG.RU

Правильно ли сделал printf...?

 


0

1

Всем добра...! Решил попробовать себя в программировании. Естественно с нуля. Пробовал питон, не совсем понял его, скорее всего из-за собственной лени и желанием скорее залипнуть в танках, чем что-то учить. Пробовал с++, такая же беда. Но вот наткнулся на некого Гену ANTG ,который учит простому «С», чувак разъясняет для конкретных нубов, при чём доходчиво. В общем стал что-то понимать. Решил самостоятельно, по его урокам написать банальное Hello world...! но так, что бы буквы выводились из таблицы символов ASCII. Учитывая что каждый программист, глядя на чужой код хватается за голову с вопросом «ну кто же так пишет», хотелось бы узнать мнение гуру, правильно ли я указал аргументы в printf -> код тут <-. Ну и конечно же хотелось бы совета, какие обучающие уроки по «С» можно ещё посмотреть для развития.


Толсто. Реклама. Говнокод. Тролль.

int64
()

Кстати, а ты знаешь что если к большой букве A прибавить 32, то она станет маленькой? Либо можно превратить любую большую букву в маленькую заменив один бит, как думаешь какой?

u0atgKIRznY5
()
Ответ на: комментарий от u0atgKIRznY5

можно превратить любую большую букву в маленькую заменив один бит, как думаешь какой?

Не знаю...

Shprot
() автор топика
Ответ на: комментарий от Shprot

Посмотри на код.

#include <stdio.h>

int main ( )
{
        for ( int i = 0, bit = 64; i < 7; i++ ) {
                printf ( "%c", ( bit & 'A' ) ? '1' : '0');
                bit >>= 1;
        }
        puts ( "" );
        for ( int i = 0, bit = 64; i < 7; i++ ) {
                printf ( "%c", ( bit & 'a' ) ? '1' : '0');
                bit >>= 1;
        }
        puts ( "" );
}
Видишь какой вывод
1000001
1100001
Видишь? Если добавить шестой бит, то получиться маленькая буква 'a', тоесть если добавить 32. Ведь буквы в числах. Здесь также видно что большая буква это 41 hex, а маленькая это 61 hex : hex это шестнадцатеричное число.

u0atgKIRznY5
()
Ответ на: комментарий от Shprot

Я о том, что сама идея так делать - дурацкая. Таблица символов давно изобретена, не надо там велосипедить. Ты лучше про конечные автоматы почитай, больше толку будет.

peregrine ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Для меня это ещё пока тёмный лес. Я не знаю что такое puts и то, что ты вывел в printf я вообще не понял. Есть какая-нибудь толковая литература или видюхи по этой теме...?

Shprot
() автор топика
Ответ на: комментарий от Shprot

литература или видюхи по этой теме

Си требует терпения и усердия в изучении. Почитай Рика Эстли, посмотри видеоуроки. Не пиши сюда, пока не созреешь для грамотных вопросов.

anonymous
()

Пробовал питон, не совсем понял его, скорее всего из-за собственной лени и желанием скорее залипнуть в танках, чем что-то учить.

Продолжай залипать в танках. Если ты не осилил Python то у меня для тебя плохие новости.

на некого Гену ANTG

ничего хорошего из этого не выйдет.

З.Ы. между нами расстояние 582 км. и вроде морозы не сильно от наших отличаются, но что то пошло не так... Юрок, ты случаем не школьник? Если да, то найди любое образовательное пособие по какому-нибудь паскалю и начни с азов. Глядишь к университету будешь иметь некие базовые знания, которые тебе помогут в дальнейшем постичь что то белее серьезное. Потом ты научишься в C и C++, потом до конца жизни будешь познавать как правильней писать код.

ilinsky ★★★★★
()

Посмотрел, возникло два вопроса.
1. Нафига в экосистеме Windows писать на Си? Там у них свой C# со средой .NET есть. Microsoft давно плюнула на Си, сказав когда-то давно, что C++ — это новый Си, и замена ей. На Visual Studio компилятор Си застыл на стандарте ANSI. Новых стандартов эта среда прогаммирования не поддерживает.
2. Почему автор курсов не пишет в UNIX-подобных системах. BSD и Linux вот истинная Родина языка программирования Си.
3. У вас там заголовки <conio.h> подключают?

anonymous
()

Правильно ли сделал printf...?

Нет. Надо вот так:

data Format = Number Format
            | Str Format
            | Ch Format
            | Float Format
            | Lit String Format
            | End


PrintfType : Format -> Type
PrintfType (Number fmt) = (i : Int) -> PrintfType fmt
PrintfType (Str fmt) = (str : String) -> PrintfType fmt
PrintfType (Ch fmt) = (char : Char) -> PrintfType fmt
PrintfType (Float fmt) = (float : Double) -> PrintfType fmt
PrintfType (Lit str fmt) = PrintfType fmt
PrintfType End = String


printfFmt : (fmt : Format) -> (acc : String) -> PrintfType fmt
printfFmt (Number fmt) acc = \i => printfFmt fmt (acc ++ show i)
printfFmt (Str fmt) acc = \str => printfFmt fmt (acc ++ str)
printfFmt (Ch fmt) acc = \c => printfFmt fmt (acc ++ show c)
printfFmt (Float fmt) acc = \f => printfFmt fmt (acc ++ show f)
printfFmt (Lit lit fmt) acc = printfFmt fmt (acc ++ lit)
printfFmt End acc = acc


toFormat : (xs : List Char) -> Format
toFormat [] = End
toFormat ('%' :: 'd' :: chars) = Number (toFormat chars)
toFormat ('%' :: 's' :: chars) = Str (toFormat chars)
toFormat ('%' :: 'c' :: chars) = Ch (toFormat chars)
toFormat ('%' :: 'f' :: chars) = Float (toFormat chars)
toFormat ('%' :: chars) = Lit "%" (toFormat chars)
toFormat (c :: chars) = case toFormat chars of
                             Lit lit chars' => Lit (strCons c lit) chars'
                             fmt => Lit (strCons c "") fmt


printf : (fmt : String) -> PrintfType (toFormat (unpack fmt))
printf fmt = printfFmt _ ""
λΠ> :t printf "%c %f %d %s"
printf "%c %f %d %s" : Char -> Double -> Int -> String -> String

λΠ> printf "%c %f %d %s" 'A' 1.234 1 "LOR"
"'A' 1.234 1 LOR" : String

λΠ> printf "%c %f %d %s" 'A' 1.234 1.0 "LOR"
builtin:Type mismatch between
        Double (Type of 1.0)
and
        Int (Expected type)
mimimimi
()

Ну и конечно же хотелось бы совета, какие обучающие уроки по «С» можно ещё посмотреть для развития.

Чистый Си — это насквозь процедурный язык. Усвоишь алгоритмы — весь Hello World будет у твоих ног. Усвоишь алгоритмы и функции — ООП и классы станут для тебя ненужным говном.

Если тебе pdf -ки читать не влом, то Константин Поляков тебя ждёт в гости зырь сюда. Там у него и Презентации есть, зацени!

P.S.
Чуть не забыл. У Полякова не заболуешь на win - довс будешь кодить, в обнимку со средой DevC++

anonymous
()

Как стать хакером
Sublime Text (UNREGISTERED)

Что-то плохой из него хакер.

ozz_is_here
()

Пробовал питон, не совсем понял его, скорее всего из-за собственной лени и желанием скорее залипнуть в танках, чем что-то учить

Знаешь сколько я таких знаю? Они пытались «учить программирование» без четкой цели, без необходимости. И быстро сдулись.

Разве можно выучить китайский язык без огромного желания понимать этот язык? Разве можно стать успешным ученым если для тебя эта деятельность тягомотная рутина, от которой хочется скорее убежать, наоборот - любое дело должно захватывать так, что на игры просто жалко времени.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

извиняюсь конечно не по теме, но

I-Love-Microsoft тебя разве ещё не ушатали из-за твоего nickname? Зачем тебе среди быков с красной тряпкой ходить? Стебаешься?

anonymous
()
Ответ на: комментарий от anonymous

Ты спроси тех, у кого тут ники Ilovewindows или licwin windows и тому подобные. С таким ником меня упоротые фанатики внесли в ЧС в течение 5 минут и мы друг другу не мешаем жить - сообщения друг друга не видим ;)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Shprot

Ну книга кернигана ритчи. А это конструкция ( bit & 'a' ) ? '1' : '0') то же самое что

if ( bit & 'a' )
  printf ( '1' );
else
  printf ( '0' );
Только не printf конечно же, но возвращает именно букву в printf.

u0atgKIRznY5
()

А почему нет функции для пробела?

char space(void)
{
    return 32;
}
vlad9486
()
Ответ на: комментарий от u0atgKIRznY5

Ну книга кернигана ритчи.

Плохой совет, он же тока-тока начинает.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Разве можно выучить китайский язык без огромного желания понимать этот язык?

Можно, но для этого надо понимать слово надо. К сожалению почти никто этого не умеет.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Разве можно выучить китайский язык без огромного желания понимать этот язык?

Можно, но для этого надо понимать слово надо. К сожалению почти никто этого не умеет.

Он имел ввиду, что «наилучшим выбором будет то, что надо любить то дело, которым ты занимаешься».

Что касается китайского то, при общении «жертвами» скорее являются сами китайцы. Русский турист учивший китайский никак не возьмёт в толк, что при произношении китайских слов очень важны интонации и тоны. Без этого они вас ни*уя не поймут. Почему мы думаем, что тоны и интонации это ненужное и бесплатное приложение к языку?

anonymous
()
Ответ на: комментарий от anonymous

наилучшим выбором будет то, что надо любить то дело, которым ты занимаешься

Только если любовь до гроба. Иначе надёжней, если «понимать слово надо». И если оно действительно надо.

Почему мы думаем, что тоны и интонации это ненужное и бесплатное приложение к языку?

В русском на самом деле тоже нужны. «Да» можно произнести примерно с полудюжиной разных смыслов.

Что касается китайского то, при общении «жертвами» скорее являются сами китайцы.

Китайцы из разных провинций тоже часто на письменный переходят. Произношение сильно разнится.

monk ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

можно превратить любую большую букву в маленькую заменив один бит

Какой бит изменить в Ǒ, чтобы превратить в ǒ?

monk ★★★★★
()
Ответ на: комментарий от monk

Какой бит изменить в Ǒ, чтобы превратить в ǒ?

Я про английский алфавит. Там инженеры хорошо потрудились. А ту букву, которую ты написал я не знаю даже их число, да и врядли ему такое же внимание уделяли.

u0atgKIRznY5
()
Ответ на: комментарий от u0atgKIRznY5

Я про английский алфавит.

Его не хватает даже для английских слов. Например: naïve, façade, cursèd и zoölogist.

Там инженеры хорошо потрудились

В те времена кроме ASCII был как минимум EBCDIC, в котором, конечно, тоже было достаточно одного бита, но не того, который в ASCII.

monk ★★★★★
()
Ответ на: комментарий от anonymous

С возрастом интересы меняются. А языки просто требуют большого количества времени, усердия и после определенного этапа надо садится на трактор и ехать туда где много носителей языка.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.