Algorytmy

Algorytmy na maturę - implementacja Java

JAVA

Nie sądziłem, że ktoś korzysta z moich wypocin, a jednak... :) Jeden z czytelników bloga przygotował implementację większości dotychczas omówionych przeze mnie algorytmów, których znajomość może przydać się na maturze z informatyki. Wszystkich zainteresowanych zapraszam do zapoznania się z nimi. Autorem programów jest Robert Urbaniak.

Dzielniki liczby

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Dzielniki {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int liczba = s.nextInt();
		List<Integer> dzielniki = new ArrayList<Integer>();
		for(int i=2;i<liczba;i++){
			if((liczba % i)==0) dzielniki.add(i); //Jeśli reszta dzielenia liczby przez i wynosi 0 to jest to dzielnik i dodajemy do list
		}
		System.out.println(dzielniki.toString()); //Wypisanie dzielników

	}

}

 

Rozkład liczby na czynniki

import java.util.*;
public class Rozkładnik_liczb {

	public static void main(String[] args) {
		boolean pierwsza = true;
		Scanner S = new Scanner(System.in); //Pobieramy liczbę którą chcemy sprawdzić
		int liczba = S.nextInt(); //Zamiana na liczbę całkowitą
		String podzielniki = "Liczbę " + liczba+ " możemy zapisać jako iloczyn liczb:"; //Przygotowanie odpowiedzi do której dodamy podzielniki
		List<Integer> dzielniki = new ArrayList<Integer>(); //Deklarujemy listę która będzie zawierała x liczb pierwszych
			for(int i=2; i<liczba ; i++){ // Wyszukanie liczb pierwszych w zakresie od 2 do n
				pierwsza = true;
				for(int a=2; a<i; a++){
						if((i % a) == 0){
								pierwsza=false;
						}
				}
				if(pierwsza){
					dzielniki.add(i);
				}	
			}//KONIEC WYSZUKIWANIA  LICZB PIERWSZYCH
			Collections.sort(dzielniki, Collections.reverseOrder()); //Posortowanie dzielników od największego do najmniejszego
			while(liczba!=1){//Dzielenie przez liczby pierwsze
				for(int b=0; b<dzielniki.size();b++){
					if((liczba % dzielniki.get(b))== 0){
						liczba = liczba/dzielniki.get(b);
						podzielniki += " "+ dzielniki.get(b)+ ",";
					}
				}
			}
			System.out.println(podzielniki);
			

	}
}

Liczby pierwsze

import java.util.Scanner;

public class Pierwsze {

	public static void main(String[] args) {
		Scanner n = new Scanner(System.in); // Pobieramy z konsoli liczbę którą chcemy sprawdzić
		int liczba = n.nextInt() ; //Scanner pobiera plik typu STRING dlatego używamy metody nextInt() do zamiany na liczbę całkowitą
		boolean pierwsza= true; //Zakładamy pierwotnie, że jest pierwszą
		for(int i=2; i<liczba; i++){ //Sprawdzamy dla każdej liczby od 2 do n-1 czy n jest podzielne przez nią
		if((liczba % i == 0)){
			pierwsza = false; //Jeśli liczbę możemy podzielić przez inną liczbę niż 1 i nią samą to NIE JEST LICZBA PIERWSZA
		}
		
		}
		if(pierwsza)System.out.println("Liczba " + liczba + " Jest liczbą pierwszą");
			else System.out.println("Liczba " + liczba + " Nie jest liczbą pierwszą");

	}

}

Liczby doskonałe

public class Doskonała {

	public static void main(String[] args) {
		int liczba = 496;
		int suma= 0;
		int[] podzielniki = new int[liczba+1];
		for(int i=1; i<=liczba; i++){
			if((liczba % i) == 0){ //Szukanie podzielników liczby
				podzielniki[i]= i;
			}		
		}
		for(int d=1; d<liczba;d++ ){ //Suma podzielników liczby	
			suma+=podzielniki[d];
		}
		if(suma==liczba)System.out.println("Liczba " + suma + " jest doskonała");	
		else System.out.println("Liczba " + liczba + " nie jest doskonała");
	}
}

Sito Eratostenesa

import java.util.*;
public class Szukaj_Liczb_Pierwszych {

	public static void main(String[] args) {
		int Liczba =523; //Liczba n do której szukamy liczb pierwszych
		boolean pierwsza=true;
		List<Integer> pierwsze= new ArrayList<Integer>(); // Lista liczb pierwszych
		for(int i=2;i<=523;i++){ //Sprawdzamy każdą liczbę z zasięgu od 2 do n(liczba)
			pierwsza=true; //Zakładamy, że jest pierwszą
			for(int a=2;a<i;a++){ 
				if((i% a)==0) pierwsza=false; //sprawdzamy czy kolejna liczba jest liczbą pierwszą, sprawdzamy czy ma podzielniki jeśli tak to ustawiamy pierwsza=false
			}
			if(pierwsza) pierwsze.add(i); //Jeśli pierwsza=true to dodajemy do spisu pierwszych
		}
		System.out.println(pierwsze.toString()); //Wypisujemy liczby pierwsze
	}

}

Największy wspólny dzielnik

import java.util.*;

public class NWD {

	public static void main(String[] args){
	
	int a = 999;
	int b = 81;
	String odp = "NWD liczb: " + a+ " i " + b + " wynosi: ";
	int c;
	while(b!=0){ //Dopóki reszta dzielenia przez liczby a i b nie będzie 0 to
	c = a % b; //Obliczenie reszty
	a = b; //Zamiana dzielnej z dzielnikiem
	b = c;//Zamiana dzielnika z resztą 
	}
	System.out.println(odp +a);
	//Aby obliczyć NWW wystarczy użyć takiej formuły:
	//NWW=Pierwsza_liczba*Druga_liczba/NWD
	}
}

Konwersja pomiędzy systemem binarny, a dziesiętnym

import java.util.*;
public class Konwersja {

	public static void main(String[] args){
		String binarna =new String("101110111");
		int dec =0;
		int potęga = 1;
		for(int i=binarna.length();i>=1;i--){ //Istotne jest, że i sprawdzamy od końca
				if(binarna.charAt(i-1)=='1'){ //Metoda charAt pobiera nam jeden znak o danym indexie ze stringa
					dec = dec + (1*potęga);
					System.out.println(dec);
				}
				potęga=potęga*2;
		}
		System.out.println("Liczba dziesiętna to: "+dec);
	}
}

Potęgowanie

public class Potęga {

	public static void main(String[] args) {
		int wykładnik =2;
		int potęga = 8;
		int suma=1;
		for(int i=1; i<=potęga;i++){
	 suma=suma*wykładnik;
		}
		System.out.println(suma);
	}

}

Sortowanie bąbelkowe

public class Bąbelkowe {

	public static void main(String[] args){
		int[] tab = {5,4,3,1,6,2,3,5,1,2};
		int zmiany= 1;
		int próba;
		int pomoc;
		while(zmiany!=0){ //Póki ani razu nie przestawimy liczb będzie działać
			próba=0;
			zmiany=0;
			while(próba!=tab.length-1){ //Próba przestawienia dla każdego indexu 
				if(tab[próba]<tab[próba+1]){
					zmiany++;
					pomoc = tab[próba];
					tab[próba] = tab[próba+1]; //Jeśli index n jest mniejszy od n+1 to zamień n i n+1
					tab[próba+1]= pomoc;	
				}
				próba++;
			}
			
		}
		for(int i=0; i<tab.length;i++){
			System.out.print(tab[i]+ " "); //wypisuje tablicę
		}
	}
}

Silnia

public class Silnia {

	public static void main(String[] args) {
		int silnia = 3;
		int suma = 1;
		for(int i=2;i<=silnia;i++){
			suma=suma*i;
		}
		System.out.println("Silnia z liczby: "+ silnia+ " wynosi " + suma);
	}

}

Anagramy

public class Anagramy {

	public static void main(String[] args) {
		String pierwsza = new String("masło"); //Deklaracja pierwszego słowa
		String druga = "słoma"; //Deklaracja drugiego słowa
		boolean anagram = true;  //Założenie, że jest anagramem
		for(int i=0; i<pierwsza.length();i++){
			if(druga.indexOf(pierwsza.charAt(i))==-1){
				anagram = false;
			}
		}
		if(anagram){
			System.out.println("Jest");
		}else System.out.println("nie jest");

	}

}

Palindromy

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Palindrom {

	public static void main(String[] args) throws IOException {
		BufferedReader br  = new BufferedReader(new FileReader("C:\\Users\\Ave\\Desktop\\Dane_PR2\\palindrom.txt")); //Przykładowa ścieżka pliku UWAGA: ZAWSZE STAWIAĆ 2x \\
		String line;
		boolean pali;
		while((line=br.readLine())!=null){
			String palindro = new String(line);
			String palindrom = palindro.replace(" ", "");
			pali = true;
			for(int i=0;i<(int)Math.floor(palindrom.length()/2);i++){
				if(Character.toLowerCase(palindrom.charAt(i))!=Character.toLowerCase(palindrom.charAt(palindrom.length()-(i+1)))){	
					pali=false;	
				}
			}
			if(pali){
			System.out.println("Słowo: "+ palindrom + " - jest palindronem");
			}else{
				System.out.println("Słowo: "+ palindrom + " - nie jest palindronem");
			}
			
		}

	}

}
grupa wsparcia matura z informatyki