Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 16:23   #1
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию вставка элемента

Здравствуйте!
Подскажите пожалуйста как вставить сумму в начале масива.В новом массиве должно выводить замену последнего негативного на суму и вставлять сумму в начале массива.Пробовала,но чтот не выходит.Подскажите пожалуйста=)
Код:
# include <stdio.h>
#include <math.h>

int main () {
	const int n=11;
    int k,i,indneg;
    float M[n],y, sum,M_nov[n+1],ost_neg,max;
    for(k=1;k<11;k++)
    {

          M[k]=(fabs(cos(k*k-3.8)))/(4.5-9.7*sin(k-3.0));
        printf ("%6.2f\n",M[k]);
    }

    for (i=11 - 1;i >= 0 ;i--)
    {
        if (M[i] < 0) {
           
            printf ("ostanne negatuvne=%6.2f\n",M[i]);
			ost_neg=M[i];
			indneg=i;
            break;
        }
    }


int imax=1;
for(k=1; k<n; k++)
{
	if (M[k]>M[imax])
		imax=k;
	max=M[imax];
}
printf("maxsumalne znachenna= %6.2f\n", max); 

sum=ost_neg+max;
printf("suma= %6.2f\n", sum);

for (k=1; k<n ;k++)
{
	M[indneg+1]=max;
	M_nov[0]=sum;
	M_nov[1]=M[k];

printf ("%6.2f\n",M[k]);
}

M_nov[1]=M[k];
    return 0;

}

Последний раз редактировалось Stilet; 28.05.2011 в 17:34.
ordinary_smile вне форума Ответить с цитированием
Старый 26.05.2011, 18:19   #2
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

Я что-то не догоняю, ты создала массив M_nov, вставила в его начало sum, а потом вывела старый массив M, зачем?
Mahin вне форума Ответить с цитированием
Старый 26.05.2011, 18:26   #3
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Mahin Посмотреть сообщение
Я что-то не догоняю, ты создала массив M_nov, вставила в его начало sum, а потом вывела старый массив M, зачем?
честно говоря именно в том моменте я и запуталась.
Мне подали идею сделать так:
PHP код:
for (k=11k>=1k--)
{
M[k]=M[k-1];
M[0]=sum;
}
printf ("\n");
for (
k=1k<n+1k++)
{
printf (" %d %6.2f\n"kM[k]);

только тут тоже выводит старый массив....
ordinary_smile вне форума Ответить с цитированием
Старый 26.05.2011, 18:38   #4
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

тут перед выводом каждый элемент массива с конца сдвигается на одно место вперёд, а на первое освободившееся место вставляется сумма. и вывод реализован отдельным циклом, что правильно. я вот попробовал этот вариант
Код:
	M[indneg+1]=max;
	for (k=11; k>0 ;k--) M[k]=M[k-1];
	M[0]=sum; 
	for (k=0; k<11; k++) printf ("%6.2f\n",M[k]);
в принципе он работает, тока на второе место какую-то лабуду выводит, поработай в этом направлении
Mahin вне форума Ответить с цитированием
Старый 26.05.2011, 21:50   #5
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Во-первых - у тебя же есть константа n. Лучше везде использовать ее, а не число 11.

Во-вторых, второй цикл должен начинаться for (i=11 - 1;i > 0 ;i--) - нулевой Элемент у тебя ведь пустой, его не стОит учитывать )

В-третьих, если вдруг в массиве совсем не будет отрицательных элементов, случится беда ) Потому переменные indneg и ost_neg стоит в начале инициализировать нулями, на всякий случай.

В-четвертых, вот здесь
Код:
    if (M[k]>M[imax])
        imax=k;
    max=M[imax];
второе присваивание будет выполняться при каждом повторе цикла. Это не то, чего хотелось ), потому должно быть так
Код:
    if (M[k]>M[imax])
{
        imax=k;
    max=M[imax];
}
Ну и в-пятых, вместо всей вот этой эклектики
Код:
for (k=1; k<n ;k++)
{
    M[indneg+1]=max;
    M_nov[0]=sum;
    M_nov[1]=M[k];

printf ("%6.2f\n",M[k]);
}

M_nov[1]=M[k];
Можно просто написать
Код:
M[indneg]=sum;
M[0]=sum;
printf("\nNew array: ");
for (k=0; k<n ;k++)
{
   printf ("%6.2f\n",M[k]);
}
Как-то так. Компилятора нет чтобы проверить )
Son Of Pain вне форума Ответить с цитированием
Старый 28.05.2011, 14:52   #6
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

Son Of Pain , по поводу константы учту)
там как Вы написали вставку суммы оно немного стало не правильно считать т.к мне еще нужно было последнее негативное заменить максимальным!Поэтому все-таки мой способ правильный с точки зрения необходимых условий.
А вот насчет того случая если в массиве будут только положительные числа,это конечно замечания в тему.ПРобовала делать этот кусочек с функцией по модуля.считает правильно вот код
PHP код:
for (i=11 1;>= ;i--)
{
if (
M[i] < 0)
{
printf ("ostanne negatuvne=%6.2f\n",M[i]);
ost_neg=M[i];
}
else
{
M[i]=0;
ost_neg=M[i];
break;
}

но когда вставляю в свою общую програму вообще выбивает какуюто ошибку при запуске(ошибка в новом окне).Ну вообщем я так поняла что что то там явно не правильно,но не могу понять что...
ordinary_smile вне форума Ответить с цитированием
Старый 29.05.2011, 15:28   #7
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

помогите пожалуйста((
ordinary_smile вне форума Ответить с цитированием
Старый 30.05.2011, 16:33   #8
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
M[i]=0;
ost_neg=M[i];
А это зачем? )
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка элемента в список Kovax Паскаль, Turbo Pascal, PascalABC.NET 2 09.03.2011 20:28
Вставка элемента Dmitry73 Помощь студентам 0 06.12.2010 19:04
вставка элемента Dmitry73 Помощь студентам 2 05.12.2010 11:06
вставка элемента zhenya.ya Помощь студентам 0 28.04.2010 18:53
Вставка элемента в SelectDirectory mrandrey Общие вопросы Delphi 1 31.05.2007 20:25