Senamirmir Senamirmir Projects Senamirmir Interviews Senamirmir Downloads Senamirmir Links Senamirmir Navigation Bar
Chapter IV Table of Contents Chapter VI JIA Navigation Bar

Print Page




ድግግማዊ ቃላት (Loops)

5.1 ምዕላደ-ቃላት

አማርኛ ቃል እንግሊዘኛ ቃል
ድግግም repetition
ዙር/ዙሪያ iteration
ዙር ቆጣሪ loop counter
ተፈታኝ ቃል test condition

5.2 የድግግማዊ ቃላት ዓላማ

በልዩ ልዩ ሁኔታዎች መደጋገም የሚጠይቁ ችግሮች ሥፍር ቍጥር የላቸውም። ድግግማዊ ቃላት፥ መመሪያዎች ከአንድ ጊዜ በላይ ተከታትለው በሥራ ላይ እንዲውሉ ያስችሉናል። ለምሳሌ ከ1-5 ያሉትን ቍጥሮች በተረታ ማባዛት ብንፈልግ፥ ያለአስደጋሚ ቃላት ይኸን ይመስላል።

ድግግሞሽ

   int result = 1 ;

   result = result * 1 ;
   result = result * 2 ;
   result = result * 3 ;
   result = result * 4 ;
   result = result * 5 ;	

			

ምንም እንኳን ሌሎች ችግሮች ቢነሩም፥ ለጊዘው ድግግሞሹ ላይ እናተኩር። በግልጽ እንደምናየው፥ መፍትሔው አምስት መመሪያ ቃል ይዟል። ምናልባት ይኽ ተቀባይነት ይኖረው ይሆናል። ነገር ግን፥ ችግሩ ከ1-5 ማባዛት መሆኑ ቀርቶ ከ1-100 ብናደርገው፥ የመመሪያዎቹ ቃል ብዛት በዛው መጠን ይጨምራል። ገደቡን ወደላይ እየሰቀልን ስንመጣ፥ የመመሪዎች ቍጥር ይንራል። እንደዚህ ዓይነቱ ፕሮግራም አጻጻፍ፥ የኮድ መንዛዛት ከማስከተሉም በላይ አንብቦ ለመረዳት እንዲሁም ግድፈትን ለማረም ወይም መሻሻልን ለማምጣት እንቅፋት ይሆናል። ድግግማዊ ቃላትን በመጠቀም የተሻለ መፍትሔ ካጠረና ከነጠረ ኮድ ጋር መጻፍ ይቻላል። ለምሳሌ፥

የfor ቃል

   int result = 1 ;
   int until = 1000 ;

   for (int n=1; n < until; n++)
      result = result * n ;		

			

ይህ የተሻለና ቅልብጭ ያለ መፍትሔ ነው። ለማንበብ፥ ለማሻሻል፥ ወይም ግድፈት ለማረም ቀላልና አመቺ ነው። ስለዚህ ድግግማዊ ቃላት ለፕሮግራም ጸሐፊዎች ብርቱ ኃይል ይለግሳሉ።

5.3 የድግግማዊ ቃል ዓይነታት

በጃቫ ቋንቋ አራት የድግግማዊ ቃላት አሉ። በዚህ ምዕራፍ ሦስቱን ብቻ እንመለከታለን። ሦስቱም መሠረታዊ ተግባራቸው አንድ አይነት በሆንም፥ ግልጽና የማያሻማ ልዩነት አላቸው። በመሆኑም አንደኛው ከሌላኛው ለአንድ ችግር ያመቸ መፍትሔ ሊሆን ይችላል።

  • የwhile ድግግማዊ ቃል
  • የfor ቃልና
  • የdo while ቃል ናቸው።

5.4 የwhile ድግግማዊ ቃል

የwhile ቃል አገባብ

የዚህ ድግግማዊ ቃል የሥራ ቅደም-ተከተል እንዲህ ነው።

  • ሂደቱ እሱጋ ሲደርስ፥ ተፈታኙ ቃል ይገመገማል። ውጤቱ አዎ ከሆነ፥ ሂደቱ ወደ ሰውነቱ ያመራል።
  • በውስጡ ያሉት መመሪያዎች በሥራ ላይ ይውላሉ።
  • የውስጡ ሥራ እንደተጠናቀቀ፥ ሂደቱ ወደ ተፈታኙ ቃል ወይም ወደ ድግግማዊ ቃል ራስጌ ይመለሳል።
  • ተፈታኙ ቃል እንደገና ይገመገማል። ውጤቱ አዎ ከሆነ በተራ ቍጥር 2 እና 3 የተጠቀሱት ይከናወናሉ። ነገር ግን ውጤቱ አይደለም ከሆነ፥ የድግግማዊ ቃል ዙር ይሰበርና ወደ ተከታዩ መመሪያ ሂደቱ ያመራል።

ምሳሌ፥ ይህ መመሪያ የተሰጠውን የቍጥር አባላት አንድ በአንድ በተረታ ያወጣና ይጽፋቸዋል። እንደዚህ አይነቱ ዘዴ ከቍጥር ጋር የተያያዙ ችግሮችን መፍትሄ ለመስጠት ይደግፋል።

የwhile ቃል

int number = 314159 ;

while (number > 0) {
   System.out.println(number % 10) ;
   number /= 10 ;
}

			

ማብራሪያ፦

  • በፈታኙ ቃል የnumber ዋጋ ከ0 በላይ እስከሆነ ድረስ፥ የግምገማው ውጤት አዎ ይሆናል። በመሆኑም ቃሉ ራሱን እየመላለሰ ይደጋግማል። ያ ማለት፥ በውስጡ ያሉት መመሪያዎች በተደጋጋሚ በሥራ ላይ ይውላሉ።
  • አስደጋሚው ቃል ራሱን የሚገታው የnumberን ተውላጠ-ቃል በማደስና ዋጋው ዜሮ ወይም ከዛ በታች ሲሆን ነው።

የሚከተለው ፕሮግራም የwhile የደግግም ቃል አሠራር እንዲሁም ጠቀሜታ ለማሳየት ይሞክራል።

Conversion.java

public class Conversion {
	
   /* Convert decimal to binary and returns the result */
	String toBin(int n) {
      String bin = "";
      
      while (n > 0) {      
         bin = "" + n % 2 + bin ;
         n /= 2 ;
      }	
      return bin ;
   }
   
   /* Convert decimal to hexadecimal and returns the result */
   String toHex(int n) {
      String hexDigits = "0123456789ABCDEF" ;
      
      String hex = "";
      
      while (n > 0) {
         char c = hexDigits.charAt(n%16) ;
         
         hex = "" + c + hex ;
         n /= 16 ;
      }  
      return hex ;
   }

   /** An entry point for program execution */     
	public static void main(String[] args) {
      Conversion con = new Conversion() ;
      
      int decimal = 1024 ;
      System.out.println("in decimal " + decimal) ;      
      System.out.println("in binary " + con.toBin(decimal)) ;
      System.out.println("in hexadeciaml " + con.toHex(decimal)) ;      
      
	}
}

Download: Conversion.java
			

5.5 የfor ድግግማዊ ቃል

የwhile ድግግማዊ ቃል፥ የዙሩን መጠን የሚቆጣጠረው ወይም ሥራው መደገም ወይም መታገት እንዳለበት ውሳኔ አደራረሱ ብዙ ጊዜ ከሰውነቱ ተግባራት ጋራ የተያያዘ ነው። አስቀድሞ ያየነው ምሳሌ ይኸን ያመለክታል።

የfor ድግግማዊ ቃል ከwhile ግን ለየት ይላል። የድግግሞሹን ህልውና የሚቆጣጠረው የራሱ የሆነ ክፍል አለው። በተጨማሪ፥ የድግግሞሽ መጠናቸው በግልጽ ለታወቁ ችግሮች ላሠራር አመቺና ተመራጭ ነው።

የfor ቃል አገባብ

ምሳሌ፦ ይህ ድግግማዊ ቃል ከ1-1024 ያሉትን ቍጥሮች በተርታ ይደምራል። ውጤታቸውን በsum ተውላጠ-ቃል ይጠብቃል።

የfor ቃል

   int sum = 0 ;

   for (int i=1; i < 1024; i++) {
      sum = sum + i ;
   }

			

ይህ ምሳሌ እንደሚያሳየው፥ ቃሉ ድግግሙን የሚቆጣጠረው አናቱ ላይ ባለው ክፍል ነው። የድግግሙ ቆጣሪ በመጀመሪያው ክፍል ታውጇል፤ ቀጥሎ ተፈታኙ ቃል ገብቷል፤ ከዛ የቆጣሪው ማደሻ ቃል ተጨምሯል። የድግግሙ ሰውነት በጥምዝ ቅንፍ የተከበበው ነው።

የሂደቱ ቅደም-ተከተል እንዲህ ነው።

  1. የመነሻ ክፍሉ ድግግሙ ከመጀመሩ በፊት ይታያል። አንድ ጊዜ ብቻ። በዚህ ምሳሌ፥ የድግግሙ ቆጣሪ የወጣውና መነሻ ዕሴቱ የተሰየመው እዛ ነው።
  2. ድግግማዊ ቃል በሥራ ላይ መዋል እንዳለበት ወይም እንደሌለበት ለመወሰን ተፈታኙ ቃል ይገመገማል። ውጤቱ አዎ ከሆነ ድግግሙ ይቀጥላል። ካልሆነ ግን ድግግሙ ይቋረጣል።
  3. የተፈታኙ ቃል የግምገማ ውጤት አዎ ከሆነ የድግግሙ ሰውነት ውስት ያሉት መመሪያዎች በሥራ ላይ ይውላሉ።
  4. ዙሩ እንዳለቀ፥ ሂደቱ ወደ ቆጣሪ ማደሻ ክፍል ይዘዋወርና እዛ ውስጥ የተጠቀሰው ተግባር ይፈጸማል።
  5. የተፈታኙ ቃል ቀጥሎ ይገመገምና እንደ ውጤቱ ተከታዩ እርምጃ ይወሰዳል።

ሌላ ምሳሌ:

የfor ቃል

for (int i=1; i < 100; i++) {
	if (i % 11 == 0)
      System.out.println("Divisable by 11: " + i) ;
}

እንደገና ሌላ ምሳሌ፦

String text = "AakjjEPW;akQ" ;

for (int i=0; i < text.length(); i++) {
   if (text.charAt(i) >= 'a' && text.charAt(i) <= 'z')
      System.out.println("Lowercase: " + text.charAt(i)) ;
   else if 	(text.charAt(i) >= 'A' && text.charAt(i) <= 'Z')
      System.out.println("Uppercase: " + text.charAt(i)) ;
   else
      System.out.println("Non-alphabet: " + text.charAt(i)) ;
}

			

ይኸንን ክፍል የforን ድግግማዊ ቃል በሥራ በሚያሳይ ፕሮግራም እንዘጋለን። አንባቢው እንደሚረዳው፥ ስለፕሮግራሙ የቀረበ ማብራሪያ የለም። አንደኛው ምክንያት አንባቢው አንደ መለስተኛ ፈተና እንዲመረምረው ነው።

Drawing.java


public class Drawing {
	
   /* Using '*', it draws a triangle */
	void triangle(int n) {
      for (int i=0; i < n; i++) {
         for (int j=0; j < i; j++)
            System.out.print('*') ;
         System.out.println() ;
      }
   }
   
   /* Using '*', it draws a rectangle */
   void rectangle(int n) {
      for (int i=0; i < n; i++) {
         for (int j=0; j < n; j++)
            System.out.print('*') ;
         System.out.println() ;
      }
   }

   /** An entry point for program execution */     
	public static void main(String[] args) {
      Drawing drawing = new Drawing() ;
      int size = 10 ;
      drawing.triangle(size) ;
	}
}

Download: Drawing.java
			

5.6 የdo while ድግግማዊ ቃል

ይህ ድግግማዊ ቃል ከwhile ጋዙ በሁሉም ነገር ተስማምቶ በአንድ ነገር ብቻ ይለያል። የተፈታኙ ቃል የሚገመገመው ሁልጊዜ ከድግግሙ ቃል መጨረሻ ነው። በሌላ አነጋገር ተፈታኙ ቃል እንደ while ራስጌው ላይ ሳይሆን ግርጌው ላይ ነው ያለው። በመሆኑም ምንም ፈተና ሳይደረግ የመጀመሪያው ዙር በሥራ ላይ ይውላል።

የdo while ቃል የሚሰጠው ተጨማሪ ጠቀሜታ ውስን ነው። አንዳንድ ጊዜ ላጠቃቀም ተመራጭነት ይኖረው እንደሆን እንጂ፥ እሱ የሚሠራውን በሙሉ የwhile ቃል መሥራት ይችላል።

የdo while ቃል አገባብ

ምሳሌ፦

የdo while ቃል

   String s = "" ;

   do {
      s = s + "a" ;
      System.out.println(s) ;
   } while (s.length() < 1) ;

			

የመጀመሪያው ዙር ነፃ ነው። ያለምንም ፈተና በድግግሙ ሰውነት ውስጥ ያሉት መመሪያዎች በሥራ ላይ ይውላሉ። ከአንድ ዙር በኃላ፥ ተፈታኙ ቃል ይገመገማል። ውጤቱ አዎ ከሆነ ድግግሙ ይቀጥላል። አለዛ፥ ይቋረጥና ወደ ተከታዩ ሂደት ያመራል።

መዋቅሩ ላይ በመመርኮዝ ወደ while ቃል ብንቀይረው ይኸን ይመስላል።

የwhile ቃል

   String s = "" ;

   while( s.length() < 1) {
      s = s + "a" ;
      System.out.println(s) ;
   }

			

የs መጠን ዚሮ ስለሆነ ተፈታኙ ቃል ሲገመገም ውጤቱ አይደለም ይመጣል። ስለዚህ፥ ድግግሙ ምንም አይነት ዙሪያ አይኖረውም። በውስጡ ያሉት መመሪያዎች በሥራ ላይ አይውሉም።

5.7 የbreak እና የcontinue ቃላት

አንዳንድ ጊዜ የአስደጋሚ ቃላትን ሂደት ወይም ዙሪያዎች ማቋረጥ አሥፈላጊ ይሆናል። ምንም እንኳን የድግግሞሹን ሂደት ይቆጣጠር ዘንድ ተፈታኝ ቃል ቢኖርም፥ አንዳንድ ጊዜ ሂደቱ የተፈታኙ ቃልን ግምገማ ላያስጠብቅ ይችላል። በእንደዚህ አይነት ሁኔታ የbreak ቃል የድግግሙን ቃል ሰብሮ ለመውጣት የሚያስችል ነው።

አንድ ፕሮግራም ጸሐፊ የግድ የbreakን ቃል መጠቀም አይኖርበትም። ይሁን እንጂ፥ አንዳንድ ሁኔታዎች ላይ መጠቀሙ አመቺ ሆኖ ይገኛል። ለዛ መዳዳት አያስፈልግም።

ምሳሌ፦

የfor ቃል

   int n = 1 ;

   for ( ; ; ) {
      if ( n%20 == 0) 
         break ;
      else
         n = n + 1 ;
   }

			

ይህ አስደጋሚ ቃል ዙሩን የሚቆጣጠረው ክፍሉ ባዶ ነው። በጃቫ ሕግ መሠረት የዙሩ መጠን መጨረሻ የለውም። ለዘላዓለም ሲዞር ይኖራል። ደግነቱ፥ በውስጡ ቃል የተጠቀሰው ሁኔታ ሲሟል። ደግግሙን ሰብሮ ይወጣል። በዚህ መንገድ የአስደጋሚው ቃል ዕድሜ ተገደበ።

የcontinue ቃል ለየት ያለ ጥቅም አለው። የbreak ቃል ደግግሙን ሙሉ በሙሉ ሰብሮ ለመውጣት ሲሆን፥ የcontinue ቃል ግን ዙርን አቋርጦ ወደ አስደጋሚው ቃል ራስጌ ሂደቱን ለማምራት ነው።

ምሳሌ፦

የwhile ቃል

   int n = 1 ;

   while (n < 16) {
      if ( n%2 == 1)
         continue ;
   
      // do something here
      n++ ; 
  }

			

የn ዕሴት በሁለት ተካፍሎ ቀሪው አንድ ከሆነ ዙሩ ይቋረጥና ወደ ተፈታኙ ቃል ያመራል። አለዛ፥ የቀሩት መመሪያዎች በሥራ ላይ ውለው፥ እንደተለመደው ሂደቱ ወደ ተፈታኙ ቃል ያመራል።

የwhile ቃል

   int n = 1 ;

   while (n < 16) {
      if ( n%2 == 1)
         continue ;
   
      // do something here
      n++ ; 
   }

			



Chapter IV Table of Contents Chapter VI JIA Navigation Bar


Copyright © 2002-2005 Senamirmir Project