Lösningar till seminarie 1


Uppgift 1

Den korrekta metoden skall se ut enligt följande:

public class hitta{
	public static int hitta(int nyckel, int lista []) {
		int i=0;
		int plats;
		while((lista.length>i)&&(lista[i]!=nyckel)) {
			i++;
		}
		plats=i;
		return(plats);
	}
}

 

Uppgift 2

Den iterativa varianten av Selectionsort:

public class SelectionSort {
    public static void main(String [] argv){
	int [] b= {2,7,5,3,6,8,7,3,6,8,1,1,10};
	System.out.println(arrayToString(b));
	sort(b);
	System.out.println(arrayToString(b));
    }

    public static void sort(int [] array){
	for(int current=0; current < array.length; current++){
	    swap(array, current, findMin(array, current));
	}
    }

    public static void swap(int [] array, int index1, int index2){
	int temp=array[index1];
	array[index1]=array[index2];
	array[index2]=temp;
    }

    public static int findMin(int [] array, int begin){
	int maxIndex=begin;
	for(int i=begin;i<array.length;i++){
	    if(array[i] < array[maxIndex]){
		maxIndex=i;
	    }
	}
	return maxIndex;
    } 

    public static String arrayToString(int [] array){
	String res = "{";
	for(int i=0; i<array.length-1; i++){
	    res+=(array[i]+",");
	}
	res+=(array[array.length-1]+"}");
	return res;
    }
}
***********************************************************************************
Den rekursiva varianten av Selectionsort:
public class SelectionSortRek {
    public static void main(String [] argv){
	int [] b= {2,7,5,3,6,8,7,3,6,8,1,1,10};
	System.out.println(arrayToString(b));
	sort(b);
	System.out.println(arrayToString(b));
    }

    public static void sort(int [] array){
	helpsort(array,0);
    }


    public static void helpsort(int [] array, int begin){
	if(begin==array.length-1){
	    return;
	} else {
	    swap(array,findMin(array,begin),begin);
	    helpsort(array, begin+1);
	}
    }

    public static void swap(int [] array, int index1, int index2){
	int temp=array[index1];
	array[index1]=array[index2];
	array[index2]=temp;
    }

    public static int findMin(int [] array, int begin){
	int maxIndex=begin;
	for(int i=begin;i<array.length;i++){
	    if(array[i] < array[maxIndex]){
		maxIndex=i;
	    }
	}
	return maxIndex;
    } 

    public static String arrayToString(int [] array){
	String res = "{";
	for(int i=0; i<array.length-1; i++){
	    res+=(array[i]+",");
	}
	res+=(array[array.length-1]+"}");
	return res;
    }
}

 

Uppgift 3

public class Kvadrat {
	public static void main(String argv[]) {
		int array[]={1,2,3,4,5,6,7,8,9};
		kvadratArray(array);
		printArray(array);
	}
	public static int kvadrat(int term) {
		return(term*term);
	}

	public static void kvadratArray(int lista[]) {
		for(int i=0;i<lista.length;i++) {
			lista[i]=kvadrat(lista[i]);
		}
	}
	public static void printArray(int lista[]) {
		System.out.print("[");
		for(int i=0;i<lista.length;i++) {
			System.out.print(lista[i]);
			if (i+1<lista.length) 
				System.out.print(", ");
		}
		System.out.println("]");
	}

}

 

Uppgift 4

Fibonacci iterativt:

public class fibIter{
	public static void main(String[] argv){
		int tal = LasIn.läsHeltal("Tal: ");
		System.out.println(fib(tal));
	}

	public static int fib(int level) {
		int a[]={0,1};
		for(int i=2;i<=level;i++){
			a[i%2]=a[0]+a[1];
		}
		return(a[level%2]);
	}
}

Fibonacci rekursivt:

public class fibRek{
    public static void main(String[] argv){
        int tal = LasIn.läsHeltal("Tal: ");
        System.out.println(fib(tal));
    }
    public static int fib(int n){
        if (n==1||n==2) return 1;
        else return fib(n-1)+fib(n-2);
    }
}
 

 

Uppgift 5

Fakultet rekursivt:

public class fakultet {
    public static void main(String[] argv){
        int tal = LasIn.läsHeltal("Tal: ");
        System.out.println(fak(tal));
    }
   
    public static int fak(int n) {
        if (n==1) {
        return(1);
    }
    return(n*fak(n-1));
    }
}


Fakultet iterativt :

public class fakultet {
    public static void main(String[] argv){
        int tal = LasIn.läsHeltal("Tal: ");
        System.out.println(fak(tal));
    }
    public static int fak(int n) {
        int p=1;
        for(int i=n;i>=1;i--){
            p=p*i;
        }
    return(p);
    }
}

 

 

Uppgift 6

Klassen Turn innehåller metoderna reverseIter och reverseRek som vänder på strängen iterativt och rekursivt

public class Turn {
	public static void main(String [] argv){
		String orginal="";
		if(argv.length==0){
			orginal="sirap";
		} else {
			orginal=argv[0];
		}
		System.out.println(orginal+" blev "+reverseRek(orginal)+" rekursivt");
		System.out.println(orginal+" blev "+reverseIter(orginal)+" iterativt");
	}

	public static String reverseIter(String str) {
		String s="";
		for(int i=str.length()-1;i>=0;i--) {
			s=s+str.charAt(i);
		}
		return(s);
	}
	
	public static String reverseRek(String str){
		if(str.length() < 1){
			return(str);
		} else {
			return(reverseRek(str.substring(1))+str.charAt(0));
		}
	} 
}