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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Green EyeZ



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rudia
Ну Вы знаете.. Big Thanks!

Всего записей: 48 | Зарегистр. 29-09-2007 | Отправлено: 13:28 13-12-2007
veronica b



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

Цитата:
Не-а. if (A[i][j]==0) null_element+=1.  

Тогда уже вот так будет лучше

Цитата:
 
 if(A[i][j]==0)  
       null_element++;
 

Для этого и есть в языке Си специальный оператор ++!


----------
To be able to calculate something is not the same as understanding it.

Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 16:56 13-12-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
к сожалению и  
i++
и
i += 1
генерят одну и ту же инструкцию add
 
а вот вместо
if (i==0) ...
можно написать
if (!i) ...
 
что ровно на два символа меньше в исходном файле :)

Всего записей: 24037 | Зарегистр. 06-12-2002 | Отправлено: 17:29 13-12-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM
Цитата:
генерят одну и ту же инструкцию add
было б странно, если б было по другому просто ++ более культурно выглядит. кроме того на 1 символ короче

----------
матрица - это система. она и есть наш враг
everyone's first vi session. ^C^C^X^X^X^XquitqQ!qdammit[esc]qwertyuiopasdfghjkl;:xwhat

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 18:02 13-12-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rain87
Цитата:
было б странно, если б было по другому

на самом деле странно, т.к. не мне тебе объяснять, что
inc eax
шустрее
add eax, 1
 
и опять же короче на 2 символа гы

Всего записей: 24037 | Зарегистр. 06-12-2002 | Отправлено: 18:06 13-12-2007 | Исправлено: akaGM, 18:07 13-12-2007
veronica b



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просто писать ++, это ближе к сушности языка Си. Ну, а что бы окончательно запутать "клиента", можно написать так:

Цитата:
 
    null_element += (A[i][j] ? 0 : 1);
or
    A[i][j] ? null_element : null_element++;
 

 
 

Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 20:13 13-12-2007
rain87



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

Цитата:
на самом деле странно, т.к. не мне тебе объяснять, что  
inc eax  
шустрее  
add eax, 1
ну это уже от компилера зависит. компилятор разумный (во как) по идее inc и сгенерит

----------
матрица - это система. она и есть наш враг
everyone's first vi session. ^C^C^X^X^X^XquitqQ!qdammit[esc]qwertyuiopasdfghjkl;:xwhat

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 21:17 13-12-2007
Invinsible

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветики Всем.
Помогите пожалуйста решить задачу на тему работы с файлами и Ввода-вывода..
 
Задан текстовый файл. Определить, упорядочены ли по возрастанию или убыванию его символы.
 
И если несложно еще эту:
 
Файл состоит из последовательности слов. Записать в другой файл эту последовательность в обратном порядке.
 
Заранее спасибо!, Очень на Вас надеюсь

Всего записей: 10 | Зарегистр. 01-12-2007 | Отправлено: 21:24 13-12-2007
Abs62



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

Цитата:
ну это уже от компилера зависит. компилятор разумный (во как) по идее inc и сгенерит

Надо только не забывать, что команды add eax,1 и inc eax в общем случае не эквивалентны.

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 21:30 13-12-2007 | Исправлено: Abs62, 21:31 13-12-2007
distance

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

Цитата:
на самом деле странно, т.к. не мне тебе объяснять, что
inc eax
шустрее
add eax, 1  

на сколько шуствее?

Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 21:31 13-12-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rain87
вот и я про то же, или "разумный" или "визуальный" гы
 
_asm {
  mov eax, dword ptr my_int_var
  inc   eax
  mov dword ptr my_int_var, eax
}
во как надо!
 
или ваще
_asm {inc dword ptr my_int_var}
 
-----------------
distance
к сожалению, у меня сейчас нет под рукой таблиц тактов, а на память -- где-то на 1-3 такта... вроде...
сейчас это, конечно, не столь важно, но inc всё же на несколько байт сама по себе короче add из-за
второго операнда...
 
-----------------
Abs62
а разве они не одинаково на флаги действуют? может это ты об adc?

Всего записей: 24037 | Зарегистр. 06-12-2002 | Отправлено: 21:31 13-12-2007 | Исправлено: akaGM, 22:00 13-12-2007
Charlie Rat

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

Цитата:
Просто писать ++, это ближе к сушности языка Си. Ну, а что бы окончательно запутать "клиента", можно написать так:  
 
Цитата:  
    null_element += (A[i][j] ? 0 : 1);  
or  
    A[i][j] ? null_element : null_element++;  
 

 
Да я не очень то и запутался. Это условное выражение или условная операция. Как кому нравится.
 
 
Добавлено:
А как генератор случайных чисел  инициализировать перед использованием? И все же: Как правильно задать символьный многомерный массив:  
1. Чтобы была возможность выбирать и вводить символ;  
2. Вывод символов на экран.
 
Добавлено:
Есть программа, которая находит наибольшее значение в каждой строке двухмерного массива  и выводит результат на экран.

Цитата:
#include<iostream>
#include<stdlib.h> // в этом файле содержатся функции rand и srand
#include<time.h> // в этом файле содержится функция time
 
using namespace std;
inline void main()
{
    // задаем размерность массива
    const int a = 10;
    const int b = 10;
    int iArr[a][b];  // объявляем двумерный массив
printf("\t\tSpecified Massif\n\n");
    // заполнение массива случайными числами и показ на экран
    
    // перебираем отдельные строки (одномерные массивы в совокупности)
    for(int i=0; i<a; i++)
    {
        // перебираем отдельные элементы каждой строки
        for(int j=0; j<b;j++)
        {
            // инициализация элементов значениями в диапазоне от 0 до 100
            iArr[i][j]=rand()%100;
 
            // показ значений на экран
            printf("%5d", iArr[i][j]);
        }
 
        // переход на другую строку матрицы
        cout<<"\n\n";
    }
    // поиск в строках максимального элемента
 
    // перебираем отдельные строки (одномерные массивы в совокупности)
        
        // предполагаем, что максимальный - нулевой элемент строки  
        
            for (int i=0; i<a; i++)
            {
                int max = iArr[i][0];
                for (int j=0; j<b; j++)  
                {
                    if (iArr[i][j] > max)
                    max = iArr[i][j];
                
                }
                printf("%s%d\n", "Maximal member=", max);
            }    
}

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

Всего записей: 17 | Зарегистр. 01-12-2007 | Отправлено: 23:43 13-12-2007 | Исправлено: Charlie Rat, 23:46 13-12-2007
Abs62



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

Цитата:
а разве они не одинаково на флаги действуют?

То-то и оно, что неодинаково: add действует на CF, а inc - нет.  
 
Charlie Rat

Цитата:
А как генератор случайных чисел  инициализировать перед использованием?

Загляни в Вопросы по программированию на С++, там это только что обсуждалось.

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

В какой именно? Начальное и конечное значение в циклах как раз и определяют область просмотра.

Цитата:
Как правильно задать символьный многомерный массив:  
1. Чтобы была возможность выбирать и вводить символ;  
2. Вывод символов на экран.

Откуда выбирать и куда вводить?

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 00:10 14-12-2007
Charlie Rat

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
за "srand ((unsigned) time(NULL));" спасибо. Сразу получилось.
Что касается нахождения мах в заданной области массива. Например, массив разбить диагональю сверху вниз и слева направо и найти мах в одной из половин, которые получатся. К сожалению, не знаю как здесь нарисовать картинку, чтобы было понятней.  
И последнее.
Необходимо, чтобы двухмерный массив заполнялся любым символом, введенным с клавиатуры.

Всего записей: 17 | Зарегистр. 01-12-2007 | Отправлено: 00:51 14-12-2007
Abs62



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

Цитата:
Что касается нахождения мах в заданной области массива. Например, массив разбить диагональю сверху вниз и слева направо и найти мах в одной из половин, которые получатся.

Вычисляй пределы для второго цикла for в зависимости от счётчика первого цикла. Необходимые столбцы для первой строки, для второй строки, и т.д.

Цитата:
Необходимо, чтобы двухмерный массив заполнялся любым символом, введенным с клавиатуры.

Да так же, как уже сделал. Только вместо rand() вводи значения с клавиатуры.

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 01:17 14-12-2007
QGrade

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникли 2 вопроса по си..  
1. как реализовать побитовый цикличекий сдвиг числа на N разрядов (не использую ассемблерских вставок) ?
2. как перевести в верхний регистр символы (включая русские буквы) ?

Всего записей: 1 | Зарегистр. 14-12-2007 | Отправлено: 11:35 14-12-2007
KChernov



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

Цитата:
1. как реализовать побитовый цикличекий сдвиг числа на N разрядов (не использую ассемблерских вставок) ?

Ну это вообще в любом учебнике есть - надо использовать операции битового сдвига влево и  вправо на n разрядов соотв: "<<n" и ">>n"
 

Цитата:
. как перевести в верхний регистр символы (включая русские буквы) ?

Проще и универсальнее это делается через мапинг маленьких букв в большие:
Создаешь 2 массива: в первом хранишь маленькие буквы, а во втором соответствующие большие (индекс маленькой буквы равен индексу соотв большой).
Ищешь в тексте каждую букву из первого массива и заменяешь ее буквой из второго массива.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 13:37 14-12-2007
akaGM

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

Цитата:
_цикличекий сдвиг_

а '<<' и  '>>' -- простой сдвиг, т.е. shl, shr
а надо эмулировать ror и rol
 
так что надо будет писать побитовые операции ручками через
массивы бит, т.к.
_asm {rol ax, 4} запрещено...
 
---------------
Abs62

Цитата:
То-то и оно, что неодинаково: add действует на CF, а inc - нет.  

и в чём проблема?

Код:
 
int i;
unsigned int ui;
 
  i = 0x7fffffff; // -1, 0xffffffff, 0x80000000, -10
  ui = 0x7fffffff;
  _asm {inc dword ptr i};
  _asm {inc dword ptr ui};
  printf("%d  %lu\n", i, ui);  
  i = 0x7fffffff;
  ui = 0x7fffffff;
  i++;
  ui++;
  printf("%d  %lu\n", i, ui);  
 


Всего записей: 24037 | Зарегистр. 06-12-2002 | Отправлено: 14:37 14-12-2007 | Исправлено: akaGM, 15:44 14-12-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
QGrade, написал когда-то, с трудом нашёл. Разберёшься, я думаю.
Код:
 
/**************************************************************************\
|******         Шаблон класса для циклических сдвигов целых,         ******|
|******     как они выполняются C и C++ операторами << и >>, но      ******|
|******    с оборотом вокруг краёв битового представления целого.    ******|
\**************************************************************************/
 
#ifndef __ROTATE_H_49D3D5C0_E60A_11D7_BC21_00502295CE54
#define __ROTATE_H_49D3D5C0_E60A_11D7_BC21_00502295CE54
 
#include <limits>
 
template <typename T>
class rot
{
 const T r;
 enum {bits=std::numeric_limits<T>::is_signed + std::numeric_limits<T>::digits};
 
public:
 explicit inline rot(const T& x):r(x){}
 
 inline T operator<<(unsigned n)
 {
  const unsigned mask=(static_cast<T>(1u)<<n)-1;
  n%=bits;
  return static_cast<T>((r<<n) | ((r>>(bits-n)) & mask));
 }
 
 inline T operator>>(unsigned n)
 {
  n%=bits;
  const unsigned mask=(static_cast<T>(1u)<<(bits-n))-1;
  return static_cast<T>(((r>>n) & mask) | (r<<(bits-n)));
 }
};
 
#endif

А это пример использования.
Код:
signed int     a=0xEF123456;
signed short   b=0x90AB;
signed char    c=0xCD;
signed __int64 d=0xBABEFACE12345678i64;
 
a=rot<int  >(a)<<18;
b=rot<short>(b)<<12;
c=rot<char >(c)<<5;
d=rot<__int64>(d)<<27;
 
a=rot<int  >(a)>>21;
b=rot<short>(b)>>5;
c=rot<char >(c)>>54;
d=rot<__int64>(d)>>49;


----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 15:51 14-12-2007 | Исправлено: Qraizer, 15:53 14-12-2007
Minissota



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет, народ!  
Помогите, плиз,  очень нада решить задачку по файлам...  
А вот сама задача:  
Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.  
Заранее благодарен!

Всего записей: 13 | Зарегистр. 14-12-2007 | Отправлено: 17:08 14-12-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 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