Foxter.ru

Foxter.ru (https://www.foxter.ru/index.php)
-   Программирование (https://www.foxter.ru/forumdisplay.php?f=60)
-   -   C++ (https://www.foxter.ru/showthread.php?t=485)

Rocker_dead 15.06.2008 17:40

Kostyan, укажи тогда хоть на баги

Kostyan 22.06.2008 14:09

Rocker_dead,баги может и не совсем баги, а так, недочеты, но...
рассмотрим исходник:

1.
char m, str[9], mark[9]="01111111";
printf("Vvedite bite-marker \n");
scanf("%s", str);

if (strcmp(mark,str))
printf("ERROR");
else
printf("Vvedenniy bite marker verniy - 0x7f \n Vipolnit' poisk?");


не совсем понятный фрагмент. Здесь программа просит ввести бит маркер, затем сравнивает его с эталонным (0х7F) и если введен неправильный маркер выдается ошибка. Тогда я не понимаю, какой вообще смысл запрашивать его у пользователя? Не проще ли зашить его жестко в программу? Потом, здесь же, если введенный бит маркер неверен, программа просто выбросит еррор и... продолжит выполняться дальше. Разве что мы не увидим приглашение о поиске.
И кстати, дальше в программе ты в цикле проверяешь какие то данные с этим бит маркером, жестко зашитим жестко в проге.

2.
if (m=='y') printf("Vvedite massiv is 16 znakov \n");

следующий фрагмент. Мы проверяем ответ пользователя (y/n) и если у, то выводим сообщение на экран и все. программа опять же продолжит выполняться в том же направлении. Тогда смысл подобной проверки?

Касательно двух вышеприведенных фрагментов я так понимаю, что ты решил не злоупотреблять фигурными скобками и переусердствовал?


3.
for (i=0;i<16;i++)
{
scanf("%d", a[i]);
printf("\n");
for (i=0;i<16;i++) printf("%d", a[i], " ");
/*Searching*/
for (i=0;i<9;i++)
{
if (a[i]==0 && a[i+1]==1 && a[i+2]==1 && a[i+3]==1 && a[i+4]==1 && a[i+5]==1 && a[i+6]==1 && a[i+7]==1)
{
z[i]=a[i];
z[i+1]=a[i+1];
z[i+2]=a[i+2];
z[i+3]=a[i+3];
z[i+4]=a[i+4];
z[i+5]=a[i+5];
z[i+6]=a[i+6];
z[i+7]=a[i+7];
i=i+8;
}
else
z[i]=0;
}
for (j=9;j<16;j++)
{
z[j]=0;
}
printf("\n");
for (i=0;i<16;i++)
{
printf("%d", z[i], " ");
}
getch();
}

насчет этого фрагмента. Тут чего то я вообще запутался, равно как и мой отладчик. Вложенные циклы и все такое. Ты используешь переменную i для основного цикла, потом ее же используешь для вложенного. Ладно, это ерунда, так можно делать, но ты не учел, что после первого же вложенного циклапеременная у тебя принимает последнее значение, т.е. 16...


короче, смотри сам, программа непонятная, чего она делает я пока не разобрался (пью пока еще).... расскажи хоть алгоритм для начала, там бы подумали...


ЗЫ а сегодня день траура... 22 июна в 4 часа утра 1941 года началось вторжение немецких войск на территорию СССР... если кто помнит

Rocker_dead 23.06.2008 22:25

Kostyan, во-первых - спасибо тебе большое за то, что откликнулся.

Цитата:

Сообщение от Kostyan
сегодня день траура...

Да, помним...

Цитата:

Тогда я не понимаю, какой вообще смысл запрашивать его у пользователя?
Это просто так, для наглядности, программа не работает на какой то эффект.
Цитата:

расскажи хоть алгоритм для начала, там бы подумали...
После прохождения проверки маркера на вход программы (теоретически с порта) идёт последовательность 0 и 1. и нужно определить наличие в ней этого маркера и вывести эту последовательность, оставив единицы тока этого бит-маркера, а остальное заполнить нулями

Kostyan 27.06.2008 01:38

Rocker_dead, все, кажется вкурил. Тогда сдается неправильно реализовал идею.. хотя бы тут:

Код:

if (a[i]==0 && a[i+1]==1 && a[i+2]==1 && a[i+3]==1 && a[i+4]==1 && a[i+5]==1 && a[i+6]==1 && a[i+7]==1)
ты здесь случайно не путаешь байты и биты?

я тут прикинул пару вариантов, посмотри, может чем то поможет.
1. банально посимвольное сравнение (даем проге символ, он сравнивается со всеми вытекающими.. ):
Код:

#include <stdio.h>
#include <conio.h>

int main()
{
        int symbol=0;
        int bit_marker = 0x7F;        //        0x01111111b
        printf("start: \n");
        for(;;)
        {
                symbol = getch();
                if(symbol==bit_marker)
                {
                        printf("symbol found: %02X\n",symbol);
                }
                else
                {
                        symbol=0;
                        printf("symbol: %02X\n",symbol);
                }
        }
        return 0;
}

2. тут в принципе тоже самое, только эмулируется битовый последовательный поток:
Код:

#include <stdio.h>
#include <conio.h>

void main()
{
        unsigned char bit,data=0,out=0;
        int bit_marker = 0x7F;
        printf("start: \n");
        for(;;)
        {
                bit = getch();
                if(bit==0x31 || bit ==0x30)
                {
                        bit &= 0x01;
                        data <<= 1;
                        data &= 0xFE;
                        data |= bit;
                        if(data == bit_marker)
                        {
                                printf("\nbit_marker found!\n");
                                out = data;
                        } else out = 0;
                        printf("%02X ",out);
                }
        }
}

да, кстати, забываю спросить. А что это за вторые кавычки после переменной в аргументах?

Код:

printf("%d", a[i], " ");


Часовой пояс GMT +3, время: 08:39.

Powered by vBulletin
Copyright ©2000-2024, Jelsoft Enterprises Ltd.