Вроде того 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; }
Хочу создать многопоточное приожение, к примеру граббер сайтов. Имееться файл размером 10мб, как лучше сделать: 1.поделить его на Н частей (потоков) -- работает очень медленно, жрет много ОЗУ. 2. загрузить файл в вектор и использовать крит. секции, сомневаюсь что будет быстрее первого варианта
Задание Сформировать массив, содержащий сведения о сдаче студентами сессии. Структурный тип со-держит поля: индекс группы, фамилия студента, оценки по пяти экзаменам ("з" - зачет, "н" - неза-чет). Написать программу, выдающую информацию: -средний балл, полученный каждым студентом группы X, и всей группы в целом. Помогите советом, каким должен быть алгоритм сбора количества одинаковых индексов групп у каждого студента. Т.е в результате у меня должна быть инфа: сколько человек в каждой группе. З.Ы. Насчет подсчета среднего балла вопрос не стоит.
////////////////////////// int Grupa_1,Grupa_2,Grupa_3. for(.......) { if (index==1) Grupa_1++; if (index==2) Grupa_2++; ........ } довольна простенько, если найду время напишу те ее) ну или закончим твою )
работа с файлом через потоки очень меленая и проблематична ! думаю сразу же исключить ... 2 вариант быстрее (возможно) тут файл можно поделить в 2 вектора к примеру и работать 2 потоками естественно ) быстродействие тут может зависеть от того что именно ты делаешь с файлом
В память все равно нужно грузить так или иначе. Так как с ней работать быстрее. Здесь трудно ответить, нужно делать профайлинг для количества потоков, их синхронизации между собой. К тому же необходимо предусмотреть, что бы части были такие, что бы за один поворот шпинделя было считано как можно больше данных.
#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? В книге по которой учу не достаточно подробно обьясняется. обьясните пожалуйста, буду благодарен, может кому то еще будет интересно.
Согласен , а еще хороший вариант это, дочерченные процессы помню делал на линуксе, реально прибавляет скорости ... как дела обстоят на Win не помню )
по какому принципу он обрабатывает 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
Я уже не знаю что и думать.. логика должна быть верная.. Вобщем нужно из каждой строчки файла удалять все что будет после второго двоеточия включительно. Я просто записываю в 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; }
думая дело тут : 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 желательно сюда строчку из файла и что именно он не так делает
--------------------------- 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) --------------------------- Прервать Повтор Пропустить --------------------------- вот такую херню ехе выдает при запуске...
Ясно же написано - переменная k используется до того, как была инициализирована. То есть ты используешь значение переменной k до того, как хотя бы какое-то значение ей было присвоено.
видишь ли, на с++ нельзя инкрементировать то у чего еще нет значения если бы ты писал бы это на Java (там при инициализации всем переменных дают значение 0! НОЛЬ! ) то проблем бы не было ...
Здравствуйте. Нужна помощь в перегрузке оператора *= для класса HugeInt ( очень большие числа ). Операцию += для того же класса реализировал так и она работает, не могу разобраться с умножением. Прошу помощи.
если не знаешь как их умножать то вот так > 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; }