[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    ты там написал:
    sprintf(s,"%f", res);
    но res вообще-то целого типа. Попробуй
    sprintf(s,"%d", res);
     
    1 person likes this.
  2. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Code:
    FILE *MyFile, *OUT;
    char temp;
    Symbols[3] = {'a', 'b', 'c'};
    ......
    
    MyFile = fopen("1.txt", "r");
    OUT = fopen("2.txt", "wb");
    while(!feof(MyFile))
    {
      fread(&temp, 1, sizeof(char), MyFile);
      for(i=0; i<3; i++)
        if(temp == Symbols[i])
    	fwrite((const char*)&a[i], 1, sizeof(a[i]), OUT);
    }
    
    Получается файл намного больше по размеру, немогу понять как функция fwrite пишет =(
     
  3. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    код не весь. Если ты объявлял так:
    char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}};
    то переменная `a` будет размером в 4 байта. Соответственно fwrite будет записывать немного больше чем ожидалось
     
    #1823 bons, 12 Nov 2008
    Last edited: 12 Nov 2008
  4. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0

    На этот ляп ладно, можно [4][4] сделать, мня интересует как вместо символа размером 8 байт записать двоичный код размером 4?
     
  5. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    ага, я наконец врубился что ты хочешь.
    кстати символ скорее 1 байт чем 8.
    программа твоя ..гхм.. замечательна, но работать правильно она будет только если ты изменишь там пару строчек:

    Code:
    FILE *MyFile, *OUT;
    char temp;
    Symbols[3] = {'a', 'b', 'c'};
    ......
    
    MyFile = fopen("1.txt", "r");
    OUT = fopen("2.txt", "wb");
    while((temp=fgetc(MyFile))!=EOF)
    {
      for(i=0; i<3; i++)
        if(temp == Symbols[i])
    	fwrite((const char*)&a[i], 1, sizeof(a[i]), OUT);
    }
    
     
  6. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Вы не понимаете саму суть битов. Бит - 1/8 часть байта, которая может быть либо 0 либо 1. Отдельный бит записать в файл нельзя. Записать его можно только в виде байта. Соответственно перед записью битов необходимо их паковать в байты, и при накоплении количества битов кратному 8ми, записывать их в выходной файл. Вот накатал небольшое решение для вашего вопроса:

    Code:
    #include <stdio.h>
    
    void main()
    {
    	FILE *in, *out;
    
    	//кодирование 3мя битами
    	int ar[3] = {0x00, 0x05, 0x07}; //коды 'a', 'b', 'c'
    	char buf; //тут сидит считанный байт с файла
    
    	in = fopen("f1.txt", "rb");
    	out = fopen("f2.bin", "wb");
    
    	int count = 0;
    
    	union {
    		int out_buf;
    		char b[4];
    	} data;
    
    	data.out_buf = 0;
    
    	while(fread(&buf, 1, 1, in))
    	{
    		if(count < 8)
    		{ //не записываем, пока не наберем кратное 8ми
    			//количество битов
    			data.out_buf = (data.out_buf<<3) + ar[buf - 'a'];
    			count++;
    		}
    		else
    		{ //запись битов			
    			fwrite(&data.b[2], 1, 1, out);
    			fwrite(&data.b[1], 1, 1, out);
    			fwrite(&data.b[0], 1, 1, out);
    			data.out_buf = ar[buf - 'a'];
    			count = 1;
    		}
    	}
    
    	if(count > 0)
    	{ //запись остатков
    		fwrite(&data.b[2], 1, 1, out);
    		fwrite(&data.b[1], 1, 1, out);
    		fwrite(&data.b[0], 1, 1, out);
    	}
    
    	fclose(out);
    	fclose(in);
    }
    
    Вот пример файла для кодирования (f1.txt) 22 байта:

    Code:
    bacbabcabcbacbabcbacba
    После ужатия получили 12 байт, но в конце есть лишние байты, т.к. количество битов не кратно 8ми (22*3 = 66), соответственно в начале файла нужно хранить ещё выходной размер файла, чтобы опустить лишнюю информацию в конце файла, но это уже за рамками поста (пиши в ПМ, если что).

    Следует учитывать, что по Хаффману для каждого символа должен быть свой код, т.е. во входном файле все возможные символы должны быть предугаданы тобой, то бишь быть в массиве ar.
     
    1 person likes this.
  7. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    кто шарит реализовать звучание звука в MFC приложении..
    уже пару постов создавал но так и не получилось..
    посоветуйте плиз кто что знает)
    смотрите посты ЗДЕСЬ и ЗДЕСЬ
    спасибо.
     
    _________________________
  8. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    http://depositfiles.com/files/pizib527l
     
    1 person likes this.
  9. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Есть код.
    Code:
    struct list{int elem;
                list *next;
                list *down;};
    
    int main() {
    	list *curr, *head;
    	head = NULL;
    	curr = NULL;
    
    	cin >> stolb;
    	cin >> strok;
    
    	for (int j=0; j<strok; j++){
    		for(int i=0; i<stolb; i++) {
    			curr = (list*) new int [strok];
    			curr->elem = rand()%10+1;
    			curr->next = head;
    			head = curr;
    		}
    		curr->down = head;
    	}
    return 0;
    }
    
    Как можно добавить еще одну строку в конец, без создание еще одной такой же структуры, переноса туда данных, потом переопределение этой и возврата данных+новая строка.
    Я уже все перепробовал. Максимум что удалось это добавить строку в начало. А все остальное что я пробовал заставляет вылетать программу с ошибкой при выводе структуры(залезаю где то за границы)
     
  10. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    Вот кодес писал не так уж и давно. Там реализован класс с добавлением в конец и в позицию.

    PS компилил под borland C 3.1 под студию может не скомпилиться,но общий смысл понять можно и так.
     
    3 people like this.
  11. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Начинаю изучать C++
    в наличии есть Mc Visual studio 2005 и Borland Cpp Builder 6.0
    с чего начать?

    в Борланде пока только научился работать с циклами и массивами в консольном режиме

    в Visual studio пока нет
    как я понял там отличаются операции ввода-вывода данных
    в борланде cout << "World!" а в Visual Studio printf("World!")

    что лутьше начать изучать и подскажите пожайлусто стоящую литературу для начинающих с примерами
     
  12. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Ты неправильно понял. cout можно использовать и там и там. printf это оператор вывода от Си, но его можно использовать и в студии.
     
    2 people like this.
  13. gisTy

    gisTy Elder - Старейшина

    Joined:
    24 May 2008
    Messages:
    432
    Likes Received:
    160
    Reputations:
    27
    для использования cin/cout надо подключать библиотеку iostream.h
    Code:
    #include "iostream.h"
    а для printf/scanf билиотеку stdio.h
    Code:
    #include "stdio.h"
     
    2 people like this.
  14. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    Как это с чего начать :D,ты начинающий у тебя выбора нету.
    Скачай/Купи кингу о данном языке и начни изучать язык,для начала оставь WinAPI,учи стандартные функции языка.
     
    #1834 xismyname, 13 Nov 2008
    Last edited: 13 Nov 2008
    2 people like this.
  15. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    n4e/\@, gisTy, xismyname
    Спасибо ребят

    Посоветуете пожайлусто литературу по данному языку которая подойдёт начинающему
     
  16. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    Сначала определись на чём писать будешь. На си или на с++.По синтаксису они в принципе похожи,но подходы к программированию на них абсолютно разные(с++ - объектно ориентирован). Во всяких системных штуках чаще используется си,а в нормальных приложениях с++.


    Вот тут 2 книги от создателя с++: http://lib.ru/CPPHB/
     
    1 person likes this.
  17. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Почитай эти две темы: 1 и 2 для новичков подойдет Джесс Либерти "C++ за 21 день" и Дейтел "Как программировать на C++". Я учился по второй, помоему она более доступно написано.
     
  18. zythar

    zythar Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    517
    Likes Received:
    109
    Reputations:
    5
    а сис штучки ненормальные чтоль? (*
    насчет книг. если С, то однозначно K&R.
    если С++, то хз. а чем вам книга Бьёрна Страуструпа не нравится?
     
  19. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    ИМХО главное не книги, а количество написанных программ. Если прочитать Страуструпа не написав ни единой строчки кода то вряд ли научишься прогать на плюсах ;-). Лично я читал и K&R и Страуструпа но ни одну из книг не прочел от корки до корки. Так что ZET36 больше практики и будет тебе счастье.
    ЗЫ вот ещё хороший сайт - cplusplus.com, так описание библиотек и куча примеров.
     
    2 people like this.
  20. WAYS

    WAYS New Member

    Joined:
    12 Nov 2008
    Messages:
    36
    Likes Received:
    0
    Reputations:
    0
    Как "принудительно" перезагрузить компьютер в C#?

    Пока нашел только такой способ:

    Code:
    System.Diagnostics.Process.Start(@"cmd.exe", String.Format(@"/C {0} > {1}", "shutdown -r -f -t 0", "tmpFileName"));
    
     
    #1840 WAYS, 15 Nov 2008
    Last edited: 15 Nov 2008
Thread Status:
Not open for further replies.