Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Запись в другой массив

Автор: 18192123 1.06.2007 20:09

Задан целочисленный массив а из 20 элементов. Из этого массива переписать в массив b подряд все положительные элементы и определить наименьший из них.

Почему у меня не выводится массив b (точнее выводится только один элемент в любом случае)?


#include <STDIO.H>
#include <CONIO.H>
#define NUM 20
void main()
{
clrscr();
int a[NUM], b[NUM];
int i,j;
printf ("\nVvedite 20 chelih 4isel :\n" );
for (i = 0; i < NUM; i++)
{
printf ("%d element massiva --> ", i);
scanf ("%d", &a[i]);
}



for( i = 0,j=0; i < NUM, j<NUM ; i++,j++)
{
if ( a[i] > 0 )
b[j] = a[i];
}
int min = b[0];
for (j = 0; j < NUM; j++)
{
if( b[j] < min)
min = b[j];
}

printf("Min element massiva b = %d", min);
printf ("\nmassiv a \n");
for(i = 0; i < NUM; ++i)
printf("%3d", a[i]);
printf ("\n masssiv b");
for (j=0; j < NUM; ++j);
printf ("%3d",b[j]);

}


Автор: volvo 1.06.2007 20:28

Есть подозрение, что вот это у тебя выполняет не совсем то, что ты задумала:

for( i = 0,j=0; i < NUM, j<NUM ; i++,j++) // <--- 
...
Как ты думаешь, чему равен результат выражения i < NUM, j < NUM ?

А насчет одного элемента -
for (j=0; j < NUM; ++j); // <--- Здесь точка с запятой не нужна совсем

Автор: 18192123 1.06.2007 21:14

Цитата(volvo @ 1.06.2007 17:28) *

Есть подозрение, что вот это у тебя выполняет не совсем то, что ты задумала:
for( i = 0,j=0; i < NUM, j<NUM ; i++,j++) // <--- 
...



Как я понимаю, тут должно быть && вместо , .
А ещё такой вопрос: у меня размерности первого и второго массивов совпадают при описании массивов , но во втором массиве не всегда будет 20 элементов...наверно поэтому он дополняется совершенно посторонними числами...а как этого избежать?

Автор: volvo 1.06.2007 21:28

for(i = 0, j=0; i < NUM; i++) {
if( a[i] > 0 ) b[j++] = a[i];
}

int min = b[0]; // <-- Кстати, в чистом С этого делать ЗДЕСЬ нельзя, будет ошибка при компиляции
for (k = 1; k < j; k++) {
if( b[k] < min) min = b[k];
}
(набирал прямо здесь, только чтобы показать идею)