Funkcja liniowa, kwadratowa i operacje matematyczne

0

Witam,
ogólnie mam pewien problem, ponieważ jestem na kolokwium i w miarę ogarniam języki programowania, ale na Javie jestem pierwszy raz i niezbyt znam zasady funkcjonowania tego języka.

Mam 2 zadania:
**1. **

Proszę napisać program w Javie, który:

  • będzie przyjmował podczas uruchomienia parametry z linii poleceń
  • pierwszy parametr będzie oznaczał rodzaj funkcji: 0 - funkcja liniowa, 1 - funkcja kwadratowa
  • kolejne parametry to:
    -- A i B dla funkcji liniowej (postaci y=Ax+B)
    -- A, B i C - dla funkcji kwadratowej (postaci y=Ax^2+Bx+C)
    Program ma obliczyć miejsce/miejsca zerowe funkcji (w zależności od parametrów) lub wypisać że nie
    ma. W przypadku kiedy nie można sparsować argumentów (załóżmy że typ całkowity) - należy przyjąć 0
    jako wartość domyślną.
    W przypadku kiedy argumentów jest mniej niż wynikałoby z postaci funkcji - należy przyjąć 0 jako
    wartość domyślną dla brakujących parametrów
    Uwagi:
  • główna klasa powinna mieć nazwę postać <InicjałyStudenta>Obliczenia (np. dla mnie to byłoby
    TWObliczenia)
  • zmienne deklarowane w programie powinny mieć nazwy postaci <inicjalystudenta>Zmienna np. dla
    mnie byłoby to twParametrA, twParametrB, itd.

2.

Proszę napisać program w Javie, który:

  • będzie przyjmował podczas uruchomienia argumenty z linii poleceń
  • pierwszy parametr będzie oznaczał rodzaj operacji: 0 – znajdź minimum, 1 – znajdź maksimum, 2 –
    średnia, 3 – zsumuj, 4 – zliczanie ile liczb ujemnych i dodatnich (załóżmy że wraz z zerem), 5 – zliczanie
    ilości liczb parzystych, 6 – zliczanie ilości liczb nieparzystych, 7 – sprawdzanie czy ciąg rosnący, 8 - zlicz
    ilość poszczególnych liczb (załóżmy na wejściu liczby od 0 do 10), 9 -znajdź najdłuższy i najkrótszy wyraz
    z podanej listy wyrazów. Jeśli jest więcej wyrazów (najkrótszych lub najdłuższych) – to proszę o
    wypisanie wszystkich na ekran.
  • kolejne parametry to ciąg liczb wejściowych (dowolnej, rozsądnej długości) postaci: A B C D E …..
  • lub ciąg wyrazów (dla operacji 9)
    Program ma zrealizować operację zadaną przez pierwszy parametr (znaleźć minimum, maksimum,
    wyliczyć średnią, itd.) na ciągu liczb (kolejnych parametrów). Jeśli nie można sparsować parametru –
    wartość domyślna to 0.
    Jeśli ilość argumentów nie większa niż 1 -> program wypisuje “Brak liczb”.
    Przykładowo:
    Program 0 4 5 9 -10 11 20 25 -> powinien wypisać na wyjściu -10 (minimum)
    Program 1 4 5 9 -10 11 20 25 -> powinien wypisać na wyjściu 25 (maksimum)
    Program 8 1 2 3 1 5 1 -> powinien wypisac na wyjsciu: [0:0], [1: 3], [2:1], [3:1], [4:0], [5:1],….
    Program 9 Ala Tomek Iza Arkadiusz -> powinien wypisać na wyjściu:
    Najkrotszy/e: Ala, Iza
    Najdluzszy/e: Arkadiusz

Póki co do zadania pierwszego napisałem tyle, ale wiem, że namieszałem tam totalnie. Byłby ktoś tak miły i pomógł mi z tym? Po prostu zaskoczyło mnie to kolokwium, a chciałbym dobrze zacząć przedmiot :)

public class KMobliczenia {

	public static void main(String[]) argv ) {
	System.out.printIn( "Argumenty przekazane przez linie polecen: " );
	
	
	if (args[0])   //liniowa
	{
	//pobieranie_parametrów
	int KMa,KMb,KMc;
	System.out.print("Wprowadź wartość dla A: ");
	KMa=Integer.parseInt(reader.readLine());
    System.out.print("Wprowadź wartość dla B: ");
    KMb=Integer.parseInt(reader.readLine());
    
    System.outprintIn("x = " + (-KMb/KMa) );
	}
	
	
	if (args[1])  //kwadratowa 
	{   
  //pobieranie_parametrów
  	int KMa,KMb,KMc;
  	System.out.print("Wprowadź wartość dla A: ");
  	KMa=Integer.parseInt(reader.readLine());
      System.out.print("Wprowadź wartość dla B: ");
      KMb=Integer.parseInt(reader.readLine());
      System.out.print("Wprowadź wartość dla C: ");
      KMc=Integer.parseInt(reader.readLine());
	double KMdelta = KMb*KMb - 4*KMa*KMc;
	if (KMa == 0) {
		System .out.printIn( "To nie jest rownanie kwadratowe");
	}
	
	else if (KMdelta > 0) {
		System.out.printIn("x1 = " + (-b-Match.sqrt(KMdelta))/(2*KMa) );
		System.out.printIn("x2 = " + (-b+Match.sqrt(KMdelta))/(2*KMa) );
	}
	
		if (KMdelta==0) {
			System.out.printIn("Rownanie ma 1 pierwiastek, x1 = " + (-KMb/(2*KMa)) );
		}
		
		if (KMdelta < 0) {
			System.out.printIn("Brak rozwiazan");
		}
		
	}
	
		
	}
}

MAM CZAS DO JAKIEJŚ 17:30, WIĘC JAKBY KTOŚ DAŁ RADĘ <3

0
public static void main(String[]) argv )

Tu jest błąd nawiasów.
2)

if (args[0])   //liniowa

if (args[1]) //kwadratowa

nie powinno być raczej:
```java
if(args[0] == '0') {
//code
}else if(args[0] == '1') { 
//code 
}

?
3) w liniowej masz zbędną zmienną.
4) układaj kod
5) nie ma czegoś takiego jak:

Match.sqrt

jest Math.sqrt

6) sprawdziłeś czy wgl działa? :P
7) zmienna reader nie jest nigdzie zdefiniowana
0

Nie sprawdziłem czy działa, bo jestem pewien, że nie działa... Nie mam po prostu zielonego pojęcia jak funkcjonuje Java i potrzebowałem szybkiej pomocy. Jak widać ogólne zasady programowania ogarniam, ale po prostu nic nie wiem o tym języku. Czy byłby ktoś skłonny napisać mi poprawnie to pierwsze zadanie? Tylko o tyle proszę :P

0

to co znajduje się powyżej jest po prostu zlepkiem informacji, które znalazłem w necie :c

0

Dobra, masz tutaj kod pierwszego zadania żebyś sobie faktycznie zobaczył o co chodzi w javie. Zrobiłem bez tych durnowatych założeń że jak nie ma wartości to ma założyć 0.

public class Obliczenia {

    public static void main(String[] args) {
        Obliczenia obliczenia = new Obliczenia();
        obliczenia.start(args);
    }

    void start(String[] args) {
        if (args.length == 0) {
            throw new IllegalArgumentException("Spodziewano się typu funkcji (0 - liniowa, 1 - kwadratowa)");
        }

        switch (args[0]) {
            case "0":
                parseLinearFunction(args);
                break;
            case "1":
                parseQuadraticFunction(args);
                break;
            default:
                throw new IllegalArgumentException("Nieznany typ funkcji: " + args[0] + "; spodziewano się 0 lub 1");
        }
    }

    void parseLinearFunction(String[] args) {
        if (args.length < 3) {
            throw new IllegalArgumentException("Spodziewano się parametrów funkcji (y=ax+b)");
        }

        double paramA = Double.parseDouble(args[1]);
        double paramB = Double.parseDouble(args[2]);

        solveLinearFunction(paramA, paramB);
    }

    void parseQuadraticFunction(String[] args) {
        if (args.length < 4) {
            throw new IllegalArgumentException("Spodziewano się parametrów funkcji (y=ax^2+bx+c)");
        }

        double paramA = Double.parseDouble(args[1]);
        double paramB = Double.parseDouble(args[2]);
        double paramC = Double.parseDouble(args[3]);

        solveQuadraticFunction(paramA, paramB, paramC);
    }

    void solveLinearFunction(double paramA, double paramB) {
        if (paramA == 0) {
            if (paramB == 0) {
                System.out.println("Nieskonczenie wiele miejsc zerowych");
            }
            else {
                System.out.println("Nie ma miejs zerowych");
            }
        }
        else {
            double x = findLinearFunctionZero(paramA, paramB);
            System.out.println("Znaleziono miejsce zerowe: " + x);
        }
    }

    void solveQuadraticFunction(double paramA, double paramB, double paramC) {
        if (paramA == 0) {
            throw new IllegalArgumentException("Nie można wykonać funkcji kwadratowej dla a=0, użyj funkcji liniowej");
        }

        double[] zeros = findQuadraticFunctionZeros(paramA, paramB, paramC);
        switch (zeros.length) {
            case 0:
                System.out.println("Nie ma miejsc zerowych");
                break;
            case 1:
                System.out.print("Jest jedno miejsce zerowe: ");
                System.out.println(zeros[0]);
                break;
            case 2:
                System.out.print("Są dwa miejsca zerowe: ");
                System.out.print(zeros[0]);
                System.out.print(" oraz ");
                System.out.println(zeros[1]);
                break;
        }
    }

    double findLinearFunctionZero(double paramA, double paramB) {
        return - paramB / paramA;
    }

    double[] findQuadraticFunctionZeros(double paramA, double paramB, double paramC) {

        double delta = paramB*paramB - 4 * paramA * paramC;

        if (delta < 0) {
            return new double[0];
        }
        else if (delta == 0) {
            double x = -paramB / (2 * paramA);
            return new double[] {x};
        }
        else {
            double deltaSqrt = Math.sqrt(delta);
            double x1 = (-paramB - deltaSqrt )/ (2 * paramA);
            double x2 = (-paramB + deltaSqrt) / (2 * paramA);
            return new double[] {x1, x2};
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1