core_st Опубликовано 8 апреля, 2009 Жалоба Поделиться Опубликовано 8 апреля, 2009 Тааак...следующие особенности програмы... Если написать выражения вида (2+15/3+2) програма так же неправильно считает. Блин...может у кого-нить есть рабочий вариант с числами любого разряда? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 апреля, 2009 Жалоба Поделиться Опубликовано 8 апреля, 2009 Random: Слить две упорядоченные последовательности чисел в одну. (при помощи рекурсии).В следующий раз попросят это сделать при помощи тензорного исчисления, вероятно . #include<stdio.h>int a[100],b[100],c[200]; void f(int i, int j){if(i+j+1>=0){if(i<0)c[i+j+1]=b[j--]; if(j<0)c[i+j+1]=a[i--]; if(i>=0&&j>=0)a[i]>=b[j]?(c[i+j+1]=a[i--]):(c[i+j+1]=b[j--]); f(i,j);}}main(){int k,m,n;printf("\ndimension of A? "); scanf("%d",&m);printf("\nA?\n"); for(k=0;k<m;k++)scanf("%d",&a[k]);printf("\ndimension of B? "); scanf("%d",&n);printf("\nB?\n"); for(k=0;k<n;k++)scanf("%d",&b[k]); f(m-1,n-1);for(k=0;k<m+n;k++)printf("%8d",c[k]);getchar(); getchar();} Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 8 апреля, 2009 Жалоба Поделиться Опубликовано 8 апреля, 2009 Народ у меня программа пишет ошибку Function `getchar` should have a prototipe :) что надо подправит надо чтоб запускало программу Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 апреля, 2009 Жалоба Поделиться Опубликовано 8 апреля, 2009 Dr0n4eG: Вероятно, заголовочный файл с прототипом getchar(), например, stdio.h Не подправлять его, конечно, а подключить командой #include<stdio.h> Ссылка на комментарий Поделиться на другие сайты Поделиться
Random Опубликовано 8 апреля, 2009 Жалоба Поделиться Опубликовано 8 апреля, 2009 В следующий раз попросят это сделать при помощи тензорного исчисления, вероятно . С чего ты взял? А за программу спасибо... Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 апреля, 2009 Жалоба Поделиться Опубликовано 8 апреля, 2009 Random: С чего ты взял?Просто использование для простого слияния рекурсии делает программу намного сложнее по сравнению с такой же программой без рекурсии. А получившаяся программа будет в десятки раз медленнее выполняться. Ссылка на комментарий Поделиться на другие сайты Поделиться
core_st Опубликовано 9 апреля, 2009 Жалоба Поделиться Опубликовано 9 апреля, 2009 http://www.softboard.ru/index.php?s=&s...st&p=442423 Будут какие соображения? Да, забыл добавить - на входе есть строка вида xxx + xx + xxxx + x + xx = x - цифра 0..9 Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 апреля, 2009 Жалоба Поделиться Опубликовано 11 апреля, 2009 Будут какие соображения?Да никаких. В таких случаях надо отлаживать, отладочных средств в интегрированной среде хватает, или хотя бы вставить распечатки промежуточных результатов. Или, если программа чужая, чем разбираться в чужой программе, проще брать алгоритм и писать заново самому. Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 11 апреля, 2009 Жалоба Поделиться Опубликовано 11 апреля, 2009 Мне по объектно-ориентированному прогораммированию задали написать программку, которая конвертировала бы файлы. Сам процесс конвертирования оформить в виде функции. Помогите пожалуйста, только учтите что я учусь только на 1 курсе и по дисциплине было всего лишь порядка 8-10 лекций... :cool: Забыла сказать - язык с++ Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 апреля, 2009 Жалоба Поделиться Опубликовано 11 апреля, 2009 Nata6enka: Слишком абстрактное задание. То же самое, что задание преобразовать текст, не говоря какой и во что. Конечно, любой файл можно без труда изменить так, что его родной компьютер не узнает, но пока что задание выглядит как в сказке: пойди туда - не знаю куда, принеси то - не знаю что. Например, берем файл, содержащий текст и конвертируем его в файл, в котором все цепочки пробелов заменены на одиночные пробелы - подходит? Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 12 апреля, 2009 Жалоба Поделиться Опубликовано 12 апреля, 2009 Из исходной строки a$ (на русском языке) вывести в обратном алфавитном порядке различные имеющиеся гласные буквы. Определить, сколько раз в строку a$ входят символы, перечисленные в строковом массиве M$(n). Вывести строку и результаты расчета: символы и соответствующие числа. Только с помощью простых операторов...если можно.. Ссылка на комментарий Поделиться на другие сайты Поделиться
dimka-xd Опубликовано 12 апреля, 2009 Жалоба Поделиться Опубликовано 12 апреля, 2009 Дана матрица X(n, m) целых чисел. Получить новую матрицу, элементы столбцов которой меньше элементов исходной матрицы на величину минимального элемента соответствующего столбца исходной матрицы. Вывести исходную и полученную матрицы. Все задачи в Qbasiq...Заранее Больщое спасибо!!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 13 апреля, 2009 Жалоба Поделиться Опубликовано 13 апреля, 2009 dimka-xd: Все задачи в Qbasiq...А ведь был такой язык... В эпоху ручных рубил. Как раз каменные топоры изобретали... Легендарные времена, когда DOS еще не было и Гейтс писал свой первый Бейсик для компьютера Альтаир с памятью в 4000 байт... Впрочем, QBASIC был написан потом, уже для DOS. Тогда имена языков писали большими буквами. И basic есть basic (базовый, простейший), а не basiq. Впрочем, писать на нем - как считать в римской системе записи чисел... Вообще задачи такого уровня надо уметь решать самому. Плюс опять же рещать тут нечего, в основном ввод-вывод. Задача 1. g$ = "яюэыуойиёеаЯЮЭЫУОЙИЁЕА"PRINT "Введите строку "; : INPUT a$FOR i = 1 TO 11: FOR j = 1 TO LEN(a$)IF MID$(a$, j, 1) = MID$(g$, i, 1) OR MID$(a$, j, 1) = MID$(g$, i + 11, 1) THEN PRINT MID$(a$, j, 1): EXIT FORNEXT: NEXTPRINT "Исходная строка: ", a$ : PRINT : PRINT "Введите количество символов "; : INPUT n: DIM m$(n) PRINT : PRINT "Введите символы с Enter после ввода каждого символа: ": FOR i = 1 TO n: INPUT m$(i): NEXTPRINT "Частоты символов:"FOR i = 1 TO n: s = 0: FOR j = 1 TO LEN(a$): IF m$(i) = MID$(a$, j, 1) THEN s = s + 1NEXT: IF s <> 0 THEN PRINT m$(i); sNEXTEND Задача 2. INPUT "n: ", n: INPUT "m: ", m: PRINTDIM x(n, m)FOR i = 1 TO n: FOR j = 1 TO m: PRINT "X("; i; ","; j; ") "; : INPUT x(i, j): NEXT: NEXTPRINT : FOR i = 1 TO n: FOR j = 1 TO m: PRINT x(i, j); : NEXT: PRINT : NEXTFOR j = 1 TO m: s = x(1, j): FOR i = 1 TO n: IF s > x(i, j) THEN s = x(i, j) NEXTFOR i = 1 TO n: x(i, j) = x(i, j) - s: NEXTNEXTPRINT : FOR i = 1 TO n: FOR j = 1 TO m: PRINT x(i, j); : NEXT: PRINT : NEXTPRINTEND P.S. При просмотре делай окно на весь экран, чтобы избежать лишних переносов строк - в отличие от более поздних языков, разделение исходного текста на строки в QBASIC имеет значение для работы программы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 14 апреля, 2009 Жалоба Поделиться Опубликовано 14 апреля, 2009 Nata6enka: Слишком абстрактное задание. То же самое, что задание преобразовать текст, не говоря какой и во что. Конечно, любой файл можно без труда изменить так, что его родной компьютер не узнает, но пока что задание выглядит как в сказке: пойди туда - не знаю куда, принеси то - не знаю что. Например, берем файл, содержащий текст и конвертируем его в файл, в котором все цепочки пробелов заменены на одиночные пробелы - подходит? Не совсем... Скорее здесь имеется в виду преобразование типов файлов. Мне не нужна программа, а скорее только кусочки ее : описание классов, и функция, выполняющая конвертизацию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 апреля, 2009 Жалоба Поделиться Опубликовано 14 апреля, 2009 (изменено) Nata6enka: Конвертирование = конвертизация = преобразование Правда, слова "конвертизация" практически не существует, оно встречается в Рунете 440 раз, в то время как конвертирование - 11 милллионов раз, но это просто по ходу обсуждения. Ты хочешь написать функцию, выполняющую преобразование неизвестно чего в неизвестно что - одного неизвестного формата файла в другой неизвестный формат файла. Конечно, C++ - мощный язык, и в нем абстрактную функцию преобразования файлов написать проще простого: virtual void conv(char *,char *)=0; Всё, функция написана! (кстати, C++ и тут остается верным себе - вместо того, чтобы обозначить абстрактную функцию каким-нибудь подходящим понятным словом вроде abstract, в нем используется ничего не говорящая ни уму, ни сердцу конструкция =0 вместо обычного тела функции в фигурных скобках). Тут параметры char * - это описания строк - имен входного и выходного файлов. Но делать описанная нами абстрактная функция, ничего, естественно, не будет до того, как ты объяснишь компилятору, как она должна это конвертирование делать. Слово "конвертирование" само по себе значит столько же, сколько слово "заклинание". Существуют сотни форматов файлов, и каждый вариант их конвертирования друг в друга - отдельный алгоритм. Для примера сделаем какой-нибудь простенький вариант конвертирования. Ну, например, просто переписывание исходного текстового файла в выходной без изменений. Итак, пишем класс для конвертирования, собственно, в нем у нас только функция (метод класса) конвертирования: class conver {virtual void conv(char *, char *)=0;}; Тут у нас параметры метода - имена входного и выходного файлов. Дальше можно создавать потомков этого класса, конкретизируя в них этот метод для определенных типов файлов. Например, #include <iostream.h>#include <fstream.h> // using namespace std;class conver {virtual void conv(char *, char *)=0;}; class convert : public conver {public: void conv(char nif[], char nof[]) {ifstream ifs(nif); ofstream ofs(nof); char letter; if (ifs.fail()) {cerr<<"error of opening of the file"<< endl; return;} while(!ifs.eof()) {letter=ifs.get(); if(letter!=-1)ofs.put(letter);} };};main(){char nif[100],nof[100]; cout<<endl<<"name of the input file? "; cin>>nif; cout<<endl<<"name of the output file? "; cin>>nof; cout<<endl; convert c; c.conv(nif,nof); } Конвертирование в этой программе, по сути, просто посимвольно переписывает содержание одного текстового файла в другой. Имена входного и выходного файлов задаются с клавиатуры. Закомментированная строка using namespace std; может быть нужна для некоторых версий компиляторов. Можно было записать это без определения абстрактного метода конвертирования и его дальнейшей конкретизации в классе-наследнике, используя сразу конкретный метод: #include <iostream.h>#include <fstream.h> // using namespace std;class convert{public: void conv(char nif[], char nof[]) {ifstream ifs(nif); ofstream ofs(nof); char letter; if (ifs.fail()) {cerr<<"error of opening of the file"<<endl; return;} while(!ifs.eof()) {letter=ifs.get(); if(letter!=-1)ofs.put(letter); } };};main(){char nif[100],nof[100]; cout<<endl<<"name of the input file? "; cin>>nif; cout<<endl<<"name of the output file? "; cin>>nof; cout<<endl; convert c; c.conv(nif,nof); } Естественно, для такой простой программы с тем же успехом можно было обойтись вообще без классов #include <iostream.h>#include <fstream.h> // using namespace std;void conv(char nif[], char nof[]) {ifstream ifs(nif); ofstream ofs(nof); char letter; if (ifs.fail()) {cerr<<"error of opening of the file"<<endl; return;} while(!ifs.eof()) {letter=ifs.get(); if(letter!=-1)ofs.put(letter);} };main(){char nif[100],nof[100]; cout<<endl<<"name of the input file? "; cin>>nif; cout<<endl<<"name of the output file? "; cin>>nof; cout<<endl; conv(nif,nof); } Сначала ты должна знать, что хочешь, и уметь описать это на русском языке. А потом уже ты переводишь с русского на понятный машине C++. Но перевести то, что ты не можешь описать на русском языке, невозможно. Изменено 14 апреля, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
core_st Опубликовано 15 апреля, 2009 Жалоба Поделиться Опубликовано 15 апреля, 2009 Задача - написать програму в с++. В файл идет запись стрктуры (поля есть в примере), потом надо считать все записи и записать их обратно в етот же файл с условием, что если поле "year" меньше заданого, тогда ети записи не писать в файл. Вот то что уже написано: //---------------------------------------------------------------------------#include <conio.h>#include <stdlib.h>#include <iostream.h>#include <fstream.h>#include <iomanip.h>struct company {char Nazva[100];char PIB[30];char form[15];int year,count_work;float balance;};void PrintFile (ifstream &inCompany){cout<<setiosflags(ios::left)<<setw(15)<<"Name"<<setw(13)<<"PIB"<<setw(11)<<"Form"<<setw(10)<<"Rik"<<setw(6)<<"Work"<<setiosflags(ios::right)<<setw(10)<<"VNP"<<endl;company blankCompany;while (! inCompany.eof()){inCompany.read((char*)&blankCompany,sizeof(blankCompany)); cout<<setiosflags(ios::left) <<setw(15)<<blankCompany.Nazva <<setw(16)<<blankCompany.PIB<<setw(11)<<blankCompany.form <<setw(10)<<blankCompany.year <<setw(6)<<blankCompany.count_work <<setiosflags(ios::showpoint|ios::right) <<setw(11)<<setprecision(3)<<blankCompany.balance<<endl; }}void main(){company blankCompany;ofstream outCompany ("G:\\baza.dat", ios::binary);if (!outCompany){ cerr<<"File can't open"<<endl; exit(1); } int count; cout<<"Write count of companies: "; cin>>count;for (int i=0; i<count; i++){ cout<<"Name of company: "; cin.getline(blankCompany.Nazva,99); cout<<"Name of director: "; cin.getline(blankCompany.PIB,29); cout<<"Having form: "; cin.getline (blankCompany.form,14); cout<<"Year of creating: "; cin>>blankCompany.year; cout<<"Count of workers: "; cin>>blankCompany.count_work; cout<<"Balanse: "; cin>>blankCompany.balance;outCompany.write((char*)&blankCompany,sizeof(blankCompany)); } outCompany.close(); ifstream inCompany ("G:\\baza.dat", ios::binary); PrintFile (inCompany); inCompany.close(); getch(); } Да и еще, в етом примере почему-то все время проскакивает ввод Названия предприятия. Помню было что-то такое с потоком cin, но исправить не могу. Да и еще, в етом примере почему-то все время проскакивает ввод Названия предприятия. Помню было что-то такое с потоком cin, но исправить не могу. вот так склероз у меня. Сам уже задавал етот вопрос. Решение собсно если кому надо - здесь: http://www.softboard.ru/index.php?s=&s...st&p=434264 Проблема с пропуском решена, но почему-то в вышеописано примере последняя запись пишется два раза в файл. Подскажите в чемь проблема. Ну и собственно само задание остается нерешенным Ссылка на комментарий Поделиться на другие сайты Поделиться
core_st Опубликовано 15 апреля, 2009 Жалоба Поделиться Опубликовано 15 апреля, 2009 Фуф, значит вот что-то состряпал. Не работает, но может легче будет кому-то помочь. Задание - запись нескольких структур "Предприятие" в файл. Сортировка предприятий за годом создания, удаление структур, в которых поле year меньше заданого. //---------------------------------------------------------------------------#include <conio.h>#include <stdlib.h>#include <iostream.h>#include <fstream.h>#include <iomanip.h>struct company {char Nazva[100];char PIB[30];char form[15];int year,count_work;float balance;};void PrintFile (ifstream &inCompany){cout<<setiosflags(ios::left)<<setw(15)<<"Name"<<setw(13)<<"PIB"<<setw(11)<<"Form"<<setw(10)<<"Rik"<<setw(6)<<"Work"<<setiosflags(ios::right)<<setw(10)<<"VNP"<<endl;company blankCompany;while (! inCompany.eof()){inCompany.read((char*)&blankCompany,sizeof(blankCompany)); cout<<setiosflags(ios::left) <<setw(15)<<blankCompany.Nazva <<setw(16)<<blankCompany.PIB<<setw(11)<<blankCompany.form <<setw(10)<<blankCompany.year <<setw(6)<<blankCompany.count_work <<setiosflags(ios::showpoint|ios::right) <<setw(11)<<setprecision(3)<<blankCompany.balance<<endl; }}void SortingByYear (ifstream &inCompany){company Change[20],Rev;int i=0;while (!inCompany.eof()){inCompany.read((char*)&Change[i],sizeof(Change[i]));i++;}inCompany.close();for (int j=0; j<i;j++)for (int k=0;k<=i;k++){if (Change[k].year>=Change[k+1].year){Rev=Change[k]; Change[k]=Change[k+1]; Change[k+1]=Rev;}}ofstream outCompany ("G:\\baza.dat", ios::binary);if (!outCompany){ cerr<<"File can't open"<<endl; exit(1); } for (k=0; k<=i; k++) outCompany.write((char*)&Change[k],sizeof(Change[k])); outCompany.close(); }void main(){char skip;company blankCompany;ofstream outCompany ("G:\\baza.dat", ios::binary);if (!outCompany){ cerr<<"File can't open"<<endl; exit(1); } int count; cout<<"Write count of companies: "; cin>>count; // zaluwae kinec stri4ku v potoci, tomy po getline prohodut pysta stri4kafor (int i=0; i<count; i++){ cout<<"Name of company: "; cin>>skip; cin.putback(skip); cin.getline(blankCompany.Nazva,99); cout<<"Name of director: "; cin.getline(blankCompany.PIB,29); cout<<"Having form: "; cin.getline (blankCompany.form,14); cout<<"Year of creating: "; cin>>blankCompany.year; cout<<"Count of workers: "; cin>>blankCompany.count_work; cout<<"Balanse: "; cin>>blankCompany.balance;outCompany.write((char*)&blankCompany,sizeof(blankCompany)); } outCompany.close(); ifstream inCompany ("G:\\baza.dat", ios::binary); PrintFile (inCompany); inCompany.close(); cout<<"\n\n"; inCompany.open("G:\\baza.dat", ios::binary); SortingByYear (inCompany); PrintFile(inCompany); int year; cout<<"\n\nInput year for clean:\n"; cin>>year; ofstream SortOutCompany("G:\\sortedbase.dat", ios::binary); if (!SortOutCompany){ cerr<<"File can't open"<<endl; exit(1); } while (! inCompany.eof()){ inCompany.read((char*)&blankCompany,sizeof(blankCompany)); if (blankCompany.year>=year) SortOutCompany.write((char*)&blankCompany,sizeof(blankCompany));} SortOutCompany.close(); inCompany.open("G:\\sortedbase.dat", ios::binary); PrintFile(inCompany); inCompany.close(); getch(); } Проблемы: 1. Последняя структура записывается два раза в файл.(или считывается два раза?) 2. Не работает функция сортировки. 3. Не работает удаление структур с годом создание меньше заданого. Прошу помощи в исправлении проблем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Random Опубликовано 15 апреля, 2009 Жалоба Поделиться Опубликовано 15 апреля, 2009 Составить прогрыммы на Си. составить программу для рисования фигуры(цвет и размер(в пределах разумного) задается случайно) для каждой отдельно: круга, элипса, квадрата, ромба, треугольника. и если можно сделать мигание с периодисностью в 0,5-7 сек. (задается случайно) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 15 апреля, 2009 Жалоба Поделиться Опубликовано 15 апреля, 2009 (изменено) Random: Для простоты напишу не пять программ, а одну на Turbo C, в которой рисуются все 5 фигур. Легко сделать пять копий и из каждой выкинуть рисование ненужных в данном варианте фигур. Рисование каждой фигуры - в отдельной строке, так что легко разобраться. #include <graphics.h>#include <stdio.h>#include <time.h>int main(){int GDriver=VGA,GMode=VGAHI,ErrorCode; int j,r,t,col,c=0,x=320,y=240;initgraph(&GDriver,&GMode,""); ErrorCode=graphresult();if(ErrorCode!=grOk){printf("Graphics Error: %s\n",grapherrormsg(ErrorCode));getch();exit();}srand(time(NULL)); col=rand()%15; col=col+1;while(1){if(!c){r=rand(); r=r%200+40; col=rand()%15+1;} setcolor(c=col-c); circle(x,y,r); rectangle(x-r,y-r,x+r,y+r); ellipse(x,y,0,360,1.3*r,r); line(x-r,y,x,y-r);line(x,y-r,x+r,y);line(x+r,y,x,y+r);line(x,y+r,x-r,y); line(x,y-r,x-1.12*r,y+r);line(x-1.12*r,y+r,x+1.12*r,y+r);line(x+1.12*r,y+r,x,y-r); t=rand(); t=t%2000+100; for(j=0;j<t;j++){if(kbhit())exit(); delay(1000);}}closegraph();} Выход из программы - нажатием любой клавиши. С периодичностью мигания могут быть некоторые сложности. так как таймер Turbo C, рассчитанный на DOS, под Windows дает задержку на несколько порядков меньше, поэтому приходится число циклов таймера подбирать вручную. У меня на компьютере - более или менее в нужных временных рамках, на других может понадобиться изменить число в операторе delay(1000); Кроме того, так как Turbo C не рассчитывался под жидкокристаллические дисплеи, в зависимости от используемого монитора могут не совсем точно выдерживаться соотношения размеров по вертикали и горизонтали. Изменено 15 апреля, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 16 апреля, 2009 Жалоба Поделиться Опубликовано 16 апреля, 2009 (изменено) core_st: Опять неизвестно чем набитая простыня, у меня она даже так, как у тебя сказано, не работает. Пиши программы так: написал что-то максимально упрощенное, например, чтение записей в файл и вывод их оттуда, проверил - работает? Усложняем: добавляем сортировку записей в файле и вывод их из отсортированного файла. Работает? Усложняем: добавляем поиск в файле заданной записи и ее распечатку. Работает? Усложняем: добавляем поиск в файле и удаление из него заданной записи. Работает? Усложняем: поиск в файле и удаление нскольких записей. Работает? И так далее. Нельзя писать сразу большую программу, в которой дюжина ошибок, и начинать разбираться сразу со всеми ошибками. За семью зайцами погонишься - ни одного не поймаешь. А вопросы типа "я тут такое написал, что сам не могу разобраться, объясните, что не так", если речь не идет о нескольких строчках, обычно остаются без ответа :bye1:. Процедуры распечатки записи из файла и удаления одной записи по заданному критерию к программе Radu записи записей в файл и их вывода из файла из этого поста у меня написаны тут, правда, на Pascal, но, может, и программа Radu и процедуры к ней из моего поста пригодятся. P.S. В исходной поговорке речь шла о двух зайцах, но тут их явно больше :). Изменено 16 апреля, 2009 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
core_st Опубликовано 17 апреля, 2009 Жалоба Поделиться Опубликовано 17 апреля, 2009 Ок, тогда вот укрощенный пример. Запись и вывод работает. Но почему-то последняя запись печатается(или еще записывается) два раза. Здесь можно обьяснить почему? Вроде все правильно, но ошибку найти не могу. //---------------------------------------------------------------------------#include <conio.h>#include <stdlib.h>#include <iostream.h>#include <fstream.h>#include <iomanip.h>struct company {char Nazva[100];char PIB[30];char form[15];int year,count_work;float balance;};void PrintFile (ifstream &inCompany){cout<<setiosflags(ios::left)<<setw(15)<<"Name"<<setw(13)<<"PIB"<<setw(11)<<"Form"<<setw(10)<<"Rik"<<setw(6)<<"Work"<<setiosflags(ios::right)<<setw(10)<<"VNP"<<endl;company blankCompany;while (!inCompany.eof()){inCompany.read((char*)&blankCompany,sizeof(blankCompany)); cout<<setiosflags(ios::left) <<setw(15)<<blankCompany.Nazva <<setw(16)<<blankCompany.PIB<<setw(11)<<blankCompany.form <<setw(10)<<blankCompany.year <<setw(6)<<blankCompany.count_work <<setiosflags(ios::showpoint|ios::right) <<setw(11)<<setprecision(3)<<blankCompany.balance<<endl; }}void main(){char skip;company blankCompany;ofstream outCompany ("D:\\base.dat", ios::binary);if (!outCompany){ cerr<<"File can't open"<<endl; exit(1); } int count; cout<<"Write count of companies: "; cin>>count; // zaluwae kinec stri4ku v potoci, tomy po getline prohodut pysta stri4kafor (int i=0; i<count; i++){ cout<<"Name of company: "; cin>>skip; cin.putback(skip); cin.getline(blankCompany.Nazva,99); cout<<"Name of director: "; cin.getline(blankCompany.PIB,29); cout<<"Having form: "; cin.getline (blankCompany.form,14); cout<<"Year of creating: "; cin>>blankCompany.year; cout<<"Count of workers: "; cin>>blankCompany.count_work; cout<<"Balanse: "; cin>>blankCompany.balance;outCompany.write((char*)&blankCompany,sizeof(blankCompany)); } outCompany.close(); ifstream inCompany; ("D:\\base.dat", ios::binary); PrintFile (inCompany); inCompany.close();getch();} Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 17 апреля, 2009 Жалоба Поделиться Опубликовано 17 апреля, 2009 core_st: можно обьяснить почему? Вроде все правильно, но ошибку найти не могу.Потому что метод eof() выдает истину не когда достигнут конец файла, а когда сделана попытка прочитать что-то за концом файла. Когда ты достиг конца файла, eof тебя об этом не предупредит. Только после безуспешной попытки чтения, когда буфер не изменится и последняя запись будет напечатана повторно, цикл while прервется. Фактически eof - сообщение об ошибке. Вот и выкручивайся, легко придумать несколько способов :doh:. Это C++ :g:. Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 17 апреля, 2009 Жалоба Поделиться Опубликовано 17 апреля, 2009 Тролль: Вот и выкручивайся, легко придумать несколько способов . Это C++ спасибо конечно. Тогда если не сложно наведи пример способа. Как не печатать два раза последнюю запись? Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 17 апреля, 2009 Жалоба Поделиться Опубликовано 17 апреля, 2009 Проблема решена пока-что. если кому надо: while (1){inCompany.read((char*)&blankCompany,sizeof(blankCompany)); if(inCompany.eof()) break; тоисть проверять после каждого считывания Ссылка на комментарий Поделиться на другие сайты Поделиться
AutoGen Опубликовано 19 апреля, 2009 Жалоба Поделиться Опубликовано 19 апреля, 2009 Народ помогите плиз....нужно сделать задачу на Delphi7. Условие задачи: Дан текстовый файл А. Переписать его содержимое в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания. На форме два Memo для отображения исходного файла и итогового, кнопочка-диалог для выбора пути и выполнить.... ЗЫ не успеваю сделать, да и не до конца понимаю логику... :g: народ помогите плиз.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти