Takie zadanie...prosba o pomoc

0

Witam,

Czy mial ktos moze stycznosc z czyms podobnym, moze pisal nawet to samo? Oto zadanie:

{
Napisz następujące trzy funkcje: funkcję określającą czy dana liczba to liczba pierwsza, funkcję określającą czy dana liczba to liczba Fibonacci’ego oraz funkcję określającą czy dana liczba to liczba Amstrong’a. Następnie wykorzystaj te funkcje w programie wyznaczającym n-kolejnych liczb pierwszych, Fibonaccie’go i Amstrong’a. Zdefiniuj w programie funkcję poprawnie wczytującą z klawiatury liczbę naturalną. Zastosuj w programie pomiar czasu obliczeń (należy określić ile trwało wyznaczanie liczb poszczególnych rodzajów). Wskazówki: liczba pierwsza, to liczba naturalna większa od 1, podzielna tylko przez 1 i przez samą siebie; ciąg liczb Fibonacci'ego to ciąg: 1, 1, 2, 3, 5, 8, 13, 21, ..... (dwie pierwsze liczby to jedynki, każda następna jest sumą dwóch poprzednich); liczba Amstrong’a to liczba równa sumie sześcianów swoich cyfr, np. 153 = 13 + 53 + 33.>>
}

Nie ukrywam, javy nie znam ni w zab a termin oddawania prac zbliza sie nieublaganie, w zwiazku z tym prosze o pomoc w zbudowaniu tych funkcji.
Pzdr.

0

Pomysł by wykorzystywać funkcję typu

public boolean isFibonacci(int k)
{
     if k należy do ciągu Fibonacciego return true
     else return false
}

do tworzenia ciągu Fibonacciego wydaje mi się absurdalny
pozdrawiam

0

cóż.. bo jest. ale zadanie od prowadzącego to zadanie do wykonania..

edit: bogdans@niżej: calkowicie sie zgadzam. ale wierz mi, BARDZO wielu prowadzacych NIE LUBI jak sie studenci "mondrzom" i podważają ich "kąpetęcje"..

0

Też jestem prowadzącym. Gdybym (przez pomyłkę oczywiście) tak sformułował zadanie, to dużo bardziej być cenił studenta, który by sugerował że zadanie jest absurdalne od tego, który by je rozwiązał.
pozdrawiam

0
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Scanner;

public class Zad {
	private final static Scanner INPUT = new Scanner(System.in);
	private final static SimpleDateFormat FORMATTER = new SimpleDateFormat("m 'min' s 'sec' S 'milisec'");

	public int fib(int n) {
		return (n==0 || n==1)? 1 : fib(n-1)+ fib(n-2);
	}//koniec fib

	public boolean isFib(int x) {
		boolean isFib = false;
		for(int i=0; i<Integer.MAX_VALUE; i++) {
			int fib = fib(i);
			if(fib == x) {
				isFib = true;
				break;
			} else if(fib > x) {
				break;
			}
		}//koniec for
		return isFib;
	}//koniec isFib

	public boolean isPrimeNum(int x) {
		if(x<2) return false;

		boolean isPrime = true;
		int limit = (int) Math.sqrt ( x );
		for (int i = 2; i <= limit; i++ ) {
			if ( x % i == 0 ) {
				isPrime = false;
				break;
			}
		}
		return isPrime;
	}//koniec isPrimeNum


	private int sumCube(int x) {
		int dig;
		int sum = 0;

		while(x >= 1) {
			dig = x % 10;
			sum = sum + dig * dig * dig;
			x = x / 10;
		}
		return sum;
	}//koniec sumCube

	public boolean isArmstrong(int x) {
		return sumCube(x) == x;
	}//koniec isArmstrong

	public int readInt() throws NumberFormatException {
		System.out.print(">");
		String line = INPUT.next();
		return Integer.parseInt(line);
	}//koniec readInt

	public Zad() {
		System.out.println ("LICZBY PIERWSZE");
		System.out.println ("Podaj ilość iteracji");
		int n = -1;
		while((n = readInt()) < 1) {
			System.out.println ("Wprowadzona liczba musi być większa od 1");
		}
		Date start = new Date();
		int count = 0;
		for(int i=0; i<n; i++) {
			if(isPrimeNum(i)) {
				System.out.print(""+i+",");
				count++;
			}
		}

		Date stop = new Date();
		Date diffPrime = new Date(stop.getTime() - start.getTime());
		System.out.println ("\nCzas wykonania:\t"+FORMATTER.format(diffPrime));
		System.out.println ("Ilość iteracji:\t"+n);
		System.out.println ("Liczb pierwszych:\t"+count);
		//--fib
		System.out.println ("\n\nLICZBY FIBONACCI'EGO");
		System.out.println ("Podaj ilość iteracji");
		n = -1;
		while((n = readInt()) < 1) {
			System.out.println ("Wprowadzona liczba musi być większa od 1");
		}
		start = new Date();
		count = 0;
		for(int i=0; i<n; i++) {
			if(isFib(i)) {
				System.out.print(""+i+",");
				count++;
			}
		}

		stop = new Date();
		Date diffFib = new Date(stop.getTime() - start.getTime());
		System.out.println ("\nCzas wykonania:\t"+FORMATTER.format(diffFib));
		System.out.println ("Ilość iteracji:\t"+n);
		System.out.println ("Liczb Fibonacci'ego:\t"+count);

		//--arm
		System.out.println ("\n\nLICZBY ARMSTRONG'A");
		System.out.println ("Podaj ilość iteracji");
		n = -1;
		while((n = readInt()) < 1) {
			System.out.println ("Wprowadzona liczba musi być większa od 1");
		}
		start = new Date();
		count = 0;
		for(int i=0; i<n; i++) {
			if(isArmstrong(i)) {
				System.out.print(""+i+",");
				count++;
			}
		}

		stop = new Date();
		Date diffArm = new Date(stop.getTime() - start.getTime());
		System.out.println ("\nCzas wykonania:\t"+FORMATTER.format(diffArm));
		System.out.println ("Ilość iteracji:\t"+n);
		System.out.println ("Liczb Armstrong'a:\t"+count);

		System.out.println ("\n\n------------------");
		Date sum = new Date(diffPrime.getTime()+ diffFib.getTime() + diffArm.getTime());
		System.out.println ("Całkowity czas:\t"+FORMATTER.format(sum));
	}//koniec Zad

	public static void main(String args[]) {
		new Zad();
	}
}//koniec klasy Zad
0

co by nie było, metodę czytająca liczbę naturalną, która korzysta z klasy Scanner powinno się zrobić tak:

public int readInt() throws InputMismatchException {
	System.out.print(">");
	return INPUT.nextInt();
}//koniec readInt

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