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

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

Войти
Регистрация
Восстановить пароль
 
ok-smile
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 3
#1

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

15.12.2010, 23:38. Просмотров 395. Ответов 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)???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 23:38     Никак не могу разобраться с ошибкой.
Посмотрите здесь:

C++ Никак не могу разобраться с конструктором.
C++ Не могу разобраться с ошибкой в проге
C++ Программка вроде не сложная, но никак не могу разобраться с модулями... Часть кода есть
помогите разобраться с ошибкой в вызове функции C++
пом0гите разобраться с ошибкой C++
не могу разобраться с ошибкой C++
Создайте класс, имитирующий работу биллинговой системы сотового оператора (Не могу разобраться с ошибкой) C++
Функции в c++. никак не разобраться с задачками C++
разобраться с ошибкой с3867 (msvs 2012) C++
C++ Не могу разобраться с ошибкой
C++ Не могу разобраться с ошибкой
Не могу разобраться с ошибкой C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#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     Никак не могу разобраться с ошибкой.
Ответ Создать тему
Опции темы

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