Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 26.01.2013
Сообщений: 40

В строке символов переставить местами значения четных и нечетных битов

26.01.2013, 20:10. Показов 2259. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите пожалуйста программку на С, задание в заголовке, желательно с пояснениями.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2013, 20:10
Ответы с готовыми решениями:

В строке символов поменять местами символы на четных и нечетных позициях
ребятки помогите кто можит с задачкой: В строке символов поменять местами символы на четных и нечетных позициях. большое Спасибо!

В строке символов поменять местами символы на четных и нечетных позициях
В строке символов поменять местами символы на четных и нечетных позициях.

В строке символов поменять местами символы на четных и нечетных позициях
В строке символов поменять местами символы на четных и нечетных позициях.

9
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
26.01.2013, 21:09
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
void swap(char *a, char *b)
{
   char t = *a;
   *a = *b;
   *b = t;
}
 
int main(void)
{
   char str[] = "10101001010110001";
   size_t i;
   for (i = 1; i < strlen(str); i += 2)
   {
      swap(&str[i], &str[i-1]);
   }
   printf("%s", str);
   return 0;
}
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
26.01.2013, 22:55
Автору нужно менять БИТы, а ты поменял Байты.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
char swap(char a)
{
  return ((a&0xAA)>>1)|
         ((a&0x55)<<1);
} 
 
int main(void)
{
   char str[] = "10101001010110001";
   size_t i;
   for (i = 0; i < strlen(str); i++)
      str[i]=swap(str[i]);
   printf("%s", str);
   return 0;
}
1
2 / 2 / 0
Регистрация: 26.01.2013
Сообщений: 40
27.01.2013, 17:17  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Код C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
char swap(char a)
{
* return ((a&0xAA)>>1)|
* * * * *((a&0x55)<<1);
}
int main(void)
{
* *char str[] = "10101001010110001";
* *size_t i;
* *for (i = 0; i < strlen(str); i++)
* * * str[i]=swap(str[i]);
* *printf("%s", str);
* *return 0;
}
В результате получается число такое же как и вводилось, только вместо единиц двойки.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
27.01.2013, 17:20
Тебя это удивляет? а что ты ожидал за результат?
0
2 / 2 / 0
Регистрация: 26.01.2013
Сообщений: 40
27.01.2013, 17:24  [ТС]
Чтобы переставлялись местами значения четных и нечетных битов. С кодом из первого ответа все работает, если я правильно понял задание.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
27.01.2013, 17:26
Тебя это удивляет? а что ты ожидал за результат?
Я возможно привёл неудачный пример использования этой функции. Строки здесь вообще не при чём, но функция работает верно
символ "0" это 49 или 00110001
если поменять в нём чётные-нечётные биты будет 00110010 , т.е. 50 или символ "1"

С кодом из первого примера??? А при чём тут вообще биты и код из первого примера???
Вот первый пример!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
void swap(char *a, char *b)
{
   char t = *a;
   *a = *b;
   *b = t;
}
 
int main(void)
{
   char str[] = "1254szaddvg45";
   size_t i;
   for (i = 1; i < strlen(str); i += 2)
   {
      swap(&str[i], &str[i-1]);
   }
   printf("%s", str);
   return 0;
}
Сейчас ты тоже назовёшь"1254szaddvg45" битами???
0
2 / 2 / 0
Регистрация: 26.01.2013
Сообщений: 40
27.01.2013, 17:32  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Тебя это удивляет? а что ты ожидал за результат?
Я возможно привёл неудачный пример использования этой функции. Строки здесь вообще не при чём, но функция работает верно
символ "0" это 49 или 00110001
если поменять в нём чётные-нечётные биты будет 00110010 , т.е. 50 или символ "1"

С кодом из первого примера??? А при чём тут вообще биты и код из первого примера???
Вот первый пример!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
void swap(char *a, char *b)
{
   char t = *a;
   *a = *b;
   *b = t;
}
 
int main(void)
{
   char str[] = "1254szaddvg45";
   size_t i;
   for (i = 1; i < strlen(str); i += 2)
   {
      swap(&str[i], &str[i-1]);
   }
   printf("%s", str);
   return 0;
}
Сейчас ты тоже назовёшь"1254szaddvg45" битами???
Ну во первых, если я правильно понимаю, то ты изменяешь байт, а не бит. Во вторых откуда ты взял "1254szaddvg45" , если там "10101001010110001"
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
27.01.2013, 17:37
это пример не мой, я его скопировал у softmob, чтобы показать, что это вообще строка, а не байты и не биты. Точнее массив байтов, если угодно. Но работы с битами тут нет никакой.

Добавлено через 1 минуту
Цитата Сообщение от West333 Посмотреть сообщение
Во вторых откуда ты взял "1254szaddvg45" , если там "10101001010110001"
и то и другое это строка. Если ты решил, что это такое "двоичное число" - ты заблуждаешься.
Тема называется "В строке символов...", спроси ещё раз у автора темы, если ты до сих пор не понял, что ему нудо было работать с БИТами, а не БАЙТами в строке СИМВОЛОВ, а не в ЧИСЛЕ
0
2 / 2 / 0
Регистрация: 26.01.2013
Сообщений: 40
27.01.2013, 18:25  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
это пример не мой, я его скопировал у softmob, чтобы показать, что это вообще строка, а не байты и не биты. Точнее массив байтов, если угодно. Но работы с битами тут нет никакой.

Добавлено через 1 минуту

и то и другое это строка. Если ты решил, что это такое "двоичное число" - ты заблуждаешься.
Тема называется "В строке символов...", спроси ещё раз у автора темы, если ты до сих пор не понял, что ему нудо было работать с БИТами, а не БАЙТами в строке СИМВОЛОВ, а не в числе
Я и есть автор темы. И про первый ответ я уже понял, но почему в Вашем коде результат получается с двойками? И как определить правильность работы программы?

Добавлено через 22 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я возможно привёл неудачный пример использования этой функции. Строки здесь вообще не при чём, но функция работает верно
символ "0" это 49 или 00110001
если поменять в нём чётные-нечётные биты будет 00110010 , т.е. 50 или символ "1"
В этом примере же проверяется четность всего байта и изменяются только последние биты. Кстати в программе при вводе 49, результат получается 86.

Добавлено через 16 минут
С цифрами разобрался, все работает правильно. Единственная проблема - если ввести первое число 7, то результат получается не 11, а ";". И нужно разобраться как работает с буквами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2013, 18:25
Помогаю со студенческими работами здесь

Переставить местами элементы чётных и нечётных столбцов матрицы
Задана матрица m×n. Переставить местами элементы чётных и нечётных столбцов.

Из двух целых чисел А и B собрать одно, состоящее из четных битов A и нечетных битов B...
Нужна помощь с задачей. Из двух целых чисел А и B собрать одно, состоящее из четных битов A и нечетных битов B

В произвольном тексте из файла переставить местами слова стоящие на нечетных и четных местах и вывести в файл
Здравствуйте помогите с задачей что то не могу додуматься как сделать. В произвольном тексте из файла переставить местами слова...

В одномерном массиве переставить местами элементы, находящиеся на четных и нечетных местах. Начальный и преобразованный массивы выдать на печать форма
Написать консольное приложение.Массивы заполняются вручную с клавиатуры.самым простым способом заранее спасибо 14 В одномерном массиве...

Переставить местами элементы массива так, чтобы сначала были элементы на четных позициях, а потом на нечетных
нужно переставить местами элементы массива так, чтобы сначала были элементы на четных позициях, а потом на нечетных:) например массив: {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru