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

Задача "Салфетки" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ повторный прогон программы http://www.cyberforum.ru/cpp-beginners/thread1004987.html
Подскажите, пожалуйста, как сделать повторный прогон алгоритмов без запуска программы (хотите начать заново? (y/n)). На примере простейшей программы "Hello, world". #include <iostream> int main()...
C++ программа не работает задание: Определить входит ли введённая цифра в заданное натурально число. код выдаёт ошибки и я не могу понять как их исправить т.к. нуб. помогите пожалуйста.... код программы: #include... http://www.cyberforum.ru/cpp-beginners/thread1004980.html
Помогите найти ошибку в коде C++
Проблема вот в чём, есть программа, довольно большая по кол-ву строк и поэтому весь код показать не смогу, впринципе вопрос такой: -после завершения работы функции с объектом в меню есть пункт...
Ошибка в алгоритме Рунге-Кутты C++
Здравствуйте! При выполнении курсовой работы по вычислению координат положения спутника ГЛОНАСС столкнулся с ошибкой, что неправильно вычисляются координаты. Числа похожие, но не те. Есть рабочая...
C++ Как в файле перейти на новую строчку? http://www.cyberforum.ru/cpp-beginners/thread1004953.html
Как в файле перейти на новую строчку? Пробовал так fstream sc("Save\\1.txt");//Открыл файл sc.getline(infscore,'endl'); //Считал инфу до конца строки ......... lenscore=strlen(infscore)+1;...
C++ Вызов функции проверки Доброго времени суток! 2-ой день мучаюсь с задачей. Есть массив прямоугольников, вершины которых я считал с файла. Задача состоит в том, чтобы проверить пересекаются ли они. Сделал соответствующую... подробнее

Показать сообщение отдельно
triadec_96
12 / 12 / 1
Регистрация: 27.12.2012
Сообщений: 448
Завершенные тесты: 1

Задача "Салфетки" - C++

11.11.2013, 22:24. Просмотров 319. Ответов 4
Метки (Все метки)

Задача:
На квадратный стол размером NХN раскладывают разноцветные прямоугольные салфетки.
Каждая салфетка кладется параллельно сторонам стола , салфетки могут лежать друг на друге и свисать со стола , или даже падать мимо стола.
Салфетка задается координатами углов : левый верхний , правый нижний ( целые числа ) и цветом ( буква)
Левый верхний угол стола имеет координаты 0,0
Какие цвета будут видны на столе когда все салфетки будет разложено .
Входные данные : файл Din.dat
Первая строка число N пропуск число K
Следующие K строк задают салфетки в порядке преподавания
Каждая строка имеет вид: ltrbc (где ltr b - целые числа , с - латинская буква )
Выходные данные : файл Din.res в котором строка букв цветов ( в алфавитном порядке)
Пример:: файл Din.dat
5 5
-1 -1 4 4 R
2 1 2 2 C
1 1 3 2 b
-1 4 6 8 B
6 4 6 6 g
файл Din.res
BRb
Я начал писать эту программу и мой код дошёл до этого вида.
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 <iostream>
#include <fstream>
#include <math.h>
using namespace std;
void main()
{int n,i,j,l[255],t[255],r[255],b[255],id=0,q=0;
        char* ch;
        char* c;
        char* v;
        char a; bool x; float d,s[255];
ifstream f("Din.dat");
f>>n;
f>>n;
while(!f.eof())
{f>>l[id];
f>>t[id];
f>>r[id];
f>>b[id];
f>>ch[id];}
 
for(i=0;i<=id;i++)
{if(l[i]<0) l[i]=0;
if(t[i]>0) t[i]=0;
if(r[i]>n) r[i]=n;
if(b[i]<n*(-1)) b[i]=n*(-1);}
 
for(i=0;i<=id;i++)//площа квадрата=діагональ в квадраті/2
{d=abs(pow(l[i]-r[i],2)+pow(t[i]-b[i],2));
s[i]=d*d/2;}
 
for(i=0;i<=id;i++)
    for(j=i+1;j<=id;j++)
        if((l[j]<r[i]) && (l[j]>l[i]) && (t[j]<t[i]) && (t[j]>b[i])) s[i]-=(abs(pow(l[j]-r[i],2)+pow(t[j]-b[i],2))*abs(pow(l[j]-r[i],2)+pow(t[j]-b[i],2)))/2;
        else if((r[j]<r[i]) && (r[j]>l[i]) && (t[j]>b[j]) && (t[j]<t[i])) s[i]-=(abs(pow(l[i]-r[j],2)+pow(t[j]-b[i],2))*abs(pow(l[i]-r[j],2)+pow(t[j]-b[i],2)))/2;
        else if((r[j]<r[i]) && (r[j]>l[i]) && (b[j]>b[i]) && (b[j]<t[i])) s[i]-=(abs(pow(l[i]-r[j],2)+pow(t[i]-b[j],2))*abs(pow(l[i]-r[j],2)+pow(t[i]-b[j],2)))/2;
        else if((l[j]<r[i]) && (l[j]>l[i]) && (b[j]<t[i]) && (b[j]>b[i])) s[i]-=pow(abs(pow(l[j]-r[i],2)+pow(t[i]-b[j],2)),2)/2;
        else if((l[j]==l[i]) && (t[j]==t[i]) && (r[j]<r[i]) && (b[j]>b[i])) s[i]-=(abs(pow(l[j]-r[j],2)+pow(t[i]-b[j],2))*abs(pow(l[j]-r[j],2)+pow(t[i]-b[j],2)))/2;
        else if((l[i]==l[j]) && (b[j]==b[i]) && (r[j]<r[i]) && (t[j]<t[i])) s[i]-=pow(abs(pow(l[i]-r[j],2)+pow(t[j]-b[i],2)),2)/2;
        else if((r[i]==r[j]) && (b[i]==b[j]) && (l[j]>l[i]) && (t[j]<t[i])) s[i]-=pow(abs(pow(l[j]-r[i],2)+pow(t[j]-b[i],2)),2)/2;
        else if((l[j]>l[i]) && (t[j]<t[i]) && (r[j]<r[i]) && (b[j]>b[i])) s[i]-=s[j];
        else if((l[j]<l[i]) && (t[j]>t[i]) && (r[j]>r[i]) && (b[j]<b[i])) s[i]=0;
 
        n=0;
        for(i=0;i<=id;i++)
            if(s[i]>0) {c[n]=ch[i];n++;}
 
n=0;
    for(i=0;i<=n;i++)
    {a=c[i];x=0;
        for(j=i+1;j<=n;j++)
            if(a==c[j]) x=1;
        if (x==0)
        {v[q]=c[i];
        q++;}
    }
 
        ofstream ff("Din.txt");
        ff<<v;
        ff.close();
 
}
Но я немного наптупил и забыл учесть тот факт,что салфетку могут положить мимо стола и забыл за число k 9вместо него у меня счётчик id).
В 2012 ВС выбивало ошибку при считывании ch[id].Но когда я запустил эту программу в ВС 2010,то выбивало ошибку на каждом "pow",хотя math.h был подключен.
Ещё ребята смеялись,когда увидили мой код и сказали,что весь код состоит с "четырёх строк".
Напишите пожалуйста алгоритм получше моего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru