Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Модулно смятане в програма на C++

Featured Replies

преди 11 минути, simtech написа:

Но наистина не разбирам формулата с ваденето на char-ове. Уточни??

В езика C++ обичайно се използва ASCII стандарта.

Символът 'А' латинско има стойност 65 или 41 шестнайстично.

Символът 'В' латинско има стойност 66

Или на С++ ако напишеш "int n = 'B' - 'A';" е все едно, че си написал" int n = 1;"

преди 5 минути, Реджеп Иведик написа:

 

В езика C++ обичайно се използва ASCII стандарта.

Символът 'А' латинско има стойност 65 или 41 шестнайстично.

Символът 'В' латинско има стойност 66

Или на С++ ако напишеш "int n = 'B' - 'A';" е все едно, че си написал" int n = 1;"

ЯСНО! Въобще не бях се сетил!
В такъв случай, твоят вариант може ли да обърне лесно на кирилица?

преди 5 минути, simtech написа:

ЯСНО! Въобще не бях се сетил!
В такъв случай, твоят вариант може ли да обърне лесно на кирилица?

Да, може. Без да правиш почти нищо може да работи с всичките 65536 уникоде символа, или колкото са там. Трябва единствено да промениш чаровете на уайд чар и вместо на модул 26 да делиш на модул 65536.

И което е по важно, не ти трябва нито да инициализираш масив от 65536 елемента, нито да итерираш за всеки един символ в такъв голям масив.

Докато една програма, която итерира в масива, ще се задъха при такъв голям обем и по дълъг текст

преди 13 минути, Реджеп Иведик написа:

Да, може. Без да правиш почти нищо може да работи с всичките 65536 уникоде символа, или колкото са там.

А какво ще стане, ако в alphabet задам смесено кирилица и латиница?
Защото моята търси съвпадение, без да я интересува какво точно съвпада, а твоето върви по формула.
В такъв случай, ако извадя от кирилска буква латинска буква няма да се получи индекса.

Редактирано от Гост (преглед на промените)

преди 25 минути, simtech написа:

В такъв случай, ако извадя от кирилска буква латинска буква няма да се получи индекса.

Константата 'А' е изкуствена. Въведох я само за примера. Константата е най естествено да е 0, и тогава нямаш грижи. Всички символи независимо кои.

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

При нормална програма в графична среда, контролните символи не са проблем.

Например, можеш да работиш с ескейпове. Например вместо контролен символ "10" да извеждаш "/n", а вместо контролен символ "13" да извеждаш "/r" 

Редактирано от Реджеп Иведик (преглед на промените)

преди 10 минути, Реджеп Иведик написа:

Константата 'А' е изкуствена. Въведох я само за примера. Константата е най естествено да е 0, и тогава нямаш грижи. Всички символи независимо кои.

Моя грешка...
Ако тук

input[i] - input[i - 1]


input e кирилска а input[i-1] е латинска?

преди 6 минути, simtech написа:

Моя грешка...
Ако тук


input[i] - input[i - 1]


input e кирилска а input[i-1] е латинска?

Аз те разбрах. Полагаш константата да е нула. То ест. Навсякъде, където имаш -'А' го махаш. И ако се ограничим с нароу чар, навсякъде където имаш 26, заместваш с 256.

Така ще работи с всички 256 символа, не само с азбуките. Но, както и по горе писах, проблема при такъв подход в конзолно приложение е, че трябва отделно да обработиш контролните символи. Но това са няколко реда код. Трябва да четеш и да пишеш символ по символ, и когато срещнеш контролен символ, да използваш ескейпове да речем.

За да можеш да положиш константата да е 0, трябва всички символи от таблицата софтуерно да ги направиш принтабъл

преди 51 минути, Реджеп Иведик написа:

Да, може. Без да правиш почти нищо може да работи с всичките 65536 уникоде символа, или колкото са там. Трябва единствено да промениш чаровете на уайд чар и вместо на модул 26 да делиш на модул 65536.

...

Няма да е толкова просто! Ако имаш UTF-16 ще имаш винаги два байта. Но ако имаш UTF-8 ще имаш (по спомени) от един то 6 байта дължина на символ

Има и по лесен вариант. Пак полагаш константата да е 0, и делиш на 256 или 65536, в зависимост от широчината на символите. Обаче когато иавеждаш кодирания текст, вместо символи извеждаш кореспондиращите им кодове, разделени с интервал или запетая

преди 5 минути, capnemo написа:

Няма да е толкова просто! Ако имаш UTF-16 ще имаш винаги два байта. Но ако имаш UTF-8 ще имаш (по спомени) от един то 6 байта дължина на символ

И пак може да се направи нещо най вероятно, щото все има в документацията някакви правила, които биха могли да се използват. Друг е въпроса, че аз не ги знам. 

преди 6 минути, Реджеп Иведик написа:

Има и по лесен вариант. Пак полагаш константата да е 0, и делиш на 256 или 65536, в зависимост от широчината на символите. Обаче когато иавеждаш кодирания текст, вместо символи извеждаш кореспондиращите им кодове, разделени с интервал или запетая

А не е ли по-лесно да се мисли за входния текст като за двоичен поток и да се работи просто с байтове (независимо от съдържанието им) :)

преди 7 минути, Реджеп Иведик написа:

...

И пак може да се направи нещо най вероятно, щото все има в документацията някакви правила, които биха могли да се използват. Друг е въпроса, че аз не ги знам. 

Дефиниции и библиотеки има. Но въпросът е защо трябва да си създаваме сами проблеми :) 

преди 4 минути, capnemo написа:

А не е ли по-лесно да се мисли за входния текст като за двоичен поток и да се работи просто с байтове (независимо от съдържанието им) :)

По лесно е. И да се ксорва и ксорва с голямо число, дето не може да му се намерят делителите за много години напред

Баси филма. Добре, че си пуснах циклите....

преди 42 минути, Реджеп Иведик написа:

Така ще работи с всички 256 символа, не само с азбуките.

Кирилските и латинските символи са в различни кодови таблици. Умишлено питах. Или са изместени.
Зависи от codepage-а къде ще са напъхани. Но в стандартната ASCII таблица няма кирилски символи въобще.
Умишлено те попитах.
256символа, но нито един от тях в ASCII не е кирилски.
За това те питах как ще докараш кирилския символ, когато го няма в таблицата. А цикъла прави сравнение и не го интересува какво точно има там.

Редактирано от Гост (преглед на промените)

преди 8 минути, simtech написа:

256символа, но нито един от тях в ASCII не е кирилски.

Знам. Но в българската подредба, уиндоус 1256 май беше за графика и оем 856 май беше за конзола оставащите 128 символа до 256 съдържат българската азбука.

Ако, както каза капитана, интерпретираме символите, не като символи, а като числа, подредбата изобщо не ни събаря. Има май и един проблем при подобен подход ако трябва да напишем кода на хартия, трябва да сме се договорили така или иначе с приятелските сили, като какво ще пишем на хартията. 

Тогава трябва или числа, или да си измислим принтабъл за всяка стойност

преди 17 минути, simtech написа:

Добре, че си пуснах циклите....

Не е добре. Толкова пъти по бавно е, колкото е по голяма дължината на азбуката. Само латиницата са 52 символа, без интервали и пунктуация. Отделно, за кирилица трябва да прибавиш още 60. Програмата ти става 112 пъти по бавна. За малки текстове е бял кахър разбира се.

Но като може да се индексира или хешира или изчислява с формули, се използва преимуществено индексиране, хеширане или изчисление с формули. Чак след това може да се дава възможност за каквито и да било други алгоритми. Ако нито един от тези не може да свърши работа.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.