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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 18:16   #21
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Задание (2): Заменить все четные элементы массива А (19) на их квадраты, нечетные удвоить. Проверить, изменилась ли сумма элементов массива.

Решение:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
const int n =20 ;
int main()
{
setlocale(LC_ALL, "rus");
int mas[n], *A, a=0, b=0, c=0, d=0,  t=2, g=0, z=0, i;
A=mas;
printf("Заданые элементы массива: ");	
for(i=1;i<n;i++) // задаю массив, вывожу элементы на экран
    {
	A[i] = i;
	printf("%d ", mas[i]);
	a = a + A[i]; // сумма элементов массива
    }
    printf("\n");
    printf("Сумма элементов массива: %d", a);
    for(i=1;i<n;i++)
    {
    	if(A[i]%t==0)
    	{
    		A[i]=A[i]*A[i];
    		b= b + A[i];
    		printf("\n%d", A[i]);
    	}
    	else
    	{
    		A[i]=A[i]*2;
		c= c + mas[i];
		printf("\n%d", A[i]);
    	}
    }
d=b+c;
printf("\nСумма элементов полученного массива = %d", d);
if(a==d)
printf("\nСумма элементов не изменилась");
else
if(d>a)
{
g=d-a;
printf("\nСумма элементов массива стала больше на %d", g);
}
else
{
z=a-d;
printf("\nСумма элементов уменьшилась на %d", z);
}
getchar();
}
From Stilet: Код выделяй по кнопке #

Как правильно записать printf в условном операторе if?И почему сейчас она записана неправильно?И еще вопрос, как еще можно упростить код( сделать компактней)?

Последний раз редактировалось Stilet; 11.12.2013 в 18:34.
East Undia Trading вне форума Ответить с цитированием
Старый 11.12.2013, 21:36   #22
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
const int n = 20;
 
int
main()
{
    setlocale(LC_ALL, "rus");
    int mas[n], *A, i, sum = 0;
    A = mas;
    printf("Заданные элементы массива: ");	
    for(i = 0; i < n; ++i) {
        printf("%d ", *A = i + 1);
        sum += *(A++);
    }
    printf("\nПолученные элементы массива: ");
    A = mas;
    for(i = 0; i < n; ++i) {
        sum -= *A *= (*A % 2) ? 2 : *A;
        printf("%d " , *(A++));
    }
    if (sum == 0)
        printf("\nСумма элементов не изменилась");
    else
        printf("\nСумма элементов массива %s на %d", (sum < 0) ? "стала больше" : "уменьшилась", abs(sum));
    getchar();
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.12.2013 в 21:40.
BDA вне форума Ответить с цитированием
Старый 11.12.2013, 22:40   #23
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, если бы вы учились в моем институте, то на защите я не советовал функцию printf так писать.
Я лучше оставлю все как у меня есть, но вопрос с printf я так и не решил, как мне правильно записать чтобы она не противоречила политике условия if?
East Undia Trading вне форума Ответить с цитированием
Старый 11.12.2013, 23:00   #24
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Ну значит мне повезло с институтом
Что еще за политика if? Я не понимаю. Если код выдает правильный результат, то код можно считать правильным (с некоторыми оговорками).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.12.2013, 23:16   #25
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, хах, все понял
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
const int n =20 ;
int main()
{
setlocale(LC_ALL, "rus");
int mas[n], *A, a=0, b=0, c=0, d=0,  t=2, i;
A=mas;
printf("Элементы массива: ");	
for(i=1;i<n;i++)
    {
	A[i] = i;
	printf("%d ", mas[i]);
	a = a + A[i];
    }
    printf("\nПолученные элементы масссива: ");
    for(i=1;i<n;i++)
    {
    	if(A[i]%t==0)
    	{
    		A[i]=A[i]*A[i];
    		b= b + A[i];
    	}
    	else
    	{
    		A[i]=A[i]*2;
		    c= c + mas[i];
    	}
    	printf("%d ", A[i]); //<<<<<<<<<<<<<<<<
    }
d=b+c;
if(a==d)
printf("\nСумма элементов не изменилась");
else
printf("\nСумма элементов массива %s", (b>a)?"увеличилась":"уменьшилась");
return;
getchar();
}
У if своя политика

Последний раз редактировалось East Undia Trading; 11.12.2013 в 23:21.
East Undia Trading вне форума Ответить с цитированием
Старый 11.12.2013, 23:36   #26
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Вся политика заключается в вынесении одинаковых операторов из обеих веток?
Кстати, не b>a, а d>a в одной из последних строк.
Честно говоря, такое смешение использования A и mas вызывает у меня отторжение. Обращаться к одному и тому же разными именами хорошо в сочинении по русскому (чтобы повторов не было), но не в программе (затрудняет восприятие, так как нужно задумываться о синонимах).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.12.2013, 23:47   #27
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, ну конечно.Мне же нужно вывести на экран массив, а не заполнить его в цикле.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
const int n =20 ;
int main()
{
setlocale(LC_ALL, "rus");
int mas[n], *A, a=0, b=0, c=0, d=0,  t=2, i;
A=mas;
printf("Элементы массива: ");	
for(i=1;i<n;i++)
    {
	A[i] = i;
	printf("%d ", A[i]);
	a = a + A[i];
    }
    printf("\nПолученные элементы масссива: ");
    for(i=1;i<n;i++)
    {
    	if(A[i]%t==0)
    	{
    		A[i]=A[i]*A[i];
    		b= b + A[i];
    	}
    	else
    	{
    		A[i]=A[i]*2;
		    c= c + A[i];
    	}
    	printf("%d ", A[i]);
    }
d=b+c;
if(a==d)
printf("\nСумма элементов не изменилась");
else
printf("\nСумма элементов массива %s", (d>a)?"увеличилась":"уменьшилась");
return;
getchar();
}

Последний раз редактировалось East Undia Trading; 11.12.2013 в 23:51.
East Undia Trading вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить элементы массива. Маx Паскаль, Turbo Pascal, PascalABC.NET 7 24.09.2012 04:47
По массивам, SOS! из целочисленного массива удалить из массива элементы, встречающиеся менее 3-х раз prelest' Паскаль, Turbo Pascal, PascalABC.NET 1 23.05.2011 22:37
удалить из массива уникальные элементы хочу узнать Помощь студентам 2 26.09.2010 19:22
Как удалить нулевые элементы из массива? Diman_kemNVK Помощь студентам 2 13.04.2010 15:54
Удалить элементы массива Маськ@ Паскаль, Turbo Pascal, PascalABC.NET 1 21.12.2008 17:46