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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2013, 23:20   #1
Максим28
 
Регистрация: 22.11.2013
Сообщений: 9
По умолчанию Исправить программу на Си

Программа запускается но выводит не то, что нужно.
Задание:
Дан массив из 18 вещественных чисел, все элементы которого различны.
1) Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 3.
2) Найти квадраты всех чисел, расположенных между минимальным и максимальным значениями.
3) Упорядочить по возрастанию элементы, находящиеся на местах, не кратных числу 3.
Код:
#include <stdio.h>
#define SIZE 18
 
void search(int [], int);
void MaxMin(int [], int);
void increase(int [], int);
 
int main()
{
int arr[SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
 
search(arr, SIZE);
MaxMin(arr, SIZE);
increase(arr, SIZE);
 
return 0;
}
 
void search(int a[], int size) //произведение на позициях кратных трем
{
int f1 = 1;
int i;
for (i = 0; i < size; i++)
{
if (i % 3 == 0)
{
f1 *= a[i];
}
}
 for(i = 0; i < size; i++)
    printf("% d", a[i]);
}
 
void MaxMin(int a[], int size) //нахождение квадратов
{
int max = a[0], min = a[0];
int A[size]; //в этом массиве будут храниться все квадраты нужных нам чисел
int i;
 
for (i = 0; i < size; i++)
{
if (max < a[i])
{
max = i;
}
if (min > a[i])
{
min = i;
}
}
 
int begin = min < max ? min : max;
int end = min > max ? min : max;
 
for (i = 0; begin <= end; begin++)
{
A[i] = a[begin] * a[begin];
i++;
}
for(i = 0; i < size; i++)
    printf("% d", A[i]);
}
void increase(int a[], int size) //сортировка по возрастанию всех элементов не кратных трем
{
int hold;
int i, j;
 
for (i = 0; i < size; i++)
 
for (j = 0; j < size; j++)
if (i % 3 != 0 && a[i] > a[i + 1])
{
hold = a[i];
a[i] = a[i + 1];
a[i + 1] = hold;
}
for( i = 0; i < size; i++)
printf("% d", a[i]);
}
Изображения
Тип файла: jpg Безымянный.jpg (18.7 Кб, 139 просмотров)
Максим28 вне форума Ответить с цитированием
Старый 26.11.2013, 23:30   #2
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

а через отладчик смотреть не пробовали?
Unique_Maks вне форума Ответить с цитированием
Старый 26.11.2013, 23:46   #3
pitlis
 
Регистрация: 15.09.2013
Сообщений: 7
По умолчанию

Проблема с последней функцией?
Попробуйте так:
Код:
for (i = 0; i < size; i++)
 
for (j = 0; j < size; j++)
if (j % 3 != 0 && (j+1) % 3 != 0  && a[j] > a[j + 1])
{
hold = a[j];
a[j] = a[j + 1];
a[j + 1] = hold;
}
if (j % 3 != 0 && (j+1) % 3 == 0 && a[j] > a[j + 2])
{
hold = a[j];
a[j] = a[j + 2];
a[j + 2] = hold;
}
pitlis вне форума Ответить с цитированием
Старый 26.11.2013, 23:53   #4
Максим28
 
Регистрация: 22.11.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от pitlis Посмотреть сообщение
Проблема с последней функцией?
Тоже самое, скорее всего проблемы во всех функциях .
Максим28 вне форума Ответить с цитированием
Старый 26.11.2013, 23:56   #5
Максим28
 
Регистрация: 22.11.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Unique_Maks Посмотреть сообщение
а через отладчик смотреть не пробовали?
Если вы про лог с ошибками, то их там нет.
Максим28 вне форума Ответить с цитированием
Старый 27.11.2013, 00:00   #6
pitlis
 
Регистрация: 15.09.2013
Сообщений: 7
По умолчанию

Первые две функции вроде правильные. Неправильная сортировка была в третьей. Вы учитываете, что в заданном изначально массиве (0-17) - все элементы и так стоят по возрастанию - упорядочивать там нечего.
PS Зачем нужен вывод массива целиком в первой функции - отдельный вопрос. Нужно также добавить проверку, не является ли число нулем.

Последний раз редактировалось pitlis; 27.11.2013 в 00:02.
pitlis вне форума Ответить с цитированием
Старый 27.11.2013, 00:01   #7
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

Цитата:
Сообщение от Максим28 Посмотреть сообщение
Если вы про лог с ошибками, то их там нет.
я про трассировку
Unique_Maks вне форума Ответить с цитированием
Старый 27.11.2013, 00:16   #8
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

Код:
void search(int a[], int size) // 
{
  int f1 = 1;
  int i;
  for (i = 0; i < size; i++)
  {
    if (i % 3 == 0)
    {
      f1 *= a[i];
    }
  }
  for(i = 0; i < size; i++)
    printf("% d", a[i]);
}
0 % 3 = 0 -> f1 = 0, в итоге произведение = 0
если int arr[SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};

Возможно, как-то так было бы лучше
Код:
int search(int a[], int s)
{
	int res = 1;
	for (int i = 1; i <= s; i++)
		if (i % 3 == 0)
			res *= a[i-1];
	return res;
}
или нулевая позиция должна считаться...

Последний раз редактировалось Unique_Maks; 27.11.2013 в 09:05.
Unique_Maks вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить программу linass Фриланс 8 14.05.2013 15:22
исправить программу Александрq Помощь студентам 0 05.11.2012 00:25
исправить программу в С++ paul0 Помощь студентам 0 26.05.2011 12:20
Исправить программу. Си. Erkon Помощь студентам 3 01.11.2010 16:47
Исправить программу amfisat Общие вопросы C/C++ 3 02.06.2010 08:22