Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nameplov
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 7
#1

Помогите с задачкой, пожалуйста. (С++) - C++

15.02.2012, 20:18. Просмотров 507. Ответов 4
Метки нет (Все метки)

Вообщем, программирование только началось, а вопросов куча :\
Помогите, если есть у кого-нибудь желание.
Ближе к задаче: нам дан обычный текстовый файл.. в нём написана информация о номерах телефона.. ну и получается так, что в каждой строке находится информация об одном абоненте: номер телефона, фио, адрес. Нужно написать программу, которая для каждой АТС выводит процент заполненности телефонных номеров. (!)с использованием процедур и функций(!)

Ну как я понял, к каждой АТС может быть подключено 10 000 абонентов, т.е. изменяются 4 последние цифры, поэтому нужно как-то оттолкнуться от первых трех чисел строки..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2012, 20:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите с задачкой, пожалуйста. (С++) (C++):

Помогите с задачкой на С++ - C++
Посоветывали обратиться тут....задали в УНивере такую задачу, а я даже не имею представления как ее решать:eek: :( :( Дано...

помогите с задачкой(( - C++
в программирование 0, а задачу позарез решить надо в cи++. Народ, помогите! :'( даны n ( n max = 100) разных чисел.Найти среди них 2...

Помогите с задачкой. - C++
Поместить элементы массива X в начало массива Y в обратном порядке, исключив элементы, превосходящие по абсолютной величине вводимое...

Помогите с Задачкой - C++
1. Реализовать функцию нахождения всех простых чисел в диапазоне от 1 до 101. Сгенерированные числа сохранить в массиве. Элементы массива...

Помогите с простой задачкой. - C++
Есть код: #include <stdio.h> int main() { int x=2; int y; int z; x*=3+2; printf("x=%d\n", x); // x = 10

Помогите с олимпиадной задачкой ( - C++
Дали мне на написание отчета олимпиадную задачку.. Решение на пару строк.. Пару раз уже код переписывал ниче не получаетсо.. Максимум...

4
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.02.2012, 22:34 #2
Попробуем.
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
#include <cstdlib>
#include <ctime>
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
 
class Serializable {
 public:
  virtual std::ostream &serialize(std::ostream &stream) const = 0;
};
 
class Deserializable {
 public:
  virtual std::istream &deserialize(std::istream &stream) = 0;
};
 
std::ostream &operator<<(std::ostream &stream, const Serializable &object) {
  return object.serialize(stream);
}
 
std::istream &operator>>(std::istream &stream, Deserializable &object) {
  return object.deserialize(stream);
}
 
class Record : public Serializable, public Deserializable {
 public:
  Record() : name_(), address_(), phone_() {}
  explicit Record(std::istream &stream) { deserialize(stream); }
  Record(const std::string &name, const std::string &address, size_t phone)
    : name_(name), address_(address), phone_(phone) {}
  const std::string getName() const { return name_; }
  const std::string getAddress() const { return address_; }
  const size_t getPhone() const { return phone_; }
  virtual std::ostream &serialize(std::ostream &stream) const {
    return stream << getName() << ';' << getAddress() << ';' <<
      getPhone() << ';';
  }
  virtual std::istream &deserialize(std::istream &stream) {
    getline(stream, name_, ';');
    getline(stream, address_, ';');
    std::string buffer;
    getline(stream, buffer, ';');
    std::stringstream sstream(buffer);
    sstream >> phone_;
    return stream;
  }
 private:
  std::string name_;
  std::string address_;
  size_t phone_;
};
 
void createSomeRecords(const std::string &filename) {
  std::vector<Record> records;
 
  for (int i = 0; i < 10000; ++i)
    records.push_back(Record("Name", "Address",
      (rand() % 4 + 1) * 1000000 + rand() % 10000));
 
  std::ofstream outfile(filename.c_str());
  std::copy(records.begin(), records.end(),
    std::ostream_iterator<Record>(outfile));
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  const std::string filename = "tutor0090.txt";
 
  // создадим несколько случайных записей
  createSomeRecords(filename);
  
  std::vector<Record> records;
  std::ifstream infile(filename.c_str());
 
  // прочитаем записи из файла
  std::copy(std::istream_iterator<Record>(infile), 
    std::istream_iterator<Record>(), std::back_inserter(records));
 
  // составим карту телефонов по "атс".
  std::map<size_t, std::set<size_t> > phoneNumbers;
  for (std::vector<Record>::iterator i = records.begin();
    i != records.end(); ++i)
    phoneNumbers[i->getPhone() / 10000].insert(i->getPhone() % 10000);
 
  // посчитаем количество номеров для каждой "атс" и процент занятых
  for (std::map<size_t, std::set<size_t> >::iterator i = phoneNumbers.begin();
    i != phoneNumbers.end(); ++i)
    std::cout << "ATS " << i->first << ". " << i->second.size() <<
      " numbers, " << i->second.size() / 100 << "%" << std::endl;
}
1
nameplov
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 7
16.02.2012, 02:12  [ТС] #3
Большое спасибо за проделанную работу.. Но всё же у меня огромные трудности с восприятием данной программы, ибо классы не изучал, да и изучить, боюсь, без объяснения лектора, не смогу в скором времени. Собственно, верхняя часть программы мне и вовсе не понятна( Можно ли, хоть как-нибудь, реализовать данную задачу в самом простом и понятном виде?


Не по теме:

ибо нуб

0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
16.02.2012, 09:46 #4
Цитата Сообщение от nameplov Посмотреть сообщение
Можно ли, хоть как-нибудь, реализовать данную задачу в самом простом и понятном виде?
Вам нужно не проще и понятнее, а как можно примитивнее. Называйте вещи своими именами.

Введем ограничение -- в списке нет повторяющихся номеров. В таком случае, можно обойтись без сета. Мап заменит просто массив из тысячи интеджеров. Жертвуем килобайтами ради примитивности. Так же уберем чтение в память, будем считать прямо при чтении из файла. В жертву универсальность, пишем для сферического коня в вакууме, зато без структур и динамической памяти.

Ну и для вящей примитивности, совместимость с чистым С.

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[]) {
  srand(time(0));
  const char filename[] = "tutor2101.txt";
  int i;
 
  // создание файла
  FILE *outfile = fopen(filename, "w");
  if (!outfile) {
    perror("Could not open file.");
    return 1;
  }
  for (i = 0; i < 60000; ++i)
    fprintf(outfile, "%s;%s;%d;\n", "Name", "Address", 
      (rand() % 3 + 1) * 1000000 + i);
  fclose(outfile);
  
  // атс
  int atses[1000];
  for (i = 0; i < 1000; ++i)
    atses[i] = 0;
 
  // чтение/подсчет
  FILE *file = fopen(filename, "r");
  if (!file) {
    perror("Could not open file.");
    return 1;
  }
  char name[512];
  char address[512];
  size_t phone;
  while (!feof(file))
    if (fscanf(file, "%[^;];%[^;];%d;\n", name, address, &phone) == 3)
      ++atses[phone / 10000];
  fclose(file);
 
  // результат
  for (i = 0; i < 1000; ++i)
    if (atses[i] > 0)
      printf("ATS %d has %d phone(s), it is at %.2f%% of capacity.\n",
        i, atses[i], atses[i] / 100.);
 
  return 0;
};
1
nameplov
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 7
16.02.2012, 10:54  [ТС] #5
Да, именно то, что я и хотел. Спасибо огромное за проделанную работу!
0
16.02.2012, 10:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 10:54
Привет! Вот еще темы с ответами:

Помогите с действительно простой задачкой. - C++
Дан код: /* Conditional expressions */ #include &lt;stdio.h&gt; #include &lt;iostream&gt; int main() { int x=1; int y=1; int...

не могу справиться задачкой в С++. У кого светлая голова напишите пожалуйста - C++
Задан массив, состоящий из 10 элементов. Из положительных элементов извлечь квадратный корень, отрицательные возвести в квадрат, нулевые...

помогите пожалуйста !! - C++
Ввести структуру для описания комплексного числа . Составить и протестировать функции для преобразования комплексного числа из...

Помогите пожалуйста) - C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1. Количество элементов массива, больших С; величину С задать с...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru