Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 12.05.2009
Сообщений: 33

Доработка операций над данными текстового файла

26.11.2009, 06:34. Показов 815. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, вот написал прогу:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
struct TMenu{
  char Title [12];
  char Name [10];
  int Place;
  int Cost;
 // int y;
};
 
struct Page{
  TMenu nD;
  Page *next;
  };
 
class CGuest{
  TMenu *z;
  int n;
public:
  CGuest();
  ~CGuest();
  int Init (char *nmFile);
  void Print();
  void Sort();
};
 
CGuest::CGuest(){
  z=NULL;
  n=0;
}
 
CGuest::~CGuest(){
  if (z!=NULL) delete z;
  n=0;
}
 
int CGuest::Init(char *nmFile){
  FILE *f;
  int ok,i;
 
  if (z!=NULL) delete z;
  n=0;
 
  f=fopen(nmFile,"rt");
  if (f==NULL){
    printf ("\nFile ne otkryt");
    return 0;
  }
  ok=fscanf(f,"%d",&n);
  if (ok!=1 || 0>=n){
    printf("\nNet Vvoda N");
    fclose(f);
    return 0;
  }
 
  z=new TMenu[n];
  for (i=0; i<n; i++){
  ok=fscanf(f,"%s%s%d%d"
    ,z[i].Title
    ,z[i].Name
    ,&z[i].Place
    ,&z[i].Cost
    );
   // z[i].y=0;
 
  if (ok!=4){
    printf("\nPlohie dannye");
    fclose(f);
    return 0;
    }
  }
  fclose(f);
  return 1;
}
 
void CGuest::Print(){
  int i;
  printf("\n--------------------");
  for (i=0; i<n; i++){
  printf ("\n%11s%9s%5d%5d"
    ,z[i].Title
    ,z[i].Name
    ,z[i].Place
    ,z[i].Cost
    );
  }
}
/*
void CGuest::Middle(){
  int i,j;
  double s=0;
  for (i=0; i<n; i++) z[i].y=0;+
  for (i=0; i<n; i++){
 
    s=s+z[i].Cost;
  }
  s=s/n;
 
}
  */
int main(void){
  CGuest w;
  clrscr();
  w.Init("Dannye.cpp");
  w.Print();
 // w.Sort();
  //w.Print();
  getch();
  return 0;
}
Она берёт данные из файла Dannye.cpp, где указаны наименования гостиниц (1 столбец), фамилии проижвающих (2), кол-во мест в номере (3) и цена за день (4).
Code
1
2
3
4
5
6
7
6
Khabarovsk1  Trifonov   3 5000
Khabarovsk1  Samsonov   4 3000
Khabarovsk1  Panov      2 4000
Arzamas      Stepanov   3 5000
Arzamas      Fedorov    4 4000
Arzamas      Irhin      2 9000
Не понимаю, как посчитать среднюю стоимость проживания в КАЖДОЙ гостинке в день.
Также нужно сортировать список проживающих по КАЖДОЙ гостинке и выполнить сортировку всех записей по выбранным трём полям... Как это всё доделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2009, 06:34
Ответы с готовыми решениями:

Организовать перевод чисел из 10 системы в 2,8,16,32 а также выполнение простых арифметических операций (+-/*) над данными числами
Прилагаю исходник программы (то что сделано). Не знаю только как организовать перевод чисел в эти СС. Выполнение арифметических...

Заполнить данными из текстового файла QTableWidget
Помогите плиз, натолкните на правильную мысль, не могу понять как заполнить таблицу из файла Добавлено через 37 минут ...

Сравнение текстового файла с данными edit
Доброго времени суток. Глобальная задача создать кроссворд. Локальная осуществить проверку слов. Имеется 1)файл где в каждой...

7
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.11.2009, 10:03
Цитата Сообщение от Alladin
Не понимаю, как посчитать среднюю стоимость проживания в КАЖДОЙ гостинке в день.
сложи тех, кто проживает, по суммам, которые они платят и раздели на количество

Цитата Сообщение от Alladin
Также нужно сортировать список проживающих по КАЖДОЙ гостинке
нужно переставлять сами структуры, но сравнивать второе поле (функция сравнения может быть, которая передаётся в функцию перестановки), был тут ещё способ - сразу всё в одной функции делать, и сравнивать, и переставлять

по трём полям - непонятно
0
0 / 0 / 0
Регистрация: 12.05.2009
Сообщений: 33
26.11.2009, 10:59  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
сложи тех, кто проживает, по суммам, которые они платят и раздели на количество


нужно переставлять сами структуры, но сравнивать второе поле (функция сравнения может быть, которая передаётся в функцию перестановки), был тут ещё способ - сразу всё в одной функции делать, и сравнивать, и переставлять

по трём полям - непонятно
Нет... ну... естественно, что именно так находится! А как это в программе написать? Мы же должны посчитать отдельно по гостинкам, а не всех сразу.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.11.2009, 03:24
сначала сортируешь по гостинкам (все записи) и потом, пока такая-то гостинка, складываешь её жителей
юзаешь cpp - переходи на string вместо символьных массивов, так как там для сравнения названий можно применить операцию ==
в C - функцию strcmp
массив приготовил для средних значений ?
0
0 / 0 / 0
Регистрация: 12.05.2009
Сообщений: 33
27.11.2009, 04:19  [ТС]
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
/*
void CGuest::Middle(){
  int i,j;
  double s=0;
  for (i=0; i<n; i++) z[i].y=0;+
  for (i=0; i<n; i++){
 
    s=s+z[i].Cost;
  }
  s=s/n;
 
}
  */
Вот тут надо что-то нахимичить для подсчёта средней стоимости...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.11.2009, 10:28
предположим, это было бы правильно, куда сохранять тогда среднее значение для каждой гостиницы
s остаётся внутри метода, надо его где-то сохранять и так для каждой гостиницы
а у тебя даже массива гостиниц нету или массива их средних значений
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
27.11.2009, 11:13
Цитата Сообщение от Alladin Посмотреть сообщение
Вот тут надо что-то нахимичить для подсчёта средней стоимости...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
struct TMenu{
  char Title [12];
  char Name [10];
  int Place;
  int Cost;
 // int y;
};
 
struct Page{
  TMenu nD;
  Page *next;
  };
 
class CGuest{
  TMenu *z;
  int n;
public:
  CGuest();
  ~CGuest();
  int Init (char *nmFile);
  void Print();
  void Sort();
  void Middle();
};
 
CGuest::CGuest(){
  z=NULL;
  n=0;
}
 
CGuest::~CGuest(){
  if (z!=NULL) delete z;
  n=0;
}
 
int CGuest::Init(char *nmFile){
  FILE *f;
  int ok,i;
 
  if (z!=NULL) delete z;
  n=0;
 
  f=fopen(nmFile,"rt");
  if (f==NULL){
    printf ("\nFile ne otkryt");
    return 0;
  }
  ok=fscanf(f,"%d",&n);
  if (ok!=1 || 0>=n){
    printf("\nNet Vvoda N");
    fclose(f);
    return 0;
  }
 
  z=new TMenu[n];
  for (i=0; i<n; i++){
  ok=fscanf(f,"%s%s%d%d"
    ,z[i].Title
    ,z[i].Name
    ,&z[i].Place
    ,&z[i].Cost
    );
   // z[i].y=0;
 
  if (ok!=4){
    printf("\nPlohie dannye");
    fclose(f);
    return 0;
    }
  }
  fclose(f);
  return 1;
}
 
void CGuest::Print(){
  int i;
  printf("\n--------------------");
  for (i=0; i<n; i++){
  printf ("\n%11s%9s%5d%5d"
    ,z[i].Title
    ,z[i].Name
    ,z[i].Place
    ,z[i].Cost
    );
  }
}
 
void CGuest::Middle(){
  int i,j, fl, count;
  double s=0;
  for (i=0; i<n; i++)
  {
      fl=0;
      for (j=0; j<i; j++)
          if(!strcmp(z[i].Title,z[j].Title))
              fl=1;
      if(!fl)
      {
          s=z[i].Cost;
          count=1;
          for (j=i+1; j<n; j++)
              if(!strcmp(z[i].Title,z[j].Title))
              {
                  s+=z[j].Cost;
                  count++;
              }
          printf("\nSrednyy cena %s =%lf", z[i].Title, s/count);
      }
  } 
}
 
 
int main(void){
  CGuest w;
//  clrscr();
  w.Init("Dannye.cpp");
  w.Print();
  w.Middle();
 // w.Sort();
  //w.Print();
  getch();
  return 0;
}
1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
27.11.2009, 13:54
Цитата Сообщение от Alladin Посмотреть сообщение
Также нужно сортировать список проживающих по КАЖДОЙ гостинке
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
struct TMenu{
  char Title [12];
  char Name [10];
  int Place;
  int Cost;
 // int y;
};
 
struct Page{
  TMenu nD;
  Page *next;
  };
 
class CGuest{
  TMenu *z;
  int n;
public:
  CGuest();
  ~CGuest();
  int Init (char *nmFile);
  void Print();
  void Sort();
  void Middle();
};
 
CGuest::CGuest(){
  z=NULL;
  n=0;
}
 
CGuest::~CGuest(){
  if (z!=NULL) delete z;
  n=0;
}
 
int CGuest::Init(char *nmFile){
  FILE *f;
  int ok,i;
 
  if (z!=NULL) delete z;
  n=0;
 
  f=fopen(nmFile,"rt");
  if (f==NULL){
    printf ("\nFile ne otkryt");
    return 0;
  }
  ok=fscanf(f,"%d",&n);
  if (ok!=1 || 0>=n){
    printf("\nNet Vvoda N");
    fclose(f);
    return 0;
  }
 
  z=new TMenu[n];
  for (i=0; i<n; i++){
  ok=fscanf(f,"%s%s%d%d"
    ,z[i].Title
    ,z[i].Name
    ,&z[i].Place
    ,&z[i].Cost
    );
   // z[i].y=0;
 
  if (ok!=4){
    printf("\nPlohie dannye");
    fclose(f);
    return 0;
    }
  }
  fclose(f);
  return 1;
}
 
void CGuest::Print(){
  int i;
  printf("\n--------------------");
  for (i=0; i<n; i++){
  printf ("\n%11s%9s%5d%5d"
    ,z[i].Title
    ,z[i].Name
    ,z[i].Place
    ,z[i].Cost
    );
  }
}
 
void CGuest::Middle(){
  int i,j, fl, count;
  double s=0;
  for (i=0; i<n; i++)
  {
          fl=0;
          for (j=0; j<i; j++)
                  if(!strcmp(z[i].Title,z[j].Title))
                          fl=1;
          if(!fl)
          {
                  s=z[i].Cost;
                  count=1;
                  for (j=i+1; j<n; j++)
                          if(!strcmp(z[i].Title,z[j].Title))
                          {
                                  s+=z[j].Cost;
                                  count++;
                          }
                  printf("\nSrednyy cena %s =%lf", z[i].Title, s/count);
          }
  } 
}
 
void CGuest::Sort(){
  int i,j, fl;
  printf("\n");
  for (i=0; i<n; i++)
  {
          fl=0;
          for (j=0; j<i; j++)
                  if(!strcmp(z[i].Title,z[j].Title))
                          fl=1;
          if(!fl)
          {
              printf("%s:::\n", z[i].Title);
                 for (j=i; j<n; j++)
                          if(!strcmp(z[i].Title,z[j].Title))
                              printf("%s\n", z[j].Name);
          }
  } 
}
 
 
int main(void){
  CGuest w;
//  clrscr();
  w.Init("Dannye.cpp");
  w.Print();
  w.Middle();
  w.Sort();
  //w.Print();
  getch();
  return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2009, 13:54
Помогаю со студенческими работами здесь

Чтение нескольких строк из файла, выполнение над ними операций и обратная запись в файл
В файле есть несколько строк, например: 1) 2+3; 2) 4/2; 3) 5*6. Программа должна считать эти строки из файла и посчитать эти значения....

Открытие текстового файла для работы с его данными
Доброго вечера. Задача такая: по нажатию на кнопку, должно открываться диалоговое окно с открытием директории выбора текстового файла для...

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

Доказать равенства, используя свойства операций над множествами и определения операций
Доказать равенства, используя свойства операций над множествами и определения операций. A\subseteq C, B\subseteq D \Rightarrow A\times...

Доказать равенства, используя свойства операций над множествами и определения операций
Доказать равенства, используя свойства операций над множествами и определения операций. б) Ax(B\C)=(AxB)\(AxC). Почему график не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru