[ 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. XaKeR-SpAm

    XaKeR-SpAm New Member

    Joined:
    18 Jun 2009
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    а как правильно записать структуру в файл?? и считать из файла?
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Вроде того

    Code:
    #include <stdio.h>
    #include <string.h>
    
    struct sample
    {
        int a;
        int b;
        char c[16];
    };
    
    typedef struct sample sample;
    
    int main()
    {
        sample src = {0}, dst = {0};
    
        FILE * f = fopen("file.txt", "w+b");
        if(f)
        {
            src.a = 12;
            src.b = 15;
            memcpy(src.c, "vasya", 5);
    
            fwrite(&src, sizeof(sample), 1, f);
    
            fseek(f, 0, SEEK_SET);
    
            fread(&dst, sizeof(sample), 1, f);
    
            fclose(f);
    
            printf("%d - %d - %s", dst.a, dst.b, dst.c);
        }
    
        return 0;
    }
    
     
    _________________________
  3. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Хочу создать многопоточное приожение, к примеру граббер сайтов.
    Имееться файл размером 10мб, как лучше сделать:
    1.поделить его на Н частей (потоков) -- работает очень медленно, жрет много ОЗУ.
    2. загрузить файл в вектор и использовать крит. секции, сомневаюсь что будет быстрее первого варианта
     
  4. fobia_smog

    fobia_smog New Member

    Joined:
    31 May 2010
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Задание
    Сформировать массив, содержащий сведения о сдаче студентами сессии. Структурный тип со-держит поля: индекс группы, фамилия студента, оценки по пяти экзаменам ("з" - зачет, "н" - неза-чет).

    Написать программу, выдающую информацию:
    -средний балл, полученный каждым студентом группы X, и всей группы в целом.

    Помогите советом, каким должен быть алгоритм сбора количества одинаковых индексов групп у каждого студента. Т.е в результате у меня должна быть инфа: сколько человек в каждой группе.
    З.Ы. Насчет подсчета среднего балла вопрос не стоит.
     
    #7104 fobia_smog, 20 Mar 2012
    Last edited: 20 Mar 2012
  5. Kavabango

    Kavabango New Member

    Joined:
    14 Nov 2008
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    Если просто пробежаться по всем элементам массива и увеличивать переменную, если группа нужная
     
  6. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1
    //////////////////////////
    int Grupa_1,Grupa_2,Grupa_3.

    for(.......)
    {
    if (index==1) Grupa_1++;
    if (index==2) Grupa_2++;
    ........
    }
    довольна простенько, если найду время напишу те ее)
    ну или закончим твою )
     
  7. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1
    работа с файлом через потоки очень меленая и проблематична !
    думаю сразу же исключить ...

    2 вариант быстрее (возможно) тут файл можно поделить в 2 вектора к примеру и работать 2 потоками естественно )

    быстродействие тут может зависеть от того что именно ты делаешь с файлом :confused:
     
    1 person likes this.
  8. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    В память все равно нужно грузить так или иначе. Так как с ней работать быстрее.

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

    К тому же необходимо предусмотреть, что бы части были такие, что бы за один поворот шпинделя было считано как можно больше данных.
     
    1 person likes this.
  9. Dethrone

    Dethrone New Member

    Joined:
    2 Dec 2011
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    #include "stdafx.h"
    #include <iostream>
    #include <iterator>
    using namespace std;
    int _tmailn( int argc, _TCHAR* argv[])
    {
    istream_iterator<int, char> ii(cin);
    int i1=*i1;
    cout<<i1;
    system("pause");
    return 0;
    }

    не могу понять куда указывает итератор, если на обьект вывода, то почему в шаблон вставляется тип int,
    если на целое значение, то по какому принципу он обрабатывает cin?
    В книге по которой учу не достаточно подробно обьясняется.
    обьясните пожалуйста, буду благодарен, может кому то еще будет интересно.
     
  10. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1
    Согласен , а еще хороший вариант это, дочерченные процессы помню делал на линуксе, реально прибавляет скорости ... как дела обстоят на Win не помню )
     
  11. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1
    по какому принципу он обрабатывает cin?
    Вот неплохой пример:
    int main () {
    double val1, val2;
    cout << "Please, insert two values: ";

    istream_iterator<double> eos; // end-of-stream iterator
    istream_iterator<double> iit (cin); // stdin iterator

    if (iit!=eos) val1=*iit;

    iit++; // тут идет уже инкрементация и он указывает на val2
    if (iit!=eos) val2=*iit;

    cout << value1 << "*" << value2 << "=" << (value1*value2) << endl;

    return 0;
    }
    /// в твоём случае он указывает именно на INt
     
  12. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    Я уже не знаю что и думать.. логика должна быть верная..

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

    Я просто записываю в out все что идет до второго двоеточия.. но что то не выходит..

    #include "stdafx.h"
    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;

    int main()
    {

    ifstream in("in.txt");
    if (!in) {exit(1);}

    ofstream out("out.txt");
    if (!out) {exit(1);}

    string s;
    int i,k;
    while (!in.eof())
    {
    in>>s;
    for (i=0;i<sizeof(s);i++)
    { if (s==':') {k++; if (k==2) {k=0; break;} }
    out<<s;
    }
    out<<endl;
    }
    in.close();
    out.close();

    system("pause");
    return 0;
    }
     
  13. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1

    думая дело тут :
    for (i=0;i<sizeof(s);i++)
    for (i=0;i<sizeof(s);i++)
    { if (s==':') {k++; if (k==2) {k=0; break;} }
    out<<s[i+1]; //чтоли ? потому что если s=":" ?? а не "dasdas:dsad" или ":dasdsa" "dasdsa:"
    }
    string1 string2 : string3
    желательно сюда строчку из файла и что именно он не так делает
     
  14. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0


    ---------------------------
    Microsoft Visual C++ Debug Library
    ---------------------------
    Debug Error!

    Program: K:\My project\convert_lpt_to_lp\Debug\convert_lpt_to_lp.exe
    Module: K:\My project\convert_lpt_to_lp\Debug\convert_lpt_to_lp.exe
    File:

    Run-Time Check Failure #3 - The variable 'k' is being used without being initialized.

    (Press Retry to debug the application)
    ---------------------------
    Прервать Повтор Пропустить
    ---------------------------

    вот такую херню ехе выдает при запуске...
     
  15. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Ясно же написано - переменная k используется до того, как была инициализирована. То есть ты используешь значение переменной k до того, как хотя бы какое-то значение ей было присвоено.
     
  16. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    покажи в коде где я ее использую до инициации?
     
  17. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Задай начальное значение переменной k (проинициализируй).
     
  18. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1

    видишь ли, на с++ нельзя инкрементировать то у чего еще нет значения
    если бы ты писал бы это на Java (там при инициализации всем переменных дают значение 0! НОЛЬ! ) то проблем бы не было ...
     
  19. SeoBee

    SeoBee New Member

    Joined:
    9 Oct 2011
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте. Нужна помощь в перегрузке оператора *= для класса HugeInt ( очень большие числа ).
    Операцию += для того же класса реализировал так и она работает, не могу разобраться с умножением. Прошу помощи.

     
  20. _visor_

    _visor_ New Member

    Joined:
    9 Oct 2011
    Messages:
    52
    Likes Received:
    4
    Reputations:
    1
    если не знаешь как их умножать то вот так >

    void ЧHuge(Huge A, Huge B, Huge C)
    /* С <- A x B */ думаю понятно что А В и С
    { int i,j,Т=0;

    С[0]=A[0]+B[0]-1;
    for (i=1;i<=A[0]+B[0];) чC[i++]=0;
    for (i=1;i<=A[0] i++)
    for (j=1;j<=B[0] j++)
    C[i+j-1]+=A*B[j]
    for (i=1;i<=C[0];i++)
    { T=(C+=T)/10;
    C%=10;
    }
    if (T) C[++C[0]]=T;
    }
    тут дело имеем с Векторами ) все как в 1 классе только нет ручки и тетрадки а есть масивы.

    вот пример>
    3 1 2 x
    8 7
    ----------
    21 7 14
    24 8 16
    -----------
    24 29 23 14 +
    2 3 2 1
    --------------
    2 7 1 4 4 <<РЕЗ
    ----------------------------------------------------------------------
    есть еще способ
    алгоритм немного другой [O(Nsqrt(N))] что такое "О" учили думаю
    итак
    есть АxB где N количество цифр )

    А x в = (С x 10N/2 + D) х (Е x 10N/2 + F) = Cе x 10N (CF + DE) x 10N/2 + DF
    блин что то передумал я объяснять ))) да и могу ошибаться \

    вот на будущее деление тебе )


    unsigned HugeDivide(Huge A, unsigned long X)
    /* A <- A/X возвращает A%X */
    { int i;
    unsigned long R=0

    for (i=A[0];i;i--)
    { A=(R=10*R+A)/X
    R%=X;
    }
    while (!A[A[0]] && A[0]>1) A[0]--
    return R;
    }
     
Thread Status:
Not open for further replies.