нужно вставить счетчик в прогу [c++] плиз хелп!

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Tanzilit
Сообщения: 21
Зарегистрирован: 09 дек 2007, 17:08

Здравствуйте товарищи программеры
тут такая ситуация
Есть уже написанная прога
Единственно в чем я вас прошу помочь:
1)Протестить прогу(я тестил на досовском с++ 3.1 и чет тупит, хотя в коде ошибок не заметил)
2)необходимо встроить в нее счетчик операций а увы не умею. Помогите плиз.Вам это должно быть не трудно а мне очнеь поможете!
Итак условие задачи:
Дан массив целых, положительных, ограниченных сверху чисел. Определить наиболее часто встречающуюся подряд тройку чисел
Решение:

Код: Выделить всё

#include<stdio.h> 
#include<mem.h> 
#include<stdlib.h> 
 
#define MAX 8 //Ограничивающее число 
#define MAXMS 1024 //Размер массива 
 
void main() 
{ 
int i, i1, i2, j, n1, n2, n3; 
int ms[MAXMS], //Наш массив 
kms[MAX][MAX][MAX]; //Массив под комбинации 
 
//Обнуляем массив 
memset( kms, 0, MAX * MAX * MAX * sizeof(int) ); 
 
//Заполняем массив случайным образом в указанных пределах 
randomize( ); 
for( i = 0; i < MAXMS; i ++ ) 
ms[i] = random( MAX ); 
 
//Ищем кол-во каждой комбинации 
for( i = 0; i < MAXMS; i += 3 ){ 
if( i + 2 > MAXMS ) break; 
kms[ms[i]][ms[i + 1]][ms[i + 2]] ++; 
} 
 
//Ищем наиболие встречающуюся комбинацию 
for( j = 0, i = 0; i < MAX; i ++ ) 
for( i1 = 0; i1 < MAX; i1 ++ ) 
for( i2 = 0; i2 < MAX; i2 ++ ) 
if( j < kms[i][i1][i2] ){ 
j = kms[i][i1][i2]; 
n1 = i; 
n2 = i1; 
n3 = i2; 
} 
 
//Теперь n1 n2 n3 - искомая тройка чисел встречается j раз 
printf( "%d %d %d - %d", n1, n2, n3, j ); 
}

p.s.Еще раз повторюсь - Необходимо начертить таблицу по типу
размерность массива|колл-во операций
ну то бишь как от размерности массива изменяется колл-во операций
для этого надо встроить счетчик операций в прогу
Заранее благодарен!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Смотря какие операции надо считать.

Я бы сделал так:

//Ищем кол-во каждой комбинации
for( i = 0; i < MAXMS; i += 3 ){
opers++;
if( i + 2 > MAXMS ) break;
kms[ms][ms[i + 1]][ms[i + 2]] ++;
}

//Ищем наиболие встречающуюся комбинацию
for( j = 0, i = 0; i < MAX; i ++ )
for( i1 = 0; i1 < MAX; i1 ++ )
for( i2 = 0; i2 < MAX; i2 ++ )
{opers++;
if( j < kms[i1][i2] ){
j = kms[i1][i2];
n1 = i;
n2 = i1;
n3 = i2;
}
}
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Tanzilit
Сообщения: 21
Зарегистрирован: 09 дек 2007, 17:08

в задании звучит - значимые операции
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Тогда

//Ищем кол-во каждой комбинации
for( i = 0; i < MAXMS; i += 3 ){
if( i + 2 > MAXMS ) break;
opers++;
kms[ms][ms[i + 1]][ms[i + 2]] ++;
}

//Ищем наиболие встречающуюся комбинацию
for( j = 0, i = 0; i < MAX; i ++ )
for( i1 = 0; i1 < MAX; i1 ++ )
for( i2 = 0; i2 < MAX; i2 ++ )
if( j < kms[i1][i2] ){
opers++;
j = kms[i1][i2];
n1 = i;
n2 = i1;
n3 = i2;
}

А вообще словосочетание "значимые операции" неочевидно. Требуется расшифровка. Что значит "значимые"? Без которых программа не будет работать? Так они все такие.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Tanzilit
Сообщения: 21
Зарегистрирован: 09 дек 2007, 17:08

Снова здравствуйте в общем вот:

Код: Выделить всё

#include<stdio.h>
#include<mem.h>
#include<stdlib.h>

#define MAX 4 //ogranihevauhee 4islo
#define MAXMS 256 //Razmer Massiva

void main()
{
int i, i1, i2, j, n1, n2, n3;
int ms[MAXMS], //Our Massive
kms[MAX][MAX][MAX]; //massiv pod kombinazii

//obnulaem massive
memset( kms, 0, MAX * MAX * MAX * sizeof(int) );

//zapolnaem massive slu4aynim obrazom v ukazannih predelax
randomize( );
for( i = 0; i < MAXMS; i ++ )
ms[i] = random( MAX );

//ishem koll-vo kajdoi kombinazii
for( i = 0; i < MAXMS; i += 3 ){
if( i + 2 > MAXMS ) break;
kms[ms[i]][ms[i + 1]][ms[i + 2]] ++;
}

//ishem naibolee vstre4aushuusa kombinaziu
int count = 0; //***
for( j = 0, i = 0; i < MAX; i ++ )
for( i1 = 0; i1 < MAX; i1 ++ )
for( i2 = 0; i2 < MAX; i2 ++ )
{
count++;       //***
if( j < kms[i][i1][i2] )
{
j = kms[i][i1][i2];
n1 = i;
n2 = i1;
n3 = i2;
}
}
for( i = 0; i < MAXMS; i++ )
printf(" %d ", ms[i]);
printf("Razmernost massiva = %d\nkoll-vo operaciy = %d\n",MAXMS,count); //***
//teper n1 n2 n3 - iskomaya troika 4isel vstre4aushayasaя j raz
printf( "%d %d %d - %d", n1, n2, n3, j );
}
Коментарии на латинском тк сдаваться это дело будет в досовском си
просьба
1) проверить работоспособность в соответствии с условием(1 пост темы)
2) проверить верно ли считает колличество операций(как я понял от размерности массива оно не зависит а зависит от ограничивающего числа)
кстати еще вопрос возник - а что данная прога выведет если троек не будет найдено? видимо какой то бред наврно надо подправить...если кто может этим помочь плиз хелп
В задании нужно ПОДСЧИТАТЬ ЗНАЧИМЫЕ ОПЕРАЦИИ
Tanzilit
Сообщения: 21
Зарегистрирован: 09 дек 2007, 17:08

Хыиуду
спасибо ща попробую по твоему варианту сделат ьпосомтрю че выйдет
Tanzilit
Сообщения: 21
Зарегистрирован: 09 дек 2007, 17:08

снова здравствуйте
В общем пробовал разные варианты кое что сам передилывал и тп в конце концов я решил остановится на таком

Код: Выделить всё

#include<stdio.h>
#include<mem.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 8 //Ограничивающее число
#define MAXMS 1024 //Размер массива
int flag=0;
void main() { int i, i1, i2, j, n1, n2, n3;
int ms[MAXMS], //Наш массив 
kms[MAX][MAX][MAX]; //Массив под комбинации
 
memset( kms, 0, MAX * MAX * MAX * sizeof(int) ); //Обнуляем массив
//Заполняем массив случайным образом в указанных пределах
 randomize( );
 for( i = 0; i < MAXMS; i ++ )
 {ms[i] = random( MAX );
  flag++;
 }
//Ищем кол-во каждой комбинации 
 for( i = 0; i < MAXMS; i += 3 )
{ if( i + 2 > MAXMS )
break;
kms[ms[i]][ms[i + 1]][ms[i + 2]] ++;
flag++;
 }
//Ищем наиболие встречающуюся комбинацию 
for( j = 0, i = 0; i < MAX; i ++ )
for( i1 = 0; i1 < MAX; i1 ++ )
 for( i2 = 0; i2 < MAX; i2 ++ )
 if( j < kms[i][i1][i2] )
{ j = kms[i][i1][i2];
 n1 = i;
 n2 = i1;
n3 = i2;
flag++;
}
//Теперь n1 n2 n3 - искомая тройка чисел встречается j раз  
printf( "%d %d %d - %d", n1, n2, n3, j );
//Выводим на экран результат счетчика(подсчитывающего колличество операций)
printf("\n%d",flag);
getch();
}
Чем прошу помочь:
1)Проверить правильно ли работает счетчик операций (работоспособность проги проверил вроде пашет верно)
2)в задании есть такой пункт - словесное и математическое описание алгоритма.А поскольку я не все делал сам то и сделать это не могу.Кто может помочь напишите плиз Словесное и математическое описание этого алгоритма!
Ответить