Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
1

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

22.09.2018, 20:12. Показов 1434. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если можно, напишите с // в трудных местах. Учусь на первом курсе, лекции немного отстают от лабораторных, поэтому я не могу понять как программу написать. Тема работы: циклы.
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2018, 20:12
Ответы с готовыми решениями:

Старший бит старшего байта поменять местами с младшим битом младшего байта
Ребят помогите прогу доработать. Задача такая: В одномерном массиве чисел целого типа (16 бит)...

Вывести целые числа от 2 до n, для которых значение младшего байта меньше значения старшего в двоичном представлении
Подскажите пожалуйста, как реализовать такую программу на С или на С++, которая находит все целые...

Вывести все целые числа в диапазоне от 0 до 999 сумма цифр которых равна 15
Изучал с# по интернет курсу, и застрял на этой задачке. Подскажите пожалуйста Написать ...

Найти все целые числа в диапазоне от 200 до 500, у которых ровно 6 делителей
Найти все целые числа в диапазоне от 200 до 500, у которых ровно 6 делителей. Программа выдает...

27
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
22.09.2018, 21:24 2
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
в трудных местах.
Какие именно места трудны? И есть ли собственные попытки? Если есть, и это вас не слишком затруднит, покажите.
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
23.09.2018, 10:04 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main()
{
    unsigned int n = 0;
    scanf("%u", &n);
    for(unsigned int i = 2; i != n; ++i)
    {
        unsigned char MSB = i / 256;     // Или unsigned char MSB  = (i >> 8) & 0xFF;                                               
        unsigned char LSB = i % 256;   //         unsigned char LSB  = i & 0xFF;   
        if(LSB < MSB) printf("%u ", i);
    }
    return 0;
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
23.09.2018, 10:19 4
Peoples, Ваш код годится только для двух-байтовых int.
Лучше так
C
1
 MSB = (i >> (sizeof(int) -1));
Кроме того, совсем не нужно перебирать все числа. Числа с нулевым старшим байтом не удовлетворяют условию априори
Надо бы устроить цикл по старшему байту и вложить в него цикл по младшему.

Добавлено через 3 минуты
Что-то типа
C
1
2
3
4
unsigned int x, y;
for(x=1; x<256; x++)
  for(y=0; y<x; y++)
    printf("%d\n", (x<<(sizeof(int)-1)) + y;
С проверкой на выход из интервала.
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
23.09.2018, 10:21 5
Байт,
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
диапазоне от 2 до n,
Насколько я понял, диапазон вводит пользователь
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,882
23.09.2018, 10:45 6
Байт, по постановке вопроса больше похоже что нужны именно 2-байтные числа. А для них удобно использовать объединения
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <inttypes.h>
 
typedef union{
  uint16_t val;
  struct{
    uint8_t lo;
    uint8_t hi;
  };
}num16;
 
#define fmt "0x%.2X\n"
 
int main(){
  num16 x;
  num16 max;
  scanf("%x", &max.val);
  for(x.hi = 1; x.hi < max.hi; x.hi++)
    for(x.lo = 0; x.lo < x.hi; x.lo++)
      printf(fmt, x.val);
  if(max.lo > max.hi)max.lo=max.hi;
  for(x.lo = 0; x.lo < max.lo; x.lo++)
    printf(fmt, x.val);
}
0
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
23.09.2018, 10:59  [ТС] 7
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Байт, по постановке вопроса больше похоже что нужны именно 2-байтные числа. А для них удобно использовать объединения
Нет, числа могут быть любые, их надо вводить из клавиатуры.

Добавлено через 48 секунд
Цитата Сообщение от Peoples Посмотреть сообщение
Насколько я понял, диапазон вводит пользователь
Ну, вообще, в задании не указано, но я думаю, что надо диапазон вводить с клавиатуры.

Добавлено через 7 минут
Да, забыл упомянуть... Желательно использовать только if/else, switch, &&, ||, goto(но лучше не надо ), а также циклы. Т.к. вот этот код я вообще практически не понимаю)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <inttypes.h>
 
typedef union{
  uint16_t val;
  struct{
    uint8_t lo;
    uint8_t hi;
  };
}num16;
 
#define fmt "0x%.2X\n"
 
int main(){
  num16 x;
  num16 max;
  scanf("%x", &max.val);
  for(x.hi = 1; x.hi < max.hi; x.hi++)
    for(x.lo = 0; x.lo < x.hi; x.lo++)
      printf(fmt, x.val);
  if(max.lo > max.hi)max.lo=max.hi;
  for(x.lo = 0; x.lo < max.lo; x.lo++)
    printf(fmt, x.val);
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
23.09.2018, 11:02 8
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
по постановке вопроса больше похоже что нужны именно 2-байтные числа.
А зачем нам гадать и шаманить? Через sizeof(int) все очень мило получается.
Только я со сдвигом слегка напутал. Указанную мной величину сдвига надо, конечно, умножать на 8. Все-таки в байте - 8 битов (на себе проверял!)
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
23.09.2018, 11:27 9
больше вопросов чем ответов
размер числа?
старший байт больше 0xFF больше нуля или меньше? это 255 или -1?
вот такое число 0xFEFF удовлетворяет условиям или нет? -2 и -1, -2 и 255, 254 и 255, 254 и -2????
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
Нет, числа могут быть любые,
не может быть любых
для 2х байтного числа число должно быть больше 255 все что меньше не удовлетворяет условиям
для 4 байтного аж 16777216
0
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
23.09.2018, 11:39  [ТС] 10
Цитата Сообщение от ValeryS Посмотреть сообщение
не может быть любых
для 2х байтного числа число должно быть больше 255 все что меньше не удовлетворяет условиям
для 4 байтного аж 16777216
Я имел ввиду что n - любое целое число.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
23.09.2018, 11:42 11
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
Я имел ввиду что n - любое целое число.
а теперь распиши задачку на бумажке и поймешь что не любое
например 4х байтный int
если n меньше чем 16777216 то смело можно писать 0 даже не производя расчеты
0
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
23.09.2018, 11:48  [ТС] 12
Цитата Сообщение от ValeryS Посмотреть сообщение
а теперь распиши задачку на бумажке и поймешь что не любое
например 4х байтный int
если n меньше чем 16777216 то смело можно писать 0 даже не производя расчеты
Ну да, в том то и дело, поэтому я и не понимаю как сделать такую программу.
С каждым ответом на форуме мне всё больше кажется, что мне просто надо придумать себе число n и посчитать числа. Т.к. в самой задаче не сказано, вводить n с клавиатуры или нет.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
23.09.2018, 12:13 13
Цитата Сообщение от ValeryS Посмотреть сообщение
больше вопросов чем ответов
Согласен!
По началу тоже написал
C
1
#define LL(n) ( ( ( (n) >> ( sizeof(n) - 1 ) ) & 0xff ) > ( (n) & 0xff ) )
но понял, что это не решение
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
Я имел ввиду что n - любое целое число.
Любое - это замечательно! а Целое - ещё лучше! То есть может быть как положительным, так и отрицательным? Или всё-таки число не только целое, оно ещё и натуральное? Теперь что значит "любое"? Максимальный тип данных для хранения "любого" натурального числа - uint64_t, 8 байт. В него-то должно помещаться, или велкам ту длинная арифметика?
В любом случае, думаю, задача сводится к тому, чтобы для начала понять, сколько байт число в памяти занимает, а уж потом старший (каким бы он там ни был), с младшим сравнивать...
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
23.09.2018, 12:16 14
Цитата Сообщение от easybudda Посмотреть сообщение
( (n) >> ( sizeof(n) - 1 )
может все таки так
C
1
 (n) >> ( sizeof(n*8) - 1 )
sizeof то в байтах меряет
1
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
23.09.2018, 12:23  [ТС] 15
Цитата Сообщение от easybudda Посмотреть сообщение
Любое - это замечательно! а Целое - ещё лучше! То есть может быть как положительным, так и отрицательным? Или всё-таки число не только целое, оно ещё и натуральное? Теперь что значит "любое"? Максимальный тип данных для хранения "любого" натурального числа - uint64_t, 8 байт. В него-то должно помещаться, или велкам ту длинная арифметика?
В любом случае, думаю, задача сводится к тому, чтобы для начала понять, сколько байт число в памяти занимает, а уж потом старший (каким бы он там ни был), с младшим сравнивать...
Отрицательным не может быть т.к. в условии задачи диапазон от 2 до n.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
23.09.2018, 12:40 16
Цитата Сообщение от ValeryS Посмотреть сообщение
может все таки так
Да точно так! Но проблемы не решает.
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
Отрицательным не может быть т.к. в условии задачи диапазон от 2 до n.
С какого перепуга? Диапазон может быть и от 2 до -1002 с шагом -1. А вот с натуральными числами всё проще - они все положительные по определению.
0
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
23.09.2018, 12:44  [ТС] 17
Цитата Сообщение от easybudda Посмотреть сообщение
С какого перепуга? Диапазон может быть и от 2 до -1002 с шагом -1. А вот с натуральными числами всё проще - они все положительные по определению.
Не думаю что на 3 неделе изучения си с нуля будут так усложнять задания. Надеюсь будет понятно на украинском.
Вот всё что я знаю:
Миниатюры
Найти все целые числа в диапазоне от 2 до n, у которых значение младшего байта меньше чем значение старшего и вывести  
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
23.09.2018, 12:46 18
NULP PZ13, ну да Бог с ним, какое-то ограничение для максимального числа должно быть? Вы к примеру какие типы переменных для хранения целых чисел проходили?
0
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 30
23.09.2018, 12:54  [ТС] 19
Цитата Сообщение от easybudda Посмотреть сообщение
NULP PZ13, ну да Бог с ним, какое-то ограничение для максимального числа должно быть? Вы к примеру какие типы переменных для хранения целых чисел проходили?
char, short, int, long.
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,882
23.09.2018, 13:20 20
Цитата Сообщение от Байт Посмотреть сообщение
А зачем нам гадать и шаманить? Через sizeof(int) все очень мило получается.
в постановке задачи ТСа через sizeof получится разве что неправильный ответ при правильном алгоритме
Цитата Сообщение от NULP PZ13 Посмотреть сообщение
Т.к. вот этот код я вообще практически не понимаю)
он аналогичен коду Байта, только циклы сделаны более наглядно и исправлен небольшой баг (второй цикл). В объединении
C
1
2
3
4
5
6
7
typedef union{
  uint16_t val;
  struct{
    uint8_t lo;
    uint8_t hi;
  };
}num16;
поле val обозначает 16-битное число (собственно, число), lo - младший байт, hi - старший байт. Названы по аналогии Си-шным и асмовым макросам младшего и старшего байта. То есть можно записать num16 x; x.val = 0x1234; тогда x.lo будет 0x34, а x.hi будет 0x12.
0
23.09.2018, 13:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2018, 13:20
Помогаю со студенческими работами здесь

Определение младшего и старшего байта
Всем привет, подскажите пожалуйста, как определить младший и старший байт от 10-го числа типа 20250...

Функция нахождения старшего и младшего байта
Доброго всем времени суток. Требуется найти функцию аналогичную функции Lo (функция) Возвращает...

Логическое сложение младшего и старшего байта слова
Вот собственно условие задачки: Реализуйте с помощью логических операцию, при которой младший байт...

Напечатать все значение n при которых все числа последовательности будут не меньше а
Рассмотрим последовательность чисел 1+1/2 1+1/3 , … , 1+1/n . Напечатать все значение n при...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru