Oppgavesett 8

Fra Hiofwiki

Revision as of 23. apr 2008 kl. 15:13; Marthhan (Diskusjon | bidrag)
(diff) ← Eldre versjon | vis nåværende versjon | Nyere versjon → (diff)
Gå til: navigasjon, søk

Oppgave 1

       public static int rekSum(int n)
       {
           if(n==1) return 1;
           else return n+rekSum(n-1);
       }
       public static int rekSum2(int n)
       {
          int sum = 0;
          for(int i=1; i<=n; i++)
          {
              sum += i;
          }
          return sum;
       }
       public static int rekSum3(int n)
       {
           int sum = (n*(n+1)/2);
           return sum;
       }
       public static void main(String[] args)
       {
           System.out.println(rekSum(3));
           System.out.println(rekSum2(4));
           System.out.println(rekSum(3));
       }

Oppgave 2

   public static int rekursivMultiplikasjon(int m, int n)
   {
       if(m==0 || n==0) return 0;
       else return m+rekursivMultiplikasjon(m,n-1);
   }    
   public static void main(String[] args)
   {
       System.out.print(rekursivMultiplikasjon(5,9));
   }

Oppgave 3a)

	public static int c(int n, int m) {
		if (m == 0 || m == n)
			return 1;
		else 
			return c(n-1, m) + c(n-1, m-1);
	}

Oppgave 3c)

	public static void main(String[] args) {
			String t = JOptionPane.showInputDialog("C(x,y) på formen x,y");
			String a[] = t.split(",", 2);
			int n = Integer.parseInt(a[0]);
			int m = Integer.parseInt(a[1]);
			JOptionPane.showMessageDialog(null, "C("+n+","+m+")="+c(n,m));
	}

Oppgave 4a)

   A(2,3) =
               
   A(1,A(2,2))
   A(1,A(1,A(2,1)))
   A(1,A(1,A(1,A(2,0))))
   A(1,A(1,A(1,A(1,1))))
   A(1,A(1,A(1,A(0,A(1,0)))))
   A(1,A(1,A(1,A(0,A(0,1)))))
   A(1,A(1,A(1,A(0,2))))
   A(1,A(1,A(1,3)))
   A(1,A(1,A(0,A(1,2))))
   A(1,A(1,A(0,A(0,A(1,1)))))
   A(1,A(1,A(0,A(0,A(0,A(1,0))))))
   A(1,A(1,A(0,A(0,A(0,A(0,1))))))
   A(1,A(1,A(0,A(0,A(0,2)))))
   A(1,A(1,A(0,A(0,3))))
   A(1,A(1,A(0,4)))
   A(1,A(1,5))
   A(1,A(0,A(1,4)))
   A(1,A(0,A(0,A(1,3))))
   A(1,A(0,A(0,A(0,A(1,2)))))
   A(1,A(0,A(0,A(0,A(0,A(1,1))))))
   A(1,A(0,A(0,A(0,A(0,A(0,A(1,0)))))))
   A(1,A(0,A(0,A(0,A(0,A(0,A(0,1)))))))
   A(1,A(0,A(0,A(0,A(0,A(0,2))))))
   A(1,A(0,A(0,A(0,A(0,3)))))
   A(1,A(0,A(0,A(0,4))))
   A(1,A(0,A(0,5)))
   A(1,A(0,6))
   A(1,7)
   A(0,A(1,6))
   A(0,A(0,A(1,5)))
   A(0,A(0,A(0,A(1,4))))
   A(0,A(0,A(0,A(0,A(1,3)))))
   A(0,A(0,A(0,A(0,A(0,A(1,2))))))
   A(0,A(0,A(0,A(0,A(0,A(0,A(1,1)))))))
   A(0,A(0,A(0,A(0,A(0,A(0,A(0,A(1,0))))))))
   A(0,A(0,A(0,A(0,A(0,A(0,A(0,A(0,1))))))))
   A(0,A(0,A(0,A(0,A(0,A(0,A(0,2)))))))
   A(0,A(0,A(0,A(0,A(0,A(0,3))))))
   A(0,A(0,A(0,A(0,A(0,4)))))
   A(0,A(0,A(0,A(0,5))))
   A(0,A(0,A(0,6)))
   A(0,A(0,7))
   A(0,8)
   
   = 9

Oppgave 4b)

   public static int Ackermann(int m, int n)
   {
       int o = 0;
       if (m==0)
           o = n+1;
       if (m>=1)    
           if (n==0)
               o = Ackermann(m-1, 1);                  
       else    
           o = Ackermann(m-1, Ackermann(m,n-1));
       return o;
   }
   public static void main(String[] args)
   {
           System.out.println(Ackermann(2,4));
   }

Oppgave 5a)

   Vi får en output på "3"
   Det som skjer i "strange" er at hvis parameteren
   som blir gitt er = 1 så returnerer den 0, 
   men i alle andre tilfeller så kaller den seg selv frem
   til n=1 og den returnerer da n+1
                                     
   Eks: n=8 => 1+(8/2) => 1+(5/2) => 1+(3/2) --Her er n=3/2 som 
   er = 1 i heltallsdivisjon og den returnerer da 1+(5/2) som er = 3

Oppgave 5b

   Metoden returnerer den minste verdien av de n første elementene i tabellen.

Oppgave 6

   public static String snu(String s)
   {
       StringBuffer b = new StringBuffer(s);
       int n = s.length();
       for(int k=0; k<n/2; ++k)
       {
           int kn = n-1-k;
           char temp = b.charAt(k);
           b.setCharAt(k,b.charAt(kn));
           b.setCharAt(kn,temp);
       }
       return new String(b);
   }
   public static void main(String[] args)
   {
       String snuddstreng = snu("snus");
       
       System.out.println(snuddstreng);        
   }


   private static void snu(StringBuffer t,int k,int n)
   {
       int kn = n-1-k;
       if(k<n/2)
       {
           char temp = t.charAt(k);
           t.setCharAt(k,t.charAt(kn));
           t.setCharAt(kn,temp);
           snu(t,k+1,n);
       }
   }
   
   static String snu2(String s, int index) {
       int invIndex = s.length() - index - 1;
       char[] strArr = s.toCharArray();
       
       if (index <= s.length()/2) 
       {
           char temp = strArr[index];
           strArr[index] = strArr[invIndex];
           strArr[invIndex] = temp;
           snu2(strArr.toString(), ++index);
       }        
       return s;
   }
   
   public static String snu(String t)
   {
       StringBuffer res = new StringBuffer(t);
       snu(res,0,res.length());
       return new String(res);
   }
   
   public static void main(String[] args)
   {
       String test = snu2("kalle", 0);
       System.out.println(test);
   }

Oppgave 7a)

	// parameteren s er a sin lengde, altså er riktig kall: largestElement(x, x.length);
	public static int largestElement(int a[], int s) {
		if(s == 0)
			return -1;
		if(s == 1 )
			return a[0];
		else {
			int temp = largestElement(a, --s);
			if (temp > a[s]) return temp;
			else
				return a[s];
		}
	}