Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389

Открыть новую тему     Написать ответ в эту тему

de_lirium

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тема создана для накопления реализаций типовых задач на С/С++.
Прежде чем публиковать своё условие задачи, убедитесь, что её решение (или решение очень похожей задачи) в теме и полезных ссылках отсутствует (например воспользуйтесь ссылкой Версия для печати вверху справа страницы и поищите в ней).
Постарайтесь как можно полнее сформулировать постановку задачи (чтобы тому, кто решит вам помочь, не приходилось тратить своё время ещё и на выпытывание у вас деталей условия; если вам не понятно, как это сделать - постарайтесь представить, что эта программа у вас уже есть, и "поработать" с ней - вот все детали, которые при этом придут в голову, с большой вероятностью должны быть в условии задачи).
Если вы уже пытались сделать эту задачу, но у вас не получилось и вы хотите довести дело до конца - обязательно выложите результат своей попытки, предварительно убедившись, что ваш код компилируется.

Вопросы по технологиям лучше задавать тут.

Прежде чем просить помощи в задании...
Если позарез надо и вы даже готовы заплатить

Если вам вдруг не отвечают или ответ вас не устраивает, и вообще полезно прочитать всем спрашивающим.

Полезные ссылки:
 
C++: в том числе и решения задач (eng)
задачи на C
 
Проверить свою задачку можно:
Онлайн-компилятором Visual C++
godbolt
Wandbox
Одним из онлайн-компиляторов на ideone.com

Всего записей: 28 | Зарегистр. 23-07-2004 | Отправлено: 02:14 20-12-2004 | Исправлено: Daniyar91, 19:25 27-09-2017
seregik19

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, я просто сам в С++ новичок, так сказать, а тут по курсовому такое задание надо сделать, вот и ищу добрых людей.

Всего записей: 2 | Зарегистр. 05-12-2011 | Отправлено: 16:16 05-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
seregik19
уверяю тебя, никто не будет здесь делать твою курсовую в полной мере, ни добрые, ни, тем более, злые люди...
всё дело в объеме: ответить на _конкретные вопросы_ и что-то объяснить -- пожалуйста...
если тебя это не устраивает (а тут полно таких халявщиков), то не теряй время и сразу иди сюда:
http://forum.ru-board.com/topic.cgi?forum=33&topic=2395#1

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 16:43 05-12-2011
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот он снова я, с той самой программой.
Доделал синхронизацию, если ее можно так назвать.
Новый большой код.
Прошу просмотреть, прокомментировать Собственно, в чем заключается обратная связь - после приема каждого блока приемник отвечает единицей, а передатчик не шлет следующий блок, пока ее не получит. Вроде правильно сделал.
Файл 27 кбайт (keyrus.com ) всегда передает без ошибок. Файл 1,4 мбайта (bc.exe ) - обрывается с ошибкой "Машина не ответила." всегда на разном %.
НО, если окна VMware с досом активны, то ошибки нету. Грешу на ее. Только что 5.4 мбайта передал успешно, окна виртуальных машин висели выше всех.
Завтра мб проверю на реальном железе.
В будущем хочу вынести повторяющиеся циклы в функции и добавить проверку не прошло ли много времени в циклах for в SendStr и ReceiveFile.
 
Добавлено:
Проверил еще несколько раз, окна виртуалки активны - все окай, на заднем плане - нет.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 02:12 12-12-2011 | Исправлено: A1exSun, 02:16 12-12-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток! Я написал функцию которая кодирует строку по коду цезаря. Только есть проблема, когда функция кодирует последние буквы алфавита, то вместо того чтоб возвращаться в начало алфавита она продолжает дальше по таблице ASCII. Как ее зациклить? Использовать if-else нельзя.
Далее код

Код:
 
void ceasar_code(char text[],int shift)
{
    int i;
    for(i=0;i<text[i]!='\0';i++)
    {
            text[i]+=shift;
        while(text[i]>=ABC)
            i-=ABC;
        while(text[i]<ABC)
            i+=ABC;
    }
    puts(text);
}


----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 04:00 12-12-2011
SpaceZero



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro

Цитата:
 
Как ее зациклить? Использовать if-else нельзя.
 

 
Используй оператор modulus % :
 

Код:
 
void ceasar_code(char text[], int shift)
{
      const unsigned int nPower = '~' - ' ' + 1;
      int i;
      int nLen = strlen(text);
      for(i=0; i<nLen; i++)
      {
             text[i] = ' ' + (text[i] + shift) % nPower;
      }
}
 

 
Вышеприведенный код - реализация кодирования по коду Цезаря, с использованием
отображаемых ASCII символов с кодами от 0x20 (пробел) до 0х7E (тильда).

Всего записей: 32 | Зарегистр. 25-05-2007 | Отправлено: 10:45 12-12-2011 | Исправлено: SpaceZero, 10:52 12-12-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SpaceZero
Нет, не то. Мне нужно только использовать только алфавит без всяких других знаков. Кстати, если написать  

Код:
 
unsigned int nPower='z'-'a'+1;
 

то все равно будет печатать другие символы.
 
Добавлено:
Все, нашел где проблема. Исправил следующие строки

Код:
 
unsigned int nPower='z'-'a'-1;
 

и

Код:
 
text[i]='a'+(text[i]+shift)%nPower-1;
 

так полностью подходить к условиям задачи.
 
Спасибо всем за активное участие.

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 13:01 12-12-2011
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Завтра мб проверю на реальном железе.

Проверил на двух машинах с ХР, шнурок самодельный, некачественный.
Первый раз слал 50 кбайт - все окай, в последующих попытках "Машина не ответила", то есть таймаут.
Хрень получается.
 
Проблема в ожидании подтверждения:

Код:
        ticks = getticks;  
         while (buffer[n][0] != 1) {  
             if (kbhit()) if (getch() == 27) {  
                 cprintf("\r\n  Передача вiдмiнена.");  
                 getch();  
                 return 0;  
             }  
             if (ticks+180 < getticks) {  
                 cprintf("\r\n  Машина не вiдповiла.");  
                 getch();  
                 return 0;  
             }  
         }

Получается getticks больше ticks+180 и ошибка, при этом в buffer[n][0] конечно же 0.
Что делать не знаю.
 
Добавлено:
Как инвертировать 7й бит в 1 байте?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 15:10 12-12-2011 | Исправлено: A1exSun, 16:28 12-12-2011
SpaceZero



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
Как инвертировать 7й бит в 1 байте?


Код:
x ^= 0x40;

 
При условии, что переменная x определена выше как unsigned char.

Всего записей: 32 | Зарегистр. 25-05-2007 | Отправлено: 19:54 12-12-2011
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SpaceZero
Спасибо. ^= 0x80. Биты с 0 считаются

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 21:15 12-12-2011
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сказать функции fscanf чтоб читала число до нулей?
То есть в файле: 115200
Мне нужно: 1152
Или в файле: 9600
Мне нужно: 96
Дополнительная переменная long и потом делить на 100 не вариант.
А хотя вариант - уже есть объявлена переменная, которая используется позже. Но все-таки?  
 
Добавлено:
Снова то же... Как проверить что 6й бит != 1?
if(!(bit & 0x40)) ?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 22:36 13-12-2011 | Исправлено: A1exSun, 00:59 14-12-2011
SpaceZero



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
Как сказать функции fscanf чтоб читала число до нулей?

Для функции scanf сущестует вариант форматировки строки %[1-9], которая означает рассматривать только символы от 1 до 9. И хотя стандарт ANSI поддержки такой форматировки от scanf не требует, он обычно поддерживается компиляторами.
Только переменная в которую записывается информация должна быть строкой, ее потом нужно будет конвертировать в число (например с использованием atoi). Полагаю то же самое будет работать для fscanf:

Код:
 
fscanf(fFile, "%[1-9]", szValue);
nValue = atoi(szValue);
 

 
предполагается, что szValue строковой массив и nValue переменная типа int, определены выше.
 

Цитата:
 
Снова то же... Как проверить что 6й бит != 1?  
if(!(bit & 0x40)) ?
 

 
Указанный вариант сработает.
Только там происходит неявное преобразование из int в bool (в случае C++ компиляции). Поэтому более интуитивным будет:

Код:
 
if(0 == (bit & 0x40))
 

Всего записей: 32 | Зарегистр. 25-05-2007 | Отправлено: 04:50 14-12-2011
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SpaceZero

Цитата:
предполагается, что szValue строковой массив

Лишняя переменная - не пойдет
Тем более для нее нужно 4 байта - проще читать в long и делить на 100.

Цитата:
Только там происходит неявное преобразование из int в bool

Никогда об этом в таких случаях не задумывался.
 
Как посчитать количество строк в файле, кроме как читать по символу до конца и считать \n ?
Нашел такое:

Цитата:
файлмаппиг в память блоками кратными размеру страницы и размеру кластера, и далее посимвольная проверка

Как это делается?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 15:38 14-12-2011 | Исправлено: A1exSun, 15:41 14-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
файлмаппиг
на ТурбоС это не сделаешь...
это винАПИ, типа CreateFileMapping()/MapViewOfFileEx()
 

Цитата:
Как посчитать количество строк в файле
для текстовых файлов только так...
можешь открыть в бин-моде, пролучится немного быстрее...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 16:20 14-12-2011 | Исправлено: akaGM, 16:44 14-12-2011
TigressIva

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как с Си++ осуществить ввод с клавиатуры, например нужно ввести название книги?

Всего записей: 3 | Зарегистр. 14-12-2011 | Отправлено: 19:19 14-12-2011
SpaceZero



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
 
Лишняя переменная - не пойдет
Тем более для нее нужно 4 байта - проще читать в long и делить на 100.
 

 
А если количество нулей не 2, а больше (или меньше)?
А если в файл записаны не только цифры?
И неважно, что сейчас в файле всегда 2 нуля.
Завтра (или через год) ситуация может измениться, и придется переписывать код.
А пара лишних байтов в современных PC с гигабайтной памятью не проблема.
 

Цитата:
Никогда об этом в таких случаях не задумывался.

 
Это идеология программирования на языке C, когда о типах данных не особо заморачиваешься.
На C++, который более типизирован, обычно об этом как минимум задумываются.
Ибо код читают не только его авторы и возможно в будущем, кому-то будет легче понять исходник. Не зря существует столько операторов преобразования типов в C++, вместо 1-го для всех случаев жизни в C.

Всего записей: 32 | Зарегистр. 25-05-2007 | Отправлено: 19:20 14-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TigressIva
char s[256];
cout <<"название книги?" <<endl;
sin >> s;

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 19:26 14-12-2011
TigressIva

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
char s[256];
cout <<"название книги?" <<endl;
sin >> s;
akaGM, если так делать то вводится название только до пробела, после пробела символы являются незначащими

Всего записей: 3 | Зарегистр. 14-12-2011 | Отправлено: 20:24 14-12-2011
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TigressIva

Код:
getline(cin,s);


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:22 14-12-2011
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сегодня полностью дописал свою программу.
Огромное спасибо за помощь Abs62, MERCURY127 и akaGM
Без вас не вышло бы.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 01:19 15-12-2011 | Исправлено: A1exSun, 01:19 15-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun
рад...
 
жаль, что пиво виртуальное...
-----
внимательнее посмотрел на тех, кому ты спасибкаешь...
кстати, знаешь что их роднит/объединяет?

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 14:42 15-12-2011 | Исправлено: akaGM, 14:44 15-12-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru