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

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

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

Восстановить пароль

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

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

Задан массив m*n, заполненный 0 и 1. 0 означает пустое место. Необходимо выделить в данном массиве количество нарисованных букв L, H, E, F, Г. Известно, что буквы не могут соприкасаться друг с другом и не могут быть повернуты. Толщина линии равна единицеб размеры букв произвольные, гарнитура букв не имеет засечек.
Код:
#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 вне форума Ответить с цитированием
Старый 13.05.2010, 09:47   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Где выдает ошибку, предваритель проинициализируй р скорее всего там проиходит выход за границы массива, установи р=0 ну или тому значению которому нужно тебе
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Ответ


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



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