![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
У меня есть массив: mas=21213140404040. Хочу получить из него следующий массив: m1= 223140. Счётчик "cnt" не инкрементируется. В чём причина?
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
char mas[16];
void ToDisplay()
{ char m[16],m1[8];
int cnt=0, b= 0, x,i,j=0;
for (i=0; i<16; i++)
m[i]=(int)mas[i];
for (i=0; i<16; i+=2)
{
x=(int)m[i];
while(j<16)
{
cout<<x<<endl;
cout<<(int)m[j]<<endl;
cout<<(int)m[j+1]<<endl;
if ((m[j]==x)&&(m[j+1]==1))
{
cnt++; // <--- !!!
cout<<"Cnt = "<<cnt<<endl;
break;
}
j+=2;
}
m1[b]=x;
m1[b+1]=cnt;
b+=2;
cnt=0;
}
for (i=0; i<8; i++)
{
cout<<(int)m1[i]<<" ";
}
cout<<endl;
getch();
}
int main()
{
mas[0]=2;
mas[1]=1;
mas[2]=2;
mas[3]=1;
mas[4]=3;
mas[5]=1;
mas[6]=3;
mas[7]=0;
mas[8]=4;
mas[9]=0;
mas[10]=4;
mas[11]=0;
mas[12]=4;
mas[13]=0;
mas[14]=4;
mas[15]=0;
for(int i=0;i<16;i++)
{
cout<<(int)mas[i]<<" ";
}
cout<<endl;
ToDisplay();
getch();
}
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Все увеличивается, до тех пор, как
while(j<16)
{
cout<<x<<endl;
cout<<(int)m[j]<<endl;
cout<<(int)m[j+1]<<endl;
if ((m[j]==x)&&(m[j+1]==1))
{
cnt++;
cout<<"Cnt = "<<cnt<<endl;
break;
}
j+=2;
}
m1[b]=x; // <--- Здесь b = 8, и все остальное уже неважно -
m1[b+1]=cnt;
b+=2;
cnt=0;
}
, поскольку Цитата 19/10/2008 21:26:21 started a CodeGuard™ process: Project1.exe Access overrun in process: Project1.exe(2084) - File1.cpp Attempt to access 1 byte(s) at 0x0012FF60+8, that is at offset 0+8 in local block 0x0012FF60(=[ebp-0x14] @Project1.exe:0x01:00035B) which is only 8 bytes long. Сообщение отредактировано: volvo - 19.10.2008 22:23 |
Rocket |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Все увеличивается, до тех пор, как while(j<16)
{
cout<<x<<endl;
cout<<(int)m[j]<<endl;
cout<<(int)m[j+1]<<endl;
if ((m[j]==x)&&(m[j+1]==1))
{
cnt++;
cout<<"Cnt = "<<cnt<<endl;
break;
}
j+=2;
}
m1[b]=x; // <--- Здесь b = 8, и все остальное уже неважно -
m1[b+1]=cnt;
b+=2;
cnt=0;
}
, посколькуА как это исправить? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ты в следующий раз говори, по какому алгоритму это все делается, и заодно приводи в программу те данные, которые заявлены в самом посте...
Я бы делал так: #include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
char mas[14] = {
2, 1, 2, 1, 3, 1, 4, 0, 4, 0, 4, 0, 4, 0
};
void ToDisplay()
{
char m[14], m1[8] = {0};
int cnt=0, b = 0, x, i, j=0;
for (i=0; i<14; i++) {
m[i] = (int)mas[i];
}
for (i=0; i<14; ) {
x = (int)m[i];
int curr_cnt = (int)m[i+1];
j = i;
while((j < 14) && (m[j]==x && m[j+1]==curr_cnt)) {
cnt++;
cout << "Cnt = " << cnt << endl;
j += 2;
}
cout << x << endl;
m1[b++] = x;
m1[b++] = cnt * curr_cnt;
i += 2*cnt;
cnt = 0;
}
for (i=0; i<8; i++) {
cout << (int)m1[i] << " ";
}
cout << endl;
getch();
}
int main()
{
for(int i = 0; i < 14; i++) {
cout << (int)mas[i] << " ";
}
cout << endl;
ToDisplay();
getch();
return 0;
}
|
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вообще мне нужно сделать следующее:
дан массив, к примеру, 21002100310000004000000000000000. Нужно вывести следующее: Блоки по 4 байта : 2 (то есть 21002100) Блоки по 8 байт : 1 (то есть 31000000) Блоки по 16 байт : 0 (то есть 4000000000000000). Как это реализовать более рационально? |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 8:59 |