Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> единичные биты в целых неотрицательных числах 
:(
    Опции темы
matekaitis
Дата 11.10.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.10.2009

Репутация: нет
Всего: нет



По практикуму задали задачу: "В исходном файле содержится набор целых неотрицательных чисел. Напишите программу, которая для каждого числа определяет, сколько единичных разрядов (битов, содержащих 1) существует в его двоичном представлении." 
Вот написал программу:


Код

#include <stdio.h>

int main(void)
{
  FILE *f;
  char ch;
  int c,e=0,k;

  if((f=fopen("числа.txt","r")) == NULL) 
    {
  printf("Ошибка при открытии файла.\n");
  return(1);
    }
   while(fscanf(f,"%d",&c)==1)
   {
    if(c<0)
  {
    printf("neverniy vvod");
    return (2);
  }        

   }
    if((f=fopen("числа.txt","r")) == NULL) 
    {
  printf("Ошибка при открытии файла.\n");
  return(1);
    }

  while(fscanf(f,"%d",&c)==1)
  {   
    printf("%d ",c); 
    k=c;
  do
  {
    e=k%2+e;
    k=k/2;
  }
  while(k>=1);
  printf("%d\n",e);
  e=0;
  }
   
 
  fclose(f);

  return 0;
}




У меня не получается описать условие, что числа неотрицательные..........как мне это сделать

Это сообщение отредактировал(а) Alexeis - 11.10.2009, 19:59
PM MAIL   Вверх
Galaran
Дата 11.10.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 25.5.2009

Репутация: нет
Всего: 2



Просто сравниваешь каждое число с нулем. Если оно меньше нуля - ошибка и выход. Но вообще, если в задании указано, что изначально в файле числа неотрицательные, то, ИМХО это не надо делать

PS используй не цитирование, а тег code
PM MAIL   Вверх
darkart
Дата 11.10.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: нет
Всего: 31



Код

#include <stdio.h>
#include <conio.h>

const char* FILE_NAME = "numbers.txt";//имя файла
const char* FILE_OPEN_MODE = "r";//открытие для чтения

int main()
{
    FILE* file = ::fopen( FILE_NAME, FILE_OPEN_MODE );//открытие файла с именем FILE_NAME в режиме FILE_OPEN_MODE

    if( file == 0 )//если указатель NULL
    {
        ::printf( "Error on open file\n" );//печать сообщения об ошибке
        ::getch();//ожидание ввода
        return 1;//возврат кода ошибки
    }

    int number;//считываемое число
    unsigned int result;//результат - количество единичных разрядов в двоичном представлении числа

    while( fscanf( file, "%d", &number ) != EOF )//пока не конец файла читаем из файла file целые данные в переменную number
    {
        ::printf( "Result for number \"%d\" - ", number );//печать начала сообщения
        if( number >= 0 )//если прочитанныое число больше или равное 0
        {
            result = 0;//инициализиуем результат для каждого неотрицательного числа
            do
            {
                result += number & 1;//прибавляем к результату последний бит числа number
            }
            while( number >>= 1 );//сдвигаем number на 1 разряд вправо
            ::printf( "(%d bits == 1)\n", result );//печатаем количество битов равных 1 для прочитанного числа
        }
        else//число - отрицательное
        {
            ::printf( "invalid data\n" );//сообщение об ошибке : найдено отрицательное число
            //return 2;//расскоментировать, если требуется завершить работу при найденном отрицательном числе
        }
    }

    ::fclose( file );//закрытие файла

    ::getch();//ожидаем ввода

    return 0;//возвращаем результат
}

PM MAIL WWW ICQ Skype GTalk   Вверх
JackYF
Дата 12.10.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



matekaitis, Модератор: Название темы должно отражать ее суть! Поправил.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Anikmar
Дата 12.10.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



darkart, И?
Все работает и тему можно закрывать?

Извините, darkart, я вас с топикстартером перепутал

Это сообщение отредактировал(а) Anikmar - 12.10.2009, 22:01
PM MAIL ICQ   Вверх
jonie
Дата 13.10.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



matekaitis, для байтов сделайте таблицу с предрачетными значениями - и получайте сразу ответ как ptr[byte]. Работает очеьочень быстро.. быстрее чем sse4...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
mes
Дата 13.10.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(jonie @  12.10.2009,  23:34 Найти цитируемый пост)
для байтов сделайте таблицу с предрачетными значениями - и получайте сразу ответ как ptr[byte]. 

matekaitis, подобные темы возникали уже не раз не этом форуме, и если воспользуетесь поиском найдете и другие "хитрые" способы подсчета битов.



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0656 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.