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

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

Восстановить пароль Регистрация
 
ok-smile
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 3
15.12.2010, 23:38     Никак не могу разобраться с ошибкой. #1
Задание:
Имеются числа х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)???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
16.12.2010, 00:04     Никак не могу разобраться с ошибкой. #2
Вместо
C++
1
2
3
4
#include "stdafx.h"
#include "set"
#include "time.h"
#include "iostream"
Попробуйте
C++
1
2
3
4
#include <iostream>
#include <set>
#include <ctime>
#include <cstdlib>
ok-smile
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 3
16.12.2010, 00:12  [ТС]     Никак не могу разобраться с ошибкой. #3
к сожалению не помогло
ok-smile
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 3
19.12.2010, 12:55  [ТС]     Никак не могу разобраться с ошибкой. #4
Неужели никто не знает, как помочь??
Yandex
Объявления
19.12.2010, 12:55     Никак не могу разобраться с ошибкой.
Ответ Создать тему
Опции темы

Текущее время: 21:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru