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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2009, 11:17   #1
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию С Поясните программу.

Написать программу,считывающую целочисленный массив из N элементов и определяющий в нем количество элементов,абсолютная величина которых отличается от наименьшего положительного элемента более чем на P процентов.

Программу нужно написать на C,у меня есть вот такое решение,но в C нет bool flag;
Вопрос: как переделать эту программу без "bool"

Код:
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>

void main()
{
    int N;    // Количество чисел.
    scanf("%d", &N); // Считывание количества чисел.
    int *a = new int[N]; // Объявление массива на N чисел.
    int minpos = 0; // Минимальное положительное число.
    bool first = true; // "Флажок", необходимый для того, чтобы правильно
                       // определить первое введенное положительное
                       // число. Это нужно, в свою очередь, для того,
                       // чтобы правильно определить минимальное.
    for (int i = 0; i < N; i++) { // Заполняем массив.
        scanf("%d", &a[i]);         // Считывание элемента массива.
        if (a[i] > 0)             // Если элемент положительный
            if (first) {          // и при этом он первый,
                minpos = a[i];    // то объявляем его минимальным 
                                  // положительным (это только пока)
                first = false;    // и сбрасываем флажок.
            }
            else // Иначе (элемент положительный, но не первый)
                if (a[i] < minpos) minpos = a[i]; 
                // Если он меньше минимального, он становится минимальным.
    }
    if (minpos == 0) { // Если не было введено ни одного
                       // положительного числа (в условии не было оговорено,
                       // будет ли во вводимой последовательности 
                       // гарантированно хотя бы одно положительное число.
                       // Если будет, этот код можно убрать.),
        printf("No positive numbers in array.\n");
        // извещаем об этом пользователя
        _getch(); 
        return; // и завершаем выполнение программы.
    }
    int P; // Величина отклонения (в процентах).
    scanf("%d", &P); // Вводим величину отклонения.
    int count = 0; // Количество чисел, удовлетворяющих условие.
    for (int i = 0; i < N; i++) { // Проход по массиву.
        int c = abs(a[i]); // Нас интересует абсолютная величина (модуль)
                           // элемента массива.
        int dp = abs(c - minpos) * 100 / minpos; // Вычисляем отклонение
                           // (обычная пропорция:
                           //    minpos    - 100%;
                           // |c - minpos| -  x;
                           //
                           //      |c - minpos| * 100%
                           //  x = -------------------.)
                           //            minpos   
        if (dp > P) count ++; // Если отклонение в пределах нормы,
                              // увеличиваем количество удовлетворяющих
                              // условие чисел на 1.
    }
    printf("%d\n", count); // Вывод результата.
    getch(); // Ожидание реакции пользователя.
}

Последний раз редактировалось Stilet; 02.10.2009 в 11:33.
vep вне форума Ответить с цитированием
Старый 02.10.2009, 11:31   #2
KHEXT
 
Регистрация: 30.09.2009
Сообщений: 6
По умолчанию

Не может такого быть, всё в C есть.

Какую именно ошибку выдаёт компилятор?
KHEXT вне форума Ответить с цитированием
Старый 02.10.2009, 11:35   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
bool flag
Что еще за флаг? Где он фигурирует?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2009, 11:36   #4
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию

Вы уж извините,я совсем новичек В кампиляторе Microsoft Visual C++ 2008 Express Edition все работает.Просто я почему то подумал,что программа у меня получилась с элементами C++.По вашему как? Тут все верно программа написана на C?Еще раз прошу прощения за неграмотность
vep вне форума Ответить с цитированием
Старый 02.10.2009, 11:37   #5
KHEXT
 
Регистрация: 30.09.2009
Сообщений: 6
По умолчанию

И да, не забываем освобождать выделенную память!

Цитата:
Сообщение от vep Посмотреть сообщение
Вы уж извините,я совсем новичек В кампиляторе Microsoft Visual C++ 2008 Express Edition все работает.Просто я почему то подумал,что программа у меня получилась с элементами C++.По вашему как? Тут все верно программа написана на C?Еще раз прошу прощения за неграмотность
Вполне, единственное new это больше к C++ относится, но не уверен на 100%. Используй:
Код:
int *a = (int*)malloc(N * sizeof(int));
free(a);

Последний раз редактировалось Stilet; 02.10.2009 в 11:42.
KHEXT вне форума Ответить с цитированием
Старый 02.10.2009, 11:42   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Тут все верно программа написана на C?
Если программа работает без сбоев с хорошим результатам, считай что все Ок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2009, 11:51   #7
vep
Пользователь
 
Регистрация: 02.10.2009
Сообщений: 14
По умолчанию

Всем огромное спасибо!
vep вне форума Ответить с цитированием
Старый 02.10.2009, 19:17   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Вместо bool всегда можно использовать int, что С-шные стандартные функции успешно и практикуют
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поясните что с циклом for? Mikhail Bakurov Общие вопросы Delphi 9 19.06.2009 01:58
Поясните задачу HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 1 05.06.2009 23:33
Поясните задачку(Delphi) Ddr Помощь студентам 1 16.04.2009 21:45
Поясните ООП sodd Общие вопросы Delphi 1 23.02.2009 14:14