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

Никак не могу разобраться с ошибкой. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Используя указатель, как параметр цикла, распечатать массив с конца, пропуская элементы, кратные 3 http://www.cyberforum.ru/cpp-beginners/thread212137.html
Создать целочисленный массив из 10 элементов. Используя указатель в качестве параметра цикла: распечатать массив с конца, пропуская элементы, кратные 3
C++ Выделить память под K целых элементов (K вводится с клавиатуры). Заполнить этот массив числами Выделить память под K целых элементов (K вводится с клавиатуры). Заполнить этот массив числами, кратными 5 (5, 10, 15, …). Распечатать чётные значения (10,20, …). http://www.cyberforum.ru/cpp-beginners/thread212134.html
Динамическая переменная C++
Создать три динамические вещественные переменные. Два значения ввести с клавиатуры, третьей переменной присвоить минимальное значение из первых двух. Распечатать переменные и их адреса.
C++ Считать с файла
Здравствуйте. Как считать с файла матрицу, при этом помещая каждый элемент матрицы в отдельную ячейку массива?
C++ Описать структуру Метро http://www.cyberforum.ru/cpp-beginners/thread212128.html
Начал работать со структурами, но пока что не очень разобрался. я щас пытаюсь отладить ввод вывод структуры : название станции метро : зона: цена. если я цену ввожу как строку, и работаю с ней...
C++ Дан файл,содержащий информацию о поступлении платежей по квартплате в текущий год. Дан файл,содержащий информацию о поступлении платежей по квартплате в текущий год.Структура записи файла: -номер лицевого счета -фамилия -номер квартиры -номер месяца -сумма платежа Написать... подробнее

Показать сообщение отдельно
ok-smile
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 3

Никак не могу разобраться с ошибкой. - C++

15.12.2010, 23:38. Просмотров 426. Ответов 3
Метки (Все метки)

Задание:
Имеются числа х1,х2,...,хn.Расставить их в таблице размером (nхn) так,чтобы в каждой строке и в каждом столбце каждое число встречалось по одному разу. Таблицу занести в файл.

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 "stdafx.h"
#include "set"
#include "time.h"
#include "iostream"
 
using namespace std;
 
typedef set<int,less <int> >Myset;  //Тип множество из неповторяющихся чисел
 
void deny(Myset [100][100],int,int,int,int);    
int setlen(Myset);          //Ф-ция,определяющая размер множества
 
int main()
{
    srand(time(NULL));
    
    int N;
    cout << "Vvedite razmer tablicu ot 1 do 8.";
    cout << '\n';
    
    do
    { cin>>N;
      if(N<=0) puts("Vvedite chislo > 0!");
    }
    while(N<=0);    
     
     cout<<"Dannaia tablica bydet zanesena v file c imenem <MAX>";
     cout<<'\n';
    
 
    int mas[100][100];
    
    Myset s[100][100];
    
    int complete = 0,           //Сколько заполнено мест
        min = 0,
        min_x = 0,
        min_y = 0;
    
    for(int i = 0;i<N;i++)  //В каждой клетке может стоять любой элемент
       for(int j = 0;j<N;j++)
          for(int k = 1;k<=N;k++)
             s[i][j].insert(k);
       
    
    while(complete < N*N)       //Ищем множество минимальной длины
    {
       min = N;           
       min_x = 0;
       min_y = 0;
       for(int i = 0;i<N;i++)
          for(int j = 0;j<N;j++)
          {
              //Сравниваем длины множеств
              if(setlen(s[i][j]) < min && setlen(s[i][j]) > 0)
             {
                min = setlen(s[i][j]);
                min_x = i;
                min_y = j;
             }
          }
       
       Myset::iterator iter;
              
       iter = s[min_x][min_y].begin();     
       
       if(*iter == 0)printf("LOLOLLO");
       
       mas[min_x][min_y] = *iter;//Значение из множества ставим в min       deny(s,mas[min_x][min_y],min_x,min_y,N);
       s[min_x][min_y].clear();
       complete++;
 
    }
       
    FILE *f;
    f = fopen("MAX.txt","w");
    
    for(int i = 0;i<N;i++)
    {
       for(int j = 0;j<N;j++)
       {
          fprintf(f,"%4d",mas[i][j]);
          printf("%4d",mas[i][j]);
       }
       fprintf(f,"\n");
       cout<<'\n';
       
    }
    fclose(f);
       
    system("pause");
    
}
 
void deny(Myset s[100][100],int val,int i,int j,int N)
{
    for(int k = 0;k<N;k++)  //Идем по строкам и столбцам и исключаем клетки
       s[i][k].erase(val);
    
    for(int k = 0;k<N;k++)
       s[k][j].erase(val);
}
    
int setlen(Myset s)
{
   Myset::iterator iter;
   int l = 0;
   for(iter = s.begin();iter != s.end();iter++)
      l++;
   return l;
 
}
Вопросы:
1) Выдает ошибку при вводе размерности отличной от 1 ("Expression: map/set iterator not dereferencable "). Что нужно исправить?? Что конкретно не так??

2) Можно ли безболезненно внести изменения, чтобы не ограничивать пользователя программы при вводе размерности таблицы (я имею ввиду сделать размерность от 1 до n)???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru