Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Код, коменты к коду 
:(
    Опции темы
zall
Дата 21.12.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



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


void Expand( const long *pIn, const int n, long **ppOut, int *pn , int *pm);

int main()
{
long In[] = {3,7,8,4,11,6,15983,2 };

int n = sizeof(In)/sizeof(long); 
int m;
long *pOut = 0;

Expand( In, n, &pOut, &n, &m );

for( int i=0; i<n; ++i )
{
printf("\n Out[%d] = %d", i, *(pOut+i));
}

delete pOut;

printf("\n count= %d", m);
getch();
return 0;
} //end of main



void Expand( const long *pIn, const int n, long **ppOut, int *pn, int *pm)
{
int i;
int count = 0;
for( i=0; i<n; ++i )
{
if( !(pIn[i] & 0x1) )// chetn
count++;
}
long *pWork = new long [n+count];
int j;
for( i=0, j=0; i<n; ++i )
{
pWork[j++] = pIn[i];

if( !(pIn[i] & 0x1) )
{
pWork[j++] = 0;
}
}
*ppOut = pWork;
*pn = n+count;
*pm = count;
}


напишите коменты к коду плиз а то чтот непонятное
программа добавляет после каждого чётного элемента 0

PM MAIL   Вверх
mes
Дата 21.12.2008, 16:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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


--------------------
PM MAIL WWW   Вверх
zall
Дата 21.12.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



дело в том, что программу писал не я, а человек уехавший отдыхать, а мне сдавать надо. Без коментов вообще никак, а сам я их написать не в состоянии,  ибо не понял алгоритма
PM MAIL   Вверх
andrew_121
Дата 21.12.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Мдя... Вот у некоторых человечков, хорошие привычки. Типа сделайте то да это за меня.
Вот, не трудно. Принципиально не помогу.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zall
Дата 21.12.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



ну хотяб не ко всему а
 int n = sizeof(In)/sizeof(long); 

и

long *pWork = new long [n+count];
int j;
for( i=0, j=0; i<n; ++i )
{
pWork[j++] = pIn[i];

if( !(pIn[i] & 0x1) )
{
pWork[j++] = 0;

PM MAIL   Вверх
Dmi3ev
Дата 21.12.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

 int n = sizeof(In)/sizeof(long); 

делишь размер массива In на размер типа данных long, получаешь 8, тк в массиве 8 элементов, каждый имеет тип long

Добавлено через 2 минуты и 3 секунды
Код

long *pWork = new long [n+count];

*pWork - это указатель, ты выделяешь память для хранения n+count значений типа long.


--------------------

PM MAIL   Вверх
zall
Дата 21.12.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



спасибо  smile 
PM MAIL   Вверх
kurtis
Дата 21.12.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



А в программе случаем нету ошибки?
Мы передаем указатель из функции main() в функцию Expand()
Код

long *pOut = 0;

Expand( In, n, &pOut, &n, &m );
затем в функции Expand() создаем еще один указатель
Код

long *pWork = new long [n+count];
 который присваиваем указателю переданному из ф-ци main() 
Код

*ppOut = pWork;

Т.е. разве не следует в конце функции Expand() удалить pWork ?
PM MAIL   Вверх
NewDima
Дата 21.12.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Код

void Expand( const long *pIn, const int n, long **ppOut, int *pn , int *pm);

int main(int argc, char* argv[])
{
long In[] = {3,7,8,4,11,6,15983,2}; //creating an array of long
int n = sizeof(In)/sizeof(long); //geting cell count of array
int m; //creating variable
long *pOut = 0; //Creating an pointer too long value variable initializing by 0

Expand( In, n, &pOut, &n, &m ); // call expanding function

for( int i=0; i<n; ++i ) //Cycle for each element of array
{
printf("\n Out[%d] = %d", i, *(pOut+i)); //printout each value of array
}

delete pOut; //deleting earlier created variable

printf("\n count= %d", m); //printout count of even elements of array
getch(); //wait for once input
return 0;
} //end of main



void Expand( const long *pIn, const int n, long **ppOut, int *pn, int *pm)
{
int i; //make an integer variable i
int count = 0; //make an integer variable count initializing it by 0
for( i=0; i<n; ++i ) //cycle for each element of array pIn
{
if( !(pIn[i] & 0x1) )//if current element is even
count++; //then increment counter
}
long *pWork = new long [n+count]; //create new array length of which is length of input array plus even elements count
int j;//creating integer variable j
for( i=0, j=0; i<n; ++i ) //for eah element of new array
{
pWork[j++] = pIn[i];//copy current value from old array to new one
if( !(pIn[i] & 0x1) ) //if current is even
{
pWork[j++] = 0; //fill next cell by 0
}
}
*ppOut = pWork; //fill return variables
*pn = n+count;
*pm = count;
}


Добавлено через 3 минуты и 59 секунд
Цитата(kurtis @ 22.12.2008,  01:51)
разве не следует в конце функции Expand() удалить pWork ?

нет, он удаляется в вызывающей функции, так как в ней еще используется.
Код

delete pOut;

если ты его освободишь в expand(), то что будешь возвращать?
PM ICQ   Вверх
zall
Дата 22.12.2008, 09:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



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

void matrix( int m[5][5]);

int main()
{
int m[5][5] = 
{
{11, 00, 31, 41, 51},
{12, 00, 32, 42, 52},
{ 0, 00, 0, 0, 0},
{14, 00, 34, -44, 54},
{15, 00, 35, 45, 55},
};

matrix( m );

getch();
return 0;

}//end of main

//
// row function set
//
int IsRowZero( int *r, const int n );
void SetRowToZero( int *r, const int n );
void MoveRowUp( int *rUp, int *rBottom, const int n );
int p_number( int *r, const int n );
//
//column function set
//
int IsColumnZero( int *c, const int n, const int m );
void SetColumnToZero( int *c, const int n, const int m );
void MoveColumnLeft( int *cLeft, int *cRight, const int n, const int m );


void matrix( int m[5][5] )
{
int n = 5;
int i, //rows 
j; //columns

int nPositive = -1;

//
//checkup rows
//
for( i = 0; i<n; i++ )
{
if( nPositive < 0 && p_number( &m[i][0], 5 ) ) 
{
nPositive = i+1;
}

int fZero = IsRowZero( &m[i][0], 5);
if( fZero )
{
for( int k=i; k < n-1; k++ )
{
MoveRowUp( &m[k][0], &m[k+1][0], 5 );
}

SetRowToZero( &m[k][0], 5 );
n--;
i--;
}
}

//
//checkup columns
//
n = 5;
for( j = 0; j<n; j++ )
{
int fZero = IsColumnZero( &m[0][j], 5, 5 );

if( fZero )
{
for( int k=j; k < n-1; k++ )
{
MoveColumnLeft( &m[0][k], &m[0][k+1], 5 ,5 );
}

SetColumnToZero( &m[0][k], 5 , 5 );
n--; 
j--;
}
}


//
//print results
//
for( i=0; i<5; i++ )
{
for( j=0; j<5; j++ )
{
printf( "%d\t", m[i][j]);
}
printf("\n");
}

if( nPositive > 0 )
{
printf( "Row %d contains positive element", nPositive );
}

}//end of matrix


//
//row fuction set implementation
//
int IsRowZero( int *r, const int n )
{
for( int i=0; i<n; i++ )
{
if( r[i] != 0 )
{
return 0;
}
}
return 1;
}

void SetRowToZero( int *r, const int n )
{
for( int i=0; i<n; i++ )
{
r[i] = 0;
}
}

void MoveRowUp( int *rUp, int *rBottom, const int n )
{
for( int i=0; i<n; i++ )
{
rUp[i] = rBottom[i];
}
}

int p_number( int *r, const int n )
{
for( int i=0; i<n; i++ )
{
if( r[i] > 0 )
{
return 1;
}
}
return 0;
}



//
//column fuction set implementation
//
int IsColumnZero( int *c, const int n, const int m )
{
for( int i=0; i<n; i++ )
{
if( c[i*m] != 0 )
{
return 0;
}
}
return 1;
}

void SetColumnToZero( int *c, const int n, const int m )
{
for( int i=0; i<n; i++ )
{
c[i*m] = 0;
}
}

void MoveColumnLeft( int *cLeft, int *cRight, const int n, const int m )
{
for( int i=0; i<n; i++ )
{
cLeft[i*m] = cRight[i*m];
}
}

в этой проге что такое p_number и nPositive
PM MAIL   Вверх
NewDima
Дата 22.12.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Цитата(andrew_121 @ 21.12.2008,  23:56)
Мдя... Вот у некоторых человечков, хорошие привычки. Типа сделайте то да это за меня.
Вот, не трудно. Принципиально не помогу.

соглашусь...
ни здрасте, и ни досвиданья, даще спасибо не скажут
PM ICQ   Вверх
Lazin
Дата 22.12.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(zall @ 22.12.2008,  09:54)
#include <conio.h>
#include <iostream.h>
#include <stdio.h>

void matrix( int m[5][5]);

int main()
{
int m[5][5] = 
{
{11, 00, 31, 41, 51},
{12, 00, 32, 42, 52},

....

for( int i=0; i<n; i++ )
{
cLeft[i*m] = cRight[i*m];
}
}

в этой проге что такое p_number и nPositive

что это было?

Это сообщение отредактировал(а) Lazin - 22.12.2008, 12:30
PM MAIL Skype GTalk   Вверх
zall
Дата 22.12.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



поблагодарить не могу, потому что 100 постов ещё нету
PM MAIL   Вверх
mes
Дата 22.12.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zall @  22.12.2008,  16:32 Найти цитируемый пост)
поблагодарить не могу, потому что 100 постов ещё нету 

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


Это сообщение отредактировал(а) mes - 22.12.2008, 17:04


--------------------
PM MAIL WWW   Вверх
NewDima
Дата 22.12.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



конечно, просто спасибо пойдет, здесь же все не за деньги идет, а репутация - второе дело
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.