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

Никак не могу разобраться с ошибкой. - 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
Начал работать со структурами, но пока что не очень разобрался. я щас пытаюсь отладить ввод вывод структуры : название станции метро : зона: цена. если я цену ввожу как строку, и работаю с ней как со строкой , т овсе ок, но мне для дальнейшей работы цена нужна как число, я сделал вот так #include<stdio.h> #include<stdlib.h> #include<math.h> #include<iomanip> #include<conio.h>...
C++ Дан файл,содержащий информацию о поступлении платежей по квартплате в текущий год. Дан файл,содержащий информацию о поступлении платежей по квартплате в текущий год.Структура записи файла: -номер лицевого счета -фамилия -номер квартиры -номер месяца -сумма платежа Написать программу выдающую: -список номеров квартир с фамилиями жильцов ,от которых поступили платежи за указанный месяц. -суммарное значение поступивших с начала года платежей по заданному номеру лицевого... подробнее

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

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

15.12.2010, 23:38. Просмотров 401. Ответов 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)???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru