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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2015, 22:29   #1
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию Ошибка в коде на Си

Доброго времени суток!
Программа запускается, но работает некорректно.
Задание:
Дан массив из 18 вещественных чисел, все элементы которого различны.
1) Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 3.
2) Найти квадраты всех чисел, расположенных между минимальным и максимальным значениями.
3) Упорядочить по возрастанию элементы, находящиеся на местах, не кратных числу 3.

Что здесь не так?=\

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#define N 18 //(константа)количество элементов в массиве

int main()
{
    float mas[N]; //массив
    float proizv = 1; //произведение
    float min, max; //макс. и мин. значения
    float kvadrat; //возведение в квадрат
    float temp; //временная переменная
    int imin, imax; //индексы макс. и мин. значений
    int i, j, p, k; //дополнительные индексы
    char otv; //ответ

    setlocale(LC_ALL,"");

    //  ПРИВЕТСТВИЕ
    printf(" Здравствуйте! Вас приветствует программа, \n которая обрабатывает элементы массива.\n");

    do {
        //обновляем массив
        for(i = 0; i < N; i++){
            mas[i] = 0;
        }
        // ВВОД МАССИВА
        printf(" Введите значения 18-ти элементов массива:\n");

        for(i = 0; i < N; i++){
            printf(" %d-й элемент: ", i);
            scanf(" %f", &mas[i]);
        }

        // НАХОДИМ ПРОИЗВЕДЕНИЕ
        for(i = 0; i < N; i++){
            if(mas[i] != 0){
                if(i % 3 == 0){
                    proizv *= mas[i];
                }
            }
        }
        printf("\n 1) Произведение (ненулевых) элементов массива, \n находящихся на  позициях, кратных числу 3 равна %.f!", proizv);

        // МАКС. И МИН. ЗНАЧЕНИЯ, КВАДРАТЫ ЭЛЕМЕНТОВ МЕЖДУ НИМИ
        min = mas[0];
        max = min;
        for (i = 0; i < N; ++i) {
          if (mas[i] > max){
                max = mas[i];
                imax = i;
          }
          if (mas[i] < min){
                min = mas[i];
                imin = i;
          }
        }

        printf("\n 2) Минимальное значение: %.2f", min);
        printf("\n Максимальное значение: %.2f", max);
        printf("\n Квадраты всех чисел, расположенных между минимальным и \n максимальным значениями равны:");

        if(imax < imin){
                for(p = imax; p <= imin; p++){
                        kvadrat = pow(mas[p], 2);
                        printf(" Квадрат: %.f", kvadrat);
                }
        }
        else {
                for(k = imin; k <= imax; k++){
                    kvadrat = pow(mas[k], 2);
                    printf("\n Квадрат: %.f", kvadrat);
                }
        }
        // ПО ВОЗРАСТАНИЮ
        for (i = 0; i < N - 1; i++){
            for (j = 0; j < N - 1; j++){
                    if (j % 3 != 0){
                            if (mas[j] > mas[j + 1]){
                                temp = mas[j];
                                mas[j] = mas[j + 1];
                                mas[j + 1] = temp;
                            }
                    }
                }
            }
        printf("\n 3) Упорядоченные по возрастанию элементы, находящиеся на местах, \n не кратных числу 3: \n ");
        for (i = 0; i < N; i++){
                printf("%.f ", mas[i]);
            }
        // повторить?
        printf("\n Хотите повторить все сначала?(y/n)");
        scanf(" %c", &otv);
        printf("\n");

    } while(otv == 'y');

    return 0;
}
P.S.: pastebin -
http://pastebin.com/mtKeRZmw
Среда - CodeBlocks

Последний раз редактировалось Алинка_Ы; 09.11.2015 в 22:34.
Алинка_Ы вне форума Ответить с цитированием
Старый 09.11.2015, 22:38   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

1) Не забывайте инициализировать proizv перед расчетом произведения.
2) Измените сортировку на другую, так как при некоторых значениях «j» «j+1» будет кратно 3.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.11.2015, 23:07   #3
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию

BDA, Все равно что-то не так:с

Цитата:
Сообщение от BDA Посмотреть сообщение
1) Не забывайте инициализировать proizv перед расчетом произведения.
2) Измените сортировку на другую, так как при некоторых значениях «j» «j+1» будет кратно 3.
Все равно, не хотит:с Что-то не то, пишет триллион раз слово "Квадрат".

Последний раз редактировалось BDA; 10.11.2015 в 00:11.
Алинка_Ы вне форума Ответить с цитированием
Старый 10.11.2015, 00:10   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Добавьте инициализацию imin, imax.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.11.2015, 00:57   #5
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Добавьте инициализацию imin, imax.
Спасибо. Ситуация получше. Программа неверно возводит в квадрат вещественные числа. Как это можно исправить?
Алинка_Ы вне форума Ответить с цитированием
Старый 10.11.2015, 01:21   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
printf("\n Квадрат: %.2f", kvadrat);
Так лучше?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.11.2015, 11:42   #7
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
printf("\n Квадрат: %.2f", kvadrat);
Так лучше?
Спасибо!
С Вами можно как-то связаться и побеседовать в неофициальной обстановке?
Алинка_Ы вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка в коде Анастас Общие вопросы Delphi 8 25.10.2011 21:59
Ошибка в коде... Cas01 Общие вопросы C/C++ 7 02.10.2011 01:22
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
ошибка в коде Си Misha_M. Помощь студентам 2 05.02.2010 15:41