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

Разбиения множества - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как данную программу реализовать при помощи классов http://www.cyberforum.ru/cpp-beginners/thread578982.html
как данную программу реализовать при помощи классов ~cpp //--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h> #pragma hdrstop
C++ Найти номер максимального элемента массива Помогите с программами 1. Найти номер максимального элемента массива. 2. Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами. 3. для заданной матрице... http://www.cyberforum.ru/cpp-beginners/thread578972.html
C++ Написать функцию, которая возвращает максимальный элемент одномерного массива
Написать функцию, которая возвращает максимальный элемент одномерного массива
C++ структуры содержащие члены-данные и члены- функции
Помогите пожалуйста!!!:cry: На основе данного входного файла составить список сотрудников учреждения, включив следующие данные: ФИО, год принятия на работу, должность, зарплата, рабочий стаж....
C++ Структуры http://www.cyberforum.ru/cpp-beginners/thread578955.html
Помогите решить задачу (решить задачу, используя структуру point для хранения координат точки: (множество точек задано на плоскости) Найти такую точку, что окружность радиуса R с центром в этой...
C++ Работа с текстовыми файлами: Помогите пожалуйста решить задачу Дан текстовый файл. Напечатать все нечётные строки. подробнее

Показать сообщение отдельно
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 13:35
Это на самом деле все равно. У статических массивов (те, которые у вас) есть 1 крупный недостаток. Нам должны быть изначально известны их размеры. К чему это ведет в вашей программе? Если у нас будет 101 точка, то последняя просто не прочитается. Если у нас будет 10 точек, то все будет работать, но памяти на это будет затрачено как на 101 точку. По другому обстоит дело с динамическими массивами. Переписанный ваш кусок кода:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
FILE* file=fopen("3tochki.txt","r");
int c='a';//В эту переменную будем считывать символы. Файл всегда заканчивается особым служебным символом -- конец файла (End Of File, EOF). В некоторых случаях он равен -1, потому в переменную типа char его не считаешь.
int N=0;//Количество точек
while(c!=EOF)//Пока не конец файла
{
if(c=='\n')//Перенос на следующую строку
N++;
c=getc(f);//Считывание следующего символа
}
N++;//Теперь N -- это наше реальное количество точек
fclose(file);
file=fopen("3tochki.txt","r");//Переоткрыли файл, чтобы курсор стал на его начало.
float* *pt=new float*[N];
for(int i=0; i<N; i++)
pt[i]=new float[3];//Создали динамический массив N на 3
float* mas=new float[N];//Создали динамический массив из N элементов
for(int i=0; i<N; i++)
{
fscanf(file,"%f%f%f",&pt[i][0],&pt[i][1],&pt[i][2]);
}
fclose(file);
file=fopen("3massa.txt","r");
for(int i=0; i<N; i++)
fscanf(file,"%f",&mas[i]);
fclose(file);
}
Добавлено через 3 минуты
Теперь тот же самый код, только с добавлением моей функции:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void grouping(int n, int m,int m1, int* num)//num -- массив номеров точек, которые уже вошли в комбинацию, m1 -- их количество
{
   if(m1==0)
   {
      for(int i=1; i<n-m+1; i++)//Это все частный случай того, что начинается через 2 else, добавлено для первого вызова функции, когда у нас еще пуст массив num
      {
         num[0]=i;
         grouping(n,m,1,num);
      }
   }
   else if(m==m1)
   {
//!!!!!!!!Здесь делаем расчеты центров масс частей и т.д., 1-я группа -- частицы, номера которых в массиве num, 2-я -- остальные.
   }
   else
   {
      int last=num[m1-1];//У нас частицы упорядочены, и если у нас уже была комбинация из 1,3,4 частицы, например, то комбинация из 1,4,3 нас уже не интересует, потому новые частицы имеет смысл присоейдинять к комбинации только начиная с num[m1-1]
      for(int i=last+1; i<n-m+m1+1; i++)//Если номер будет больше, чем n-m+m1+1, то опять-таки комбинации будут повторяться
      {
         num[m1]=i;
         grouping(n,m,m1+1,num);
      }
   }
}
int main()
{
   FILE* file=fopen("3tochki.txt","r");
   int c='a';//В эту переменную будем считывать символы. Файл всегда заканчивается особым служебным символом -- конец файла (End Of File, EOF). В некоторых случаях он равен -1, потому в переменную типа char его не считаешь.
   int N=0;//Количество точек
   while(c!=EOF)//Пока не конец файла
   {
      if(c=='\n')//Перенос на следующую строку
      N++;
      c=getc(f);//Считывание следующего символа
   }
   N++;//Теперь N -- это наше реальное количество точек
   fclose(file);
   file=fopen("3tochki.txt","r");//Переоткрыли файл, чтобы курсор стал на его начало.
   float* *pt=new float*[N];
   for(int i=0; i<N; i++)
   pt[i]=new float[3];//Создали динамический массив N на 3
   float* mas=new float[N];//Создали динамический массив из N элементов
   for(int i=0; i<N; i++)
   {
      fscanf(file,"%f%f%f",&pt[i][0],&pt[i][1],&pt[i][2]);
   }
   fclose(file);
   file=fopen("3massa.txt","r");
   for(int i=0; i<N; i++)
   fscanf(file,"%f",&mas[i]);
   fclose(file);
   int n1=(N+1)/2;
   for(int i=1; i<n1; i++)
   {
      int* num=new int[i];
      grouping(n,i,0,num);
   }
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru