как напечатать несколько максимальных значений, используя цикл - PullRequest
1 голос
/ 22 мая 2019

Пытаясь вычислить, на каких частотах напряжение достигает максимума, я могу напечатать самый последний максимум, но могут быть и более низкие значения частоты, на которых он способен к максимальному напряжению.

Я могу получить самую высокую или самую низкую частоту, переключая цикл с + на - с или на 1000000 с шагом 10.

Попробовал вложенный оператор if внутри VO > voMax

#include <stdio.h>
#include <conio.h>
#include <math.h>
#define PI 3.14f
#define Vi 5

#define L 4.3e-4
#define C 5.1e-6

int getFreq();
long getResist();
float getVO(float XL, float XC, int R);
float getXC(int f);
float getXL(int f);

int main()
{
    long resist, freq, fMax;
    float XL, XC, VO, voMax;

    voMax = 0;
    fMax = 0;
    resist = getResist();
    for (freq = 1000000; freq >= 0; freq -= 10)
    {
        XL = getXL(freq);

        XC = getXC(freq);

        VO = getVO(XL, XC, resist);
        if (1000000 == freq)
        {
            fMax = freq;
            voMax = VO;

        }
        else if (VO > voMax)
        {
            fMax = freq;
            voMax = VO;

        }       
    }
    printf("VO = %f Frequency = %d\n", voMax, fMax);
    getch();
    return 0;
}

float getXL(long f)
{
    float XL;

    XL = 2 * PI * f * C;
    return XL;
}

float getXC(long f)
{
    float XC;

    XC = 1 / (2 * PI * f * C);
    return XC;

}

float getVO(float XL, float XC, long R)
{
    float VO;

    VO = (Vi * R) / sqrt((XL - XC) * (XL - XC) + R * R);
    return VO;
}

int getFreq()
{
    int freq;
    freq = 0;
    printf("please enter a frequency:");
    scanf("%d", &freq);
    return freq;
}
long getResist()
{
    int resist;
    resist = 0;
    printf("please enter a resistance:");
    scanf("%d", &resist);
    return resist;
}

Я хочу, чтобы напряжение печаталось с максимальной частотой.

1 Ответ

2 голосов
/ 22 мая 2019

Хорошо, вам нужно сгенерировать «много» данных, а затем провести некоторый анализ. Я бы на самом деле реализовал это в два этапа:

  1. Генерация данных (и сохранение их в массиве или в файле)
  2. Выполните любой необходимый анализ этих данных.

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


Я хочу, чтобы напряжение печаталось с максимальной частотой.

Я думаю, вам нужно небольшое обновление кода. У вас есть следующая последовательность:

voMax = 0;
fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{

вы, вероятно, должны иметь:

fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{
    voMax = 0;

(я переместил «voMax = 0;» внутрь «для»).

Таким образом, вы можете рассчитать максимальное напряжение для всех частот, без помех от других частот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...