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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 20:59   #1
Dead Romantic
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 32
По умолчанию Буквы в массиве из 1 и 0

Задан массив m*n, заполненный 0 и 1. 0 означает пустое место. Необходимо выделить в данном массиве количество нарисованных букв L, H, E, F, Г. Известно, что буквы не могут соприкасаться друг с другом и не могут быть повернуты. Толщина линии равна единицеб размеры букв произвольные, гарнитура букв не имеет засечек. Массив читается с файла, ошибок не выдает, только "Warning'ов" 34 штуки. Программа при подсчете в конце выдает ерунду вместо количества, и количество букв Г равно нулю всегда почему-то...
Код:
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include <windows.h>
//---------------------------------------------------------------------------
#pragma argsused
void rus(char*a)
{char*b=new char [strlen(a)+1];
CharToOem (a,b);
cout<<b;
delete[]b;
}
int main(int argc, char* argv[])
{int i,j,m,n,**a,k,l,o,p,q,z1,z2,z3,z4,z5,z6,G,H,F,E,L;
FILE*in;
if((in=fopen("massiv.txt","r"))!=NULL)

     {fscanf(in,"%d %d",&n,&m);
      a = new int*[n];
      for(i=0;i<n;i++)
               {a[i]=new int[m];
                for(j=0;j<m;j++)
                fscanf(in,"%d",&a[i][j]);
               }

     }
rus("Исходный массив: ");
cout<<"\n";
for (i=0;i<n;i++)
    {for (j=0;j<m;j++)
     cout<<a[i][j];
     cout<<"\n";
    }
fclose(in);
cout<<"\n";
k=0;
l=0;
o=0;
p=0;
q=0;
z1=0;
z2=0;
z3=0;
z4=0;
z5=0;
z6=0;
G=0;
H=0;
F=0;
E=0;
L=0;
for (i=0;i<n;i++)
    {for (j=0;j<m;j++)
        {if (a[i][j]==1)

        {for (k=j+1;k<m;k++)
         {if (a[i][k+1]==0)
         {break;
          z1=1;}
          else
          z1=0;}

        for (l=i+1;l<n;l++)
         {if (a[l+1][j]==0)
         {break;
          z2=1;}
          else
          z2=0;}

        for (o=j+1;o<m;o++)
         {if (a[l][o+1]==0)
         {break;
          z3=1;}
          else
          z3=0;}

         for (p=l+1;p<n;p++)
         {if (a[p+1][j]==0)
         {break;
          z4=1;}
          else
          z4=0;}


        for (q=j+1;q<m;q++)
         { if (a[p][q+1]==0)
         {break;
          z5=1;}
          else
          z5=0;}

        if (a[l+1][o]==1)
        z6=1;
        else
        z6=0;
        }
if((z1==1)&&(z2=1)&&(z3=0)&&(z4=0)&&(z5=0)&&(z6=0))
G++;

if((z1==0)&&(z2=1)&&(z3=1)&&(z4=0)&&(z5=0)&&(z6=1))
H++;

if((z1==1)&&(z2=1)&&(z3=1)&&(z4=1)&&(z5=0)&&(z6=0))
F++;


if((z1==1)&&(z2=1)&&(z3=1)&&(z4=1)&&(z5=1)&&(z6=0))
E++;


if((z1==0)&&(z2=1)&&(z3=1)&&(z4=0)&&(z5=0)&&(z6=0))
L++;

rus("Количество букв ");
cout<<'L: '<<L;
cout<<"\n";
rus("Количество букв ");
cout<<'H: '<<H;
cout<<"\n";
rus("Количество букв ");
cout<<'E: '<<E;
cout<<"\n";
rus("Количество букв ");
cout<<'F: '<<F;
cout<<"\n";
rus("Количество букв Г:");
cout<<G;
cout<<"\n";
getch();
return 0;
}
}
}
//---------------------------------------------------------------------------
Dead Romantic вне форума Ответить с цитированием
Старый 12.05.2010, 21:09   #2
Dead Romantic
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 32
По умолчанию

Пардон, переделал, поставил {} где нужно.
Код:
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include <windows.h>
//---------------------------------------------------------------------------
#pragma argsused
void rus(char*a)
{char*b=new char [strlen(a)+1];
CharToOem (a,b);
cout<<b;
delete[]b;
}
int main(int argc, char* argv[])
{int i,j,m,n,**a,k,l,o,p,q,z1,z2,z3,z4,z5,z6,G,H,F,E,L;
FILE*in;
if((in=fopen("massiv.txt","r"))!=NULL)

     {fscanf(in,"%d %d",&n,&m);
      a = new int*[n];
      for(i=0;i<n;i++)
               {a[i]=new int[m];
                for(j=0;j<m;j++)
                fscanf(in,"%d",&a[i][j]);
               }

     }
rus("Исходный массив: ");
cout<<"\n";
for (i=0;i<n;i++)
    {for (j=0;j<m;j++)
     cout<<a[i][j];
     cout<<"\n";
    }
fclose(in);
cout<<"\n";
k=0;
l=0;
o=0;
p=0;
q=0;
z1=0;
z2=0;
z3=0;
z4=0;
z5=0;
z6=0;
G=0;
H=0;
F=0;
E=0;
L=0;
for (i=0;i<n;i++)
    {for (j=0;j<m;j++)
        {if (a[i][j]==1)

        {for (k=j+1;k<m;k++)
         {if (a[i][k+1]==0)
         {break;
          z1=1;}
          else
          z1=0;}

        for (l=i+1;l<n;l++)
         {if (a[l+1][j]==0)
         {break;
          z2=1;}
          else
          z2=0;}

        for (o=j+1;o<m;o++)
         {if (a[l][o+1]==0)
         {break;
          z3=1;}
          else
          z3=0;}

         for (p=l+1;p<n;p++)
         {if (a[p+1][j]==0)
         {break;
          z4=1;}
          else
          z4=0;}


        for (q=j+1;q<m;q++)
         { if (a[p][q+1]==0)
         {break;
          z5=1;}
          else
          z5=0;}

        if (a[l+1][o]==1)
        z6=1;
        else
        z6=0;
        }

if((z1==1)&&(z2=1)&&(z3=0)&&(z4=0)&&(z5=0)&&(z6=0))
G++;

if((z1==0)&&(z2=1)&&(z3=1)&&(z4=0)&&(z5=0)&&(z6=1))
H++;

if((z1==1)&&(z2=1)&&(z3=1)&&(z4=1)&&(z5=0)&&(z6=0))
F++;


if((z1==1)&&(z2=1)&&(z3=1)&&(z4=1)&&(z5=1)&&(z6=0))
E++;


if((z1==0)&&(z2=1)&&(z3=1)&&(z4=0)&&(z5=0)&&(z6=0))
L++;
 }
 }
rus("Количество букв ");
cout<<'L: '<<L;
cout<<"\n";
rus("Количество букв ");
cout<<'H: '<<H;
cout<<"\n";
rus("Количество букв ");
cout<<'E: '<<E;
cout<<"\n";
rus("Количество букв ");
cout<<'F: '<<F;
cout<<"\n";
rus("Количество букв Г:");
cout<<G;
cout<<"\n";
getch();
return 0;
}

//---------------------------------------------------------------------------
Только теперь в строке
Код:
{if (a[l+1][j]==0)
выдает ошибку...
Программа запускается и работает на уровне вывода массива, потом выскакивает окно дебаггера, пишет про ошибку и в коде показывает стрелочкой на ту самую строку с if'ом...
Dead Romantic вне форума Ответить с цитированием
Старый 12.05.2010, 21:28   #3
Dead Romantic
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 32
По умолчанию

Ошибка, не знаю почему...
Код:
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include <windows.h>
//---------------------------------------------------------------------------
#pragma argsused
void rus(char*a)
{char*b=new char [strlen(a)+1];
CharToOem (a,b);
cout<<b;
delete[]b;
}
int main(int argc, char* argv[])
{int i,j,m,n,**a,k,l,o,p,q,z1,z2,z3,z4,z5,z6,G,H,F,E,L,s;
FILE*in;
if((in=fopen("massiv.txt","r"))!=NULL)

     {fscanf(in,"%d %d",&n,&m);
      a = new int*[n];
      for(i=0;i<n;i++)
               {a[i]=new int[m];
                for(j=0;j<m;j++)
                fscanf(in,"%d",&a[i][j]);
               }

     }
rus("Исходный массив: ");
cout<<"\n";
for (i=0;i<n;i++)
    {for (j=0;j<m;j++)
     cout<<a[i][j];
     cout<<"\n";
    }
fclose(in);
cout<<"\n";
k=0;
l=0;
o=0;
p=0;
q=0;
z1=0;
z2=0;
z3=0;
z4=0;
z5=0;
z6=0;
G=0;
H=0;
F=0;
E=0;
L=0;
s=0;
for (i=0;i<n;i++)
    {for (j=0;j<m;j++)
        {if (a[i][j]==1)

          {for (k=j+1;k<m-2;k++)
         {if (a[i][k+1]==0)
         {break;
          z1=1;}
          else
          z1=0;}

        for (l=i+1;l<n-1;l++)
         {if (a[l][j+1]==1)
         {break;
          z2=1;}
          else
          z2=0;}

        for (o=j+1;o<m-2;o++)
         {if (a[l][o+1]==0)
         {break;
          z3=1;}
          else
          z3=0;}

         for (p=l+1;p<n-2;p++)
         {if (a[p][j+1]==1)
         {break;
          z4=1;}
          else
          z4=0;}


        for (q=j+1;q<m-2;q++)
         { if (a[p][q+1]==0)//тут выдает ошибку
         {break;
          z5=1;}
          else
          z5=0;}

        for (s=l+1;s<m-2;s++)
        if (a[s][o]==1)
        {break;
        z6=1;}
        else
        z6=0;
        }

if((z1==1)&&(z2==1)&&(z3==0)&&(z4==0)&&(z5==0)&&(z6==0))
G++;

if((z1==0)&&(z2==1)&&(z3==1)&&(z4==0)&&(z5==0)&&(z6==1))
H++;

if((z1==1)&&(z2==1)&&(z3==1)&&(z4==1)&&(z5==0)&&(z6==0))
F++;


if((z1==1)&&(z2==1)&&(z3==1)&&(z4==1)&&(z5==1)&&(z6==0))
E++;


if((z1==0)&&(z2==1)&&(z3==1)&&(z4==0)&&(z5==0)&&(z6==0))
L++;
 }
 }
rus("Количество букв ");
cout<<'L: '<<L;
cout<<"\n";
rus("Количество букв ");
cout<<'H: '<<H;
cout<<"\n";
rus("Количество букв ");
cout<<'E: '<<E;
cout<<"\n";
rus("Количество букв ");
cout<<'F: '<<F;
cout<<"\n";
rus("Количество букв Г:");
cout<<G;
cout<<"\n";
getch();
return 0;
}

//---------------------------------------------------------------------------

Последний раз редактировалось Dead Romantic; 13.05.2010 в 04:12.
Dead Romantic вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновляющиеся буквы. Fischr Общие вопросы C/C++ 1 02.05.2010 21:20
Буквы алфавита Golovastik Общие вопросы C/C++ 27 24.07.2009 22:29
Браузеры и русские буквы Linel PHP 6 12.04.2009 13:00
Прописные буквы Guest_ Помощь студентам 6 15.12.2007 21:29