Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2009, 22:45   #1
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию Подсчет рандомных прямоугольников на листе бумаги

Итак все норм идет, вот тока цикл не хочет правильно работать ... и на мой взгляд проблема в условии ифа

Код:
#include <iostream>
#include <stdlib.h>
using namespace std;

struct pryamoygilnik{int dl; int shr;int str; int st;};

int main(){
    srand((unsigned)time(NULL) );
    int x,y,kol,n=0,str1=0,st1=0,str2,st2,sh=0,lol=0;
    char exit;
    cout<<"Vvedite wirinu lista"<<endl;
    cin>>x;
    cout<<"Vvedite dlinnu lista"<<endl;
    cin>>y;
    int lst[x][y];
    for(int i=0;i<y;i++){                      
            for(int j=0;j<x;j++){             
                    lst[i][j]=0;               
                    }
            }
    kol=1+(rand()%100);              //Íà÷àëî ðàíäîìà             
    struct pryamoygilnik pr[kol];  
    pr[1].dl=rand()%int(x/4)+2;
    pr[1].shr=rand()%int(y/4)+2;
    pr[1].str=rand()%(x-pr[1].dl);
    pr[1].st=rand()%(y-pr[1].shr);
    for(int q=pr[1].str ; q<(pr[1].str+pr[1].dl) ; q++){
            for(int p=pr[1].st ; p<(pr[1].st+pr[1].shr) ; p++){
                    lst[q][p]=1;
                    }
            }
                                    
     for(int o=2;o<=kol;o++){
             n=0;
             pr[o].dl=rand()%int(x/4)+2;
             pr[o].shr=rand()%int(y/4)+2;
             pr[o].str=rand()%(x-pr[o].dl);
             pr[o].st=rand()%(y-pr[o].shr);
             for(int w=pr[o].str-1 ; w<(pr[o].str+pr[o].dl)+1 ; w++){
                     for(int e=pr[o].st-1 ; e<(pr[o].st+pr[o].shr)+1 ; e++){
                             if(lst[w][e]==1)n++;
                                 }
                     }
             if(n==0){                      
                      for(int c=pr[o].str ; c<(pr[o].str+pr[o].dl) ; c++){
                              for(int v=pr[o].st ; v<(pr[o].st+pr[o].shr) ; v++)lst[c][v]=1;} //êîíåö ðàíäîìà
                      }
             }
      for(int i1=0;i1<y;i1++){             //Âûâîä ìàñèâà ñ ôèãóðàìè
              cout<<endl;                        
              for(int j1=0;j1<x;j1++){
                      cout<<lst[i1][j1];           
                      }
              } 
      
     for(int gg=0;gg<2;gg++){ //начало цыкла
             str1=0;
             st1=0;         
             while(lst[str1][st1]!=1){                                      //т.к. прямоугольники на листе изображены в виде "1", 
                                      st1++;                                      //то я ищю левый верхний угол, прямоугольника, и запоминаем го координаты
                                      if(st1==(x-1)){
                                                     st1=0;
                                                     str1=str1+1;
                                                     }
                                      }
             //sh++;
             //if(sh>=100)break;    
      if((str1!=(y-3))&&(st1!=(x-3))){ //проблемное условие, и тут по идее должна идти проверка на то, что "а не кончился ли массив"
                                          lol++;                                          //хотя в его надобности я ща начинаю сомневаться ....
                                      str2=str1;
                                      st2=st1;          
                                      while(lst[str2][st1]==1){                  //В следующих циклах узнаем длинну и ширину
                                                               str2++;
                                                               }       
                                      while(lst[str1][st2]==1){
                                                               st2++;
                                                               }
                                      for(int c1=str1 ; c1<str2 ; c1++){                                  //заменяем прямоугольник из 1иц на прямоугольник из 2ек
                                              for(int v1=st1 ; v1<st2 ; v1++){lst[c1][v1]=2;}    //для того что бы while на него не реагировал при поиске  угла
                                              } 
                               
                               gg=0;                                //обнуляем, для запуска по новой цикла, массив не будет пройден до конца
                                                                        //сообственно для чего и условие
                               }//if                                  
      }//for (N)
      cout<<endl<<"________________________________________________";
      for(int i2=0;i2<y;i2++){             //Âûâîä ìàñèâà ñ ôèãóðàìè
              cout<<endl;                        
              for(int j2=0;j2<x;j2++){
              cout<<lst[i2][j2];
              }
              }
      //cout<<endl<<sh;           
   cin>>exit;
}
З.Ы. сорри за коменты кривые, с кодировкой проблемы (

Последний раз редактировалось Junk1E; 10.12.2009 в 22:54.
Junk1E вне форума Ответить с цитированием
Старый 10.12.2009, 23:03   #2
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию

сорри, нашел ошибку, пля... 2 часа моск насиловал себе ((((
Junk1E вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод прямоугольников (Паскаль). Alexey_HvaranG Помощь студентам 2 24.11.2009 13:46
ячейка на одном листе, в которую необходимо подставлять данные из столбца, находящегося на другом листе Ирина Водолагина Microsoft Office Excel 4 04.03.2009 23:38
Xerox Phaser 3121: Нет бумаги Retiz Компьютерное железо 2 05.01.2009 21:10
5 прямоугольников Carbon Помощь студентам 10 08.11.2007 10:08