|
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 5
|
|
операции с текстовыми файлами26.05.2009, 02:15. Показов 1254. Ответов 2
Метки нет (Все метки)
Доброго времени суток!!! Помогите решить задачку, у самой не получается=((
Задача в С++, изначально данные находятся в файле .txt Сделать прогу с помощью операций с текстовыми файлами. Написать программу, которая содержит динамическую информацию о нарушении правил дорожного движения. (на один автомобиль база может содержать записи о нескольких нарушениях). Сведения о каждом автомобиле включает в себя: -номер автомобиля (3-х значный); -фамилию владельца; -список нарушений; -размер штрафа за каждое нарушение из списка. Программа должна обеспечивать: 1. начальное формирование из файла базы данных об автомобилях в виде бинарного дерева, по номеру автомобиля. 2. при уплате всех штрафов (сумма и номер автомобиля вводиться с консоли пользователем) автомобиль удаляется из базы нарушителей. 3. по запросу в файл выводятся сведения о нарушителях. Пример файла .txt: 123 Иванов Проезд на красный свет 500 Управление в нетрезвом состоянии 1000 248 Петров Пересечение сплошной полосы 500 362 Сидоров Превышение скорости на 50 км/ч 300 Заранее огромное спасибо!!! Добавлено через 12 часов 24 минуты 28 секунд Набросок кода такой, только он не работает=(( ![]() #include <iostream.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <stdio.h> struct narush { int nomer; char familia[10]; char violation[40]; int shtraf; }; struct gbdd { narush info; gbdd* left; gbdd* right; }tr; gbdd* create_var(narush a) { gbdd* newvar; newvar=new(gbdd); newvar->info=a; newvar->left=NULL; newvar->right=NULL; return(newvar); } gbdd* add_var(gbdd* f, narush a) { if (f==NULL) {f=create_var(a); return(f);} if (f->info.nomer>a.nomer) {if (f->left==NULL) {f->left=create_var(a); cout<<"left"<<endl; } else f=add_var(f->left,a);} if (f->info.nomer<a.nomer) {if (f->right==NULL) { f->right=create_var(a); cout<<"right"<<endl; } else f=add_var(f->right,a);} return (f); } gbdd* find(gbdd *a,narush val) { if (a==NULL) return(0); if (val.nomer<a->info.nomer) return(find(a->left,val)); if (val.nomer>a->info.nomer) return(find(a->right,val)); if (val.nomer==a->info.nomer) return(a); } void travel(gbdd *a) { cout <<a->info.nomer<<endl; travel(a->left); travel(a->right); } void main() { FILE *f; f=fopen("inp.txt","r"); const int dl=60; char s[dl]; gbdd *b,*c; fgets(s,dl,f); b=new(gbdd); b->info.nomer=atoi(&s[0]); strncpy(b->info.familia,s,10); strncpy(b->info.violation, s, 40); b->info.shtraf=atoi(&s[20]); while (fgets(s,dl,f)) { c->info.nomer=atoi(&s[0]); strncpy(c->info.familia, s, 10); strncpy(c->info.violation,s,40); c->info.shtraf(&s[20]); b=add_var(b,c->info); } travel(b); } Добавлено через 10 часов 41 минуту 41 секунду Помогите, сил моих больше нет!!!!:'( Добавлено через 3 часа 51 минуту 27 секунд Возможно, как-то так, но компилятор ругается, на чем свет стоит ![]() #include <iostream.h> #include <string.h> #include <stdio.h> #include <stdlib.h> struct node { int number; char soname[10]; char narush[40]; char shtraf; node *right; node *left;}; node *crnode(int val) { node *newnode; newnode=new (node); newnode->number=val; newnode->left=NULL; newnode->right=NULL; return (newnode); } node *add_tree(node *a, int val) { if (a==NULL) {a=crnode(val); return (a);} if (val<a->number) if (a->left==NULL) a->left=crnode(val); else add_tree(a->left,val); if (val>a->number) if (a->right==NULL) a->right=crnode(val); else add_tree(a->right,val); return (a);} node *find_tree(node *a, int val) {if (a==NULL) return (NULL); if (a->number==val) return (a); if (val<a->number) return(find_tree(a->left, val)); if (val>a->number) return(find_tree(a->right, val)); return(NULL);} void travel(node *a) {if(a!=NULL) {cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl; travel(a->left); travel(a->right); } } int main() { node *a=NULL; FILE *inp, *out; if((inp=fopen("inp.txt","r"))==NULL) {cout<<"Oshibka faila"<<endl; return(1);} if((out=fopen("out.txt","w+"))==NULL) {cout<<"Oshibka faila"<<endl; return(1);} const int dl=75; char s[dl]; int kol=0;//количество записей в файле while(fgets(s,dl,inp)) { node.number=atoi(&s[3]); strncpy(node.soname,&s[4],10); node.soname[14]='\0'; strncpy(node.narush, &s[15],40); node.narush[45]='\0'; strncpy(node.shtraf, &[46], 23); node.shtraf[69]='\0' kol++; a=add_tree(a, &node.number); } fclose(inp); return 0; }
0
|
|
| 26.05.2009, 02:15 | |
|
Ответы с готовыми решениями:
2
Переделать работу с текстовыми файлами под работу с двоичными файлами
|
|
|
|
| 26.05.2009, 10:42 | |
|
> Возможно, как-то так, но компилятор ругается, на чем свет стоит
Сейчас главные специалисты соберутся, дружно помедитируют (так сказать, групповая медитация) и сразу догадаются, как же у тебя компилятор ругается
0
|
|
|
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 5
|
|
| 27.05.2009, 12:13 [ТС] | |
|
Ухху!!!!!!!! В таком виде она компилируется, но не работает
![]() #include <iostream.h> #include <string.h> #include <stdio.h> #include <stdlib.h> struct node { int number; char soname[10]; char narush[40]; char shtraf[30]; node *right; node *left;}; node *crnode(int val) { node *newnode; newnode=new (node); newnode->number=val; newnode->left=NULL; newnode->right=NULL; return (newnode); } node *add_tree(node *a, int val) { if (a==NULL) {a=crnode(val); return (a);} if (val<a->number) if (a->left==NULL) a->left=crnode(val); else add_tree(a->left,val); if (val>a->number) if (a->right==NULL) a->right=crnode(val); else add_tree(a->right,val); return (a);} node *find_tree(node *a, int val) {if (a==NULL) return (NULL); if (a->number==val) return (a); if (val<a->number) return(find_tree(a->left, val)); if (val>a->number) return(find_tree(a->right, val)); return(NULL);} void travel(node *a) {if(a!=NULL) {cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl; travel(a->left); travel(a->right); } } int main() { node *a=NULL; FILE *inp, *out; if((inp=fopen("inp.txt","r"))==NULL) {cout<<"Oshibka faila"<<endl; return(1);} if((out=fopen("out.txt","w+"))==NULL) {cout<<"Oshibka faila"<<endl; return(1);} const int dl=75; char s[dl]; while(fgets(s,dl,inp)) { a->number =atoi(&s[3]); strncpy(a->soname ,&s[4],10); a->soname [14]='\0'; strncpy(a->narush, &s[15],40); a->narush [45]='\0'; strncpy(a->shtraf , &s[46], 23); a->shtraf [69]='\0'; a=add_tree(a, a->number); } fclose(inp); return 0; } Добавлено через 11 часов 35 минут 23 секунды прога работает!!!!!! осталось написать 2 и 3 пункт, помогите, кому не сложно ![]() #include <iostream.h> #include <string.h> #include <stdio.h> #include <stdlib.h> struct node { char soname[10]; int number; char narush[10][40]; int pnumb; node *right; int shtraf[30]; node *left; }; node *crnode(char s[75]) { node *newnode=new (node); newnode->number=atoi(&s[0]); newnode->pnumb=1;\ strncpy(newnode->soname ,&s[4],10); newnode->soname[10]='\0'; strncpy(newnode->narush[1], &s[14],40); newnode->narush[1][39]='\0'; newnode->shtraf[newnode->pnumb]=atoi(&s[54]); newnode->left=NULL; newnode->right=NULL; return (newnode); } node *add_tree(node *a,char s[75]) { int k; if (a==NULL) { a=crnode(s); } else { k=atoi(&s[0]); // cout << endl << word << strcmp(word,a->Name) << a->Name << endl; if (k<a->number) { if (a->left==NULL) { // cout << "Piwem v Levo" << endl; a->left=crnode(s); }else{ add_tree(a->left,s); } } if (k>a->number) { if (a->right==NULL) { // cout << "Piwem v Pravo" << endl; a->right=crnode(s); }else{ add_tree(a->right,s); } } if (k==a->number) { // cout << "Piwem v s'uda" << endl; a->pnumb++; strncpy(a->narush[a->pnumb], &s[14],40); (a->narush[a->pnumb])[39]='\0'; a->shtraf[a->pnumb]=atoi(&s[54]); } } return(a); } node *find_tree(node *a, int val) { if (a==NULL) return (NULL); if (a->number==val) return (a); if (val<a->number) return(find_tree(a->left, val)); if (val>a->number) return(find_tree(a->right, val)); return(NULL); } void travel(node *a) {if(a!=NULL) {cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl; travel(a->left); travel(a->right); } } node *NumberContains(int k, node* a) { if (a!=NULL) { if (a->number==k) {return(a);} if (NumberContains(k,a->left)==NULL) {return(NumberContains(k,a->right));}else{return(NumberContains(k ,a->left));}; }else{return(NULL);} return(a); } void print_tree(node* a) { int i; if (a!=NULL) { cout << "NUMBER:" << a->number << endl ; cout << "FAMILIJAAA:" << a->soname << endl; for (i=1;i<=a->pnumb;i++) { cout << "\n" << a->narush[i] << "- " << a->shtraf[i] <<"\n__________________________\n"; } cout << endl; print_tree(a->left); print_tree(a->right); } } int main() { node *a=NULL, *b=NULL; FILE *inp, *out; if((inp=fopen("D:\\inp3.txt","r"))==NULL ) {cout<<"Oshibka faila"<<endl; return(1);} if((out=fopen("D:\\out.txt","w"))==NULL) {cout<<"Oshibka faila"<<endl; return(1);} const dl=75; char s[dl]; while(fgets(s,dl,inp)) { a=add_tree(a,s); } print_tree(a); fclose(inp); return 0; } Добавлено через 12 часов 20 минут 16 секунд Кому интересно, вот полное решение задачи ![]() #include <iostream.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <math.h> struct node { char soname[10]; int number; char narush[10][40]; int pnumb; node *right; int shtraf[30]; node *left; }; node *crnode(char s[75]) { node *newnode=new (node); newnode->number=atoi(&s[0]); newnode->pnumb=1;\ strncpy(newnode->soname ,&s[4],10); newnode->soname[10]='\0'; strncpy(newnode->narush[1], &s[14],40); newnode->narush[1][39]='\0'; newnode->shtraf[newnode->pnumb]=atoi(&s[54]); newnode->left=NULL; newnode->right=NULL; return (newnode); } node *add_tree(node *a,char s[75]) { int k; if (a==NULL) { a=crnode(s); } else { k=atoi(&s[0]); if (k<a->number) { if (a->left==NULL) { a->left=crnode(s); }else{ add_tree(a->left,s); } } if (k>a->number) { if (a->right==NULL) { a->right=crnode(s); }else{ add_tree(a->right,s); } } if (k==a->number) { a->pnumb++; strncpy(a->narush[a->pnumb], &s[14],40); (a->narush[a->pnumb])[39]='\0'; a->shtraf[a->pnumb]=atoi(&s[54]); } } return(a); } void print_narush(FILE *out, node *a) { int i; if (a!=NULL) fprintf(out,"%d",a->number); fprintf(out,"%s",a->soname); for (i=0; i<a->pnumb; i++) { fprintf(out,"%d",a->narush[i]); fprintf(out,"%s",a->shtraf[i]); } } node *find_tree(node *a, int val) { if (a==NULL) return (NULL); if (a->number==val) return (a); if (val<a->number) return(find_tree(a->left, val)); if (val>a->number) return(find_tree(a->right, val)); return(NULL); } void travel(node *a) {if(a!=NULL) {cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl; travel(a->left); travel(a->right); } } int rightmost (node *a) { while (a->right!=NULL) a=a->right; return (a->number); } node *del_tree(node *a, int val) {int zam; if (a->number==val) {if ((a->left==NULL)&&(a->right==NULL)) {a=NULL; cout<<a->soname <<" udalen is spiska narushitelej"<<endl; return (a);} if ((a->left==NULL)&&(a->right!=NULL)) {a=a->right; cout<<a->soname <<" udalen is spiska narushitelej"<<endl; return (a);} if ((a->left!=NULL)&&(a->right==NULL)) {a=a->left; cout<<a->soname <<" udalen is spiska narushitelej"<<endl; return (a);} if ((a->left!=NULL)&&(a->right!=NULL)) {zam=rightmost(a->left); a->left=del_tree(a->left,zam); a->number=zam; return(a);} } if (a->number>val) {a->left=del_tree(a->left, val); return(a);} if (val>a->number) {a->right=del_tree(a->right,val); return(a);} return (a); } void PrintNode(node *a) { int i; if (a!=NULL) { cout << "NUMBER:" << a->number << endl ; cout << "FAMILIJAAA:" << a->soname << endl; for (i=1;i<=a->pnumb;i++) { cout << "\n" << a->narush[i] << "- " << a->shtraf[i] <<"\n__________________________\n"; } cout << endl; }; } node *NumberContains(int k, node* a) { if (a!=NULL) { if (a->number==k) {return(a);} if (NumberContains(k,a->left)==NULL) {return(NumberContains(k,a->right));}else{return(NumberContains(k ,a->left));}; }else{return(NULL);} return(a); } void print_tree(node* a) { int i; if (a!=NULL) { cout << "NUMBER:" << a->number << endl ; cout << "FAMILIJAAA:" << a->soname << endl; for (i=1;i<=a->pnumb;i++) { cout << "\n" << a->narush[i] << "- " << a->shtraf[i] <<endl; } cout << endl; print_tree(a->left); print_tree(a->right); } } int main() { node *a=NULL, *b=NULL; FILE *inp, *out; if((inp=fopen("D:\\inp3.txt","r"))==NULL ) {cout<<"Oshibka faila"<<endl; return(1);} if((out=fopen("D:\\out.txt","w"))==NULL) {cout<<"Oshibka faila"<<endl; return(1);} const dl=75; char s[dl]; while(fgets(s,dl,inp)) { a=add_tree(a,s); } print_tree(a); fclose(inp); node *poisk; int t,i, opl, inn; cout <<"hotite oplatit' shtraf? if yes najmite 1, if not najmite 2"<<endl; cin>>t; if (t==2) cout<<"ne hotite, kak hotite"<<endl; if(t==1) { cout <<"Vvedite nomer masini"<<endl; cin>>inn; poisk=find_tree (a, inn); if (poisk==NULL) { cout <<"takoj mashini net v spiske narushitelej"<<endl; }else{ PrintNode(poisk); cout<<"Vvedite summy dla oplati"<<endl; cin>>opl; int summa=0; for (i=1; i<=poisk->pnumb; i++) { cout<<poisk->shtraf[i] <<endl; summa=summa+poisk->shtraf[i]; } if (summa>opl) cout <<"nedostatochno deneg dla pogashenia shtrafa"<<endl; if (summa<= opl) { cout <<"shtraf oplachen"<<endl; del_tree (a,a->number); } } } cout <<"hotite polychit' informacij o narusheniah, if yes najmite 1, if not najmite 2"<<endl; cin>>t; poisk=NULL; if (t==2) cout<<"ne hotite, kak hotite"<<endl; if (t==1) { cout <<"Vvedite nomer masini"<<endl; cin>>inn; poisk=find_tree (a, inn); if (poisk==NULL) { cout <<"takoj mashini net v spiske narushitelej"<<endl; }else{ // PrintNode(poisk); fprintf(out,"%d",poisk->number); fprintf(out,"%s","\n"); // strcpy(word,poisk->soname); fprintf(out,"%s",poisk->soname); fprintf(out,"%s","\n"); for (i=1; i<=poisk->pnumb; i++) { fprintf(out,"%s","\t"); fprintf(out,"%s",poisk->narush[i]); fprintf(out,"%s","-"); fprintf(out,"%d",poisk->shtraf[i]); fprintf(out,"%s","\n"); } } } fclose(out); return 0; }
0
|
|
| 27.05.2009, 12:13 | |
|
Помогаю со студенческими работами здесь
3
Работа с текстовыми файлами си++ Работа с текстовыми файлами С++ работа с текстовыми файлами Работа с текстовыми файлами.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|