2010-02-20 21 views
8

मैं इस गर्मी में अपना पहला विश्वविद्यालय स्तर कंप्यूटर साइंस कोर्स पढ़ाउंगा, और मैं वर्तमान में मजेदार असाइनमेंट के लिए विचारों के साथ आने पर काम कर रहा हूं जो छात्र पूरा करेंगे। पाठ्यक्रम कार्यक्रम में दूसरा है, जिसमें एल्गोरिदम और बुनियादी डेटा संरचनाओं जैसे स्टैक्स, कतार, सूचियां, पेड़ इत्यादि का विश्लेषण शामिल हैपरिचय कंप्यूटर विज्ञान असाइनमेंट

मेरे पास कई विचार हैं जिनके साथ मैं दौड़ सकता हूं (मार्कोव चेन के साथ संगीत बनाना , ट्विटर क्लाइंट इत्यादि), लेकिन हमेशा नए विचारों की तलाश में हूं जो छात्रों के लिए दिलचस्प/मजेदार होंगे - आखिरकार, जब कोई मजा आता है तो पाठ्यक्रम सामग्री में व्यस्त/रहना सबसे आसान होता है। मैं प्रथम वर्ष के स्तर के असाइनमेंट को समेकित करने के विचारों की तलाश में हूं जो आप या अन्य अतीत में पूरा कर चुके हैं।

इससे पहले कि कोई इसे सुझाए, हाँ मुझे निफ्टी असाइनमेंट के बारे में पता है, और इसे चेक आउट कर दिया है। बस आपके पास होने वाले किसी अन्य विचार की मांग कर रहे हैं। हम सभी को विश्वविद्यालय से कुछ असाइनमेंट याद हैं जो काम करने के लिए विशेष रूप से मजेदार थे। ये वे अनुभव हैं जिन्हें मैं आदर्श रूप से खोज रहा हूं।

+0

उसी क्षेत्र से मेरा प्रश्न देखें, शायद आपको वहां कुछ उपयोगी लगेगा http://stackoverflow.com/questions/1318770/impressive-examples-in-java – Roman

उत्तर

2

SICP में कुछ बहुत ही अच्छे असाइनमेंट हैं।

4

"मजेदार" असाइनमेंट के साथ समस्या यह है कि वे अक्सर छात्रों के लिए अधिक काम करने के लिए बाहर निकलते हैं। खासकर गरीब अंग्रेजी वाले छात्र और छात्र जो अंतिम मिनट में असाइनमेंट छोड़ते हैं। [और उसके बाद "कृपया अपना होमवर्क करें" प्रश्नों के साथ SO पर चालू करें।] उनमें से बहुत से आपके द्वारा निर्धारित किसी भी असाइनमेंट में कठिनाई हो रही है, लेकिन आपको अभ्यास के बारे में शिकायत करने वाले छात्रों के समूह की बढ़ोतरी की आवश्यकता नहीं है बहुत कठिन है, या अपने व्याख्यान नोट्स में शामिल नहीं किया जा रहा है।

मेरी सलाह (अनुभव से) पृष्ठभूमि ज्ञान की मात्रा और चिह्नित प्रोग्रामिंग असाइनमेंट की "चुनौती" को कम रखने का प्रयास करना है।

वैकल्पिक अभ्यासों के लिए दिलचस्प समस्याएं सेट करना एक उचित विचार है, हालांकि छात्रों को चेतावनी देना महत्वपूर्ण है कि अन्य महत्वपूर्ण कार्यों के खर्च पर उन पर समय बिताना न पड़े।

+0

मैं निश्चित रूप से सहमत हूं, और देख रहा हूं असाइनमेंट को कम और अपेक्षाकृत सरल रखें - लेकिन आशा है कि मीठा भी। :) मुझे अतीत में एक ही पाठ्यक्रम (एक शिक्षण सहायक भूमिका में) के लिए कुछ असाइनमेंट बनाने का अवसर मिला है। कुछ ने अच्छी तरह से काम किया, और वास्तव में कुछ लोगों ने वर्णन किया - जैसे मजेदार और रोचक, लेकिन छात्रों के लिए बहुत लंबा और जटिल। फिर भी, मैं कुछ रत्न ढूंढने की उम्मीद कर रहा हूं जो अभी भी मजेदार होने के दौरान समझने और पूरा करने के लिए काफी सरल हो सकते हैं। निश्चित रूप से, मैं आपके उत्तर का सम्मान करता हूं और चीजों को सरल रखने के लिए कदम उठाऊंगा। –

+1

गरीब अंग्रेजी वाले छात्र और जो छात्र अंतिम मिनटों में असाइनमेंट छोड़ते हैं उन्हें विश्वविद्यालय स्तर तक पहुंचने से पहले लंबे समय से फ़िल्टर किया जाना चाहिए था। अभी भी "मजेदार" स्तर के साथ उचित होने से आप असाइनमेंट की जांच करते समय और छात्रों के साथ बातचीत करते समय कम परेशानी देंगे। – Anonymous

+1

@ अज्ञात - दुर्भाग्यवश, यह वास्तव में काम करने का तरीका नहीं है। –

1

मैं एक प्रेरणा के रूप में निम्न पृष्ठों पर उपयोग किया गया है:

आप। प्रतियोगिताओं से कार्यों का भी उपयोग कर सकते हैं (example), लेकिन इस संभावना को आपके पक्ष में कुछ काम की आवश्यकता होगी - असाइनमेंट वितरित करने में निष्पक्षता सुनिश्चित करने के लिए (कुछ मुश्किल हो सकते हैं, और थाई पर केंद्रित नहीं हैं एनजीएस आपने उल्लेख किया है)।

0

विचार करने वाली एक बात, संभवतः छात्रों के पहले प्रोग्रामिंग पाठ्यक्रम के लिए नहीं, लेकिन बाद में, उन्हें फिक्सिंग के लिए पिछले असाइनमेंट (स्वयं या किसी और के) से कोड वापस सौंपना है। यदि आप ग़लत सबमिशन चुनते हैं, तो आदर्श रूप से सूक्ष्म त्रुटियों के साथ यह बेहतर काम करता है।

एक समान विचार है कि पिछली प्रयोगशाला से प्रारंभिक बिंदु के रूप में (सफलतापूर्वक पूरा) कोड का उपयोग करके प्रयोगशालाओं का अनुक्रम होना है। जब मैंने लीयू में प्रारंभिक प्रोग्रामिंग कोर्स (पिनके - प्रोग्रामिंग सिस्टम में प्रोग्रामिंग) किया था, तो बहुत सालों पहले, तह प्रयोगशाला के काम का एक सेगमेंट था (अनिवार्य रूप से) एक कैलेंडर को कार्यान्वित करने के लिए उबला हुआ, अमूर्त प्रकारों और एक्सेसर्स का उपयोग करके, फिर बाद में अमूर्त प्रकार के कार्यान्वयन को बदल रहा है।एक अच्छा इंटरफ़ेस प्रदान करने की आवश्यकता को दर्शाने के लिए काफी मूल्यवान है, आपको साइड-स्टेप की आवश्यकता नहीं है, अगर कुछ और नहीं (स्मृति से, मैं "परिवर्तन कार्यान्वयन" पर विचार करने के लिए एक या दो दिन खर्च कर रहा हूं, तो वास्तव में 15-20 मिनट बदल रहा है मेरे अमूर्त डेटा प्रकार, क्योंकि मैंने कड़ी मेहनत की है और इसके बारे में खुद को मनाने के लिए जरूरी है)।

0

पिग लैटिन।

क्या आपके छात्र ऐसे कोड लिखते हैं जो अंग्रेजी से पिग लैटिन तक एक टेक्स्ट स्ट्रीम का अनुवाद करता है। The rules काफी सरल हैं, लेकिन उन्हें कुछ रोचक विशेष मामलों की आवश्यकता होगी, खासकर जब विराम चिह्न और पूंजीकरण की बात आती है, उन्हें मूल स्कैनर/टोकनेज़र लिखने की आवश्यकता होती है।

इस तरह एक ठेठ वाक्य के साथ

:

Quietly, Anne walked into the forest. 

आप इस मिलना चाहिए:

ietly-quay, Anne-ay alked-way into-ay e-thay orest-fay. 

लेकिन आप मिलने की संभावना है:

uietly,-Qay Anne-ay alked-way into-ay e-thay orest.-fay 

जो खो गया है विराम चिह्न, अनुचित तरीके से क्यू और गलत पूंजीकरण रखा गया।

0

विचारों कि मैं छात्रों के साथ resonate करने के लिए मिल गया है के एक जोड़े:।

  1. भग्न कला - एक शानदार तरीका है क्योंकि छात्रों प्रक्रिया (पूर्व कल्पना कर सकते हैं प्रत्यावर्तन को पढ़ाने के लिए सिएरपिन्स्की त्रिकोण, महत्वाकांक्षी छात्रों के लिए L-systems)। आप context free art पर संदर्भ-मुक्त व्याकरण के साथ उत्पन्न कुछ सुंदर प्रभावशाली ग्राफिक्स देख सकते हैं।
  2. छवि मैनिपुलेशन - एक छवि में पिक्सेल मैनिपुलेशन फ़ंक्शंस मैप करके कार्यात्मक प्रोग्रामिंग सिखाएं (उदा। स्वैप कलर चैनल, गॉसियन ब्लर, ह्यू हेरिपुलेट ह्यू); यह ठेठ syntax tree-based generative art असाइनमेंट से कुछ हद तक सरल है।

प्रारंभिक स्तर के कंप्यूटर विज्ञान कक्षाओं को पढ़ाने के बारे में सबसे कठिन हिस्सा विशिष्ट वर्ग में प्रोग्रामिंग क्षमता में असमानता है। इसलिए, यदि आप असाइनमेंट बना सकते हैं जो कम सक्षम छात्रों के लिए काफी आसान हो सकता है और उन्नत छात्रों के लिए अधिक जटिल समस्याओं के लिए आसानी से विस्तारित किया जा सकता है (उदाहरण के लिए अतिरिक्त क्रेडिट के माध्यम से), तो यह मेरी राय में आदर्श है।

1

पैकेज असाइनमेंट 01;/* सुनिश्चित करें कि यह वर्ग पैकेज असाइनमेंट 01 में है। */

आयात java.util.ArrayList; आयात java.util.Arrays;

/** * इस वर्ग के तरीकों कि विभिन्न गणितीय कार्य करने का एक संग्रह है। विधियां सभी स्थिर हैं। यह * कक्षा असाइनमेंट # 1 का हिस्सा है। * * @author .......... * @version जून 15 2010 */ सार्वजनिक वर्ग MathLibrary {

/** 
* Computes and returns the mean (average) of the numbers in the list. 
* 
* If the input list is empty, the returned mean is 0.0. If the list contains illegal values, the behavior of this 
* method is undefined. 
* 
* @param list 
*   an ArrayList of double values 
* @return the mean of the values in the list 
*/ 
public static double mean (ArrayList<Double> list) 
{ 
    // Variables 

    Double sum = 0.0; 
    int arraySize = 0; 

    // Check for empty list 

    if (list.size()== 0) 
     return 0.0; 

    // Take sum 

    arraySize = list.size(); 
    for(int i = 0; i < arraySize; i++) 
    { 

     // Check for null Double 

     if(list.get(i) == null) 
     { 
      System.out.println("Mean Function: Array has null element at index: " + i + "."); 
      return -1.0; 
     } 

     // Add element 

     sum += list.get(i); 
    } 

    // Return average of results 

    return (sum/arraySize); 
    } 

/** 
* Computes and returns the median value of the numbers in the list. If the list has an odd number of elements, the 
* exact median value is returned. If the list has an even number of elements, the average of the middle two 
* elements is returned. 
* 
* If the input list is empty, the returned mean is 0.0. If the list contains illegal values, the behavior of this 
* method is undefined. 
* 
* The order of the elements in the input array may be changed by this method. 
* 
* @param arr 
*   an array of double values 
* @return the median of the values in the list 
*/ 
public static double median (double[] arr) 
{ 
    // Variables 

    double arraySize = 0; 
    double arrayMedian = 0.0; 
    double temp = 0.0; 
    boolean unsorted = true; 

    // Check for empty array 

    arraySize = arr.length; 
    if (arraySize == 0.0) 
     return 0.0; 

    // Sort array 

    while(unsorted) 
    { 
     unsorted = false; 
     for(int i=0; i < arraySize - 1; i++) 
     { 
      if(arr[i] > arr[i+1]) 
      { 
       unsorted = true; 
       temp = arr[i + 1]; 
       arr[i+1] = arr[i]; 
       arr[i] = temp; 
      } 
     } 
    } 

    // Find median 

    if((arraySize % 2) == 0) 
    { 
     // Take average of two middle array indicies 

     arrayMedian = (arr[(int) (arraySize/2.0 - 0.5)] + arr[(int) (arraySize/2.0 + 0.5)])/2.0; 
    } else { 
     arrayMedian = arr[(int) (arraySize/2.0)]; 
    } 


    return arrayMedian; 
    } 

/** 
* Computes and returns the largest integer that divides (without remainder) both of the input integers (the 
* greatest common divisor). 
* 
* If either of the input integers is not positive, this method returns -1. 
* 
* @param a 
*   any positive integer 
* @param b 
*   any positive integer 
* @return the greatest common divisor of a and b 
*/ 
public static int gcd (int a, int b) 
{ 
    int gcd = 1; 
    int minimum; 

    // Check for (a || b) < 0 

    if ((a < 0) || (b < 0)) 
     return -1; 
    if ((a == 0) || (b == 0)) 
     return 0; 

    // Compute half the minimum(a,b) 

    minimum = Math.min(a,b); 

    // For each number below half the minimum of the two check for divisibility 

    for(int i = 1; i <= minimum; i++) // zero case is already accounted for 
    { 
     // Check for divisibility 

     if(((a % i) == 0) && ((b % i) == 0)) 
     { 
     gcd = i; 
     } 
    } 

    return gcd; 
} 

/** 
* Computes and returns the smallest integer that can be divided by (without remainder) both of the input integers 
* (the least common multiple). 
* 
* 
* If either of the input integers is not positive, this method returns -1. If the least common multiple exceeds the 
* maximum possible integer value, the behavior of this method is undefined. 
* 
* @param a 
*   any positive integer 
* @param b 
*   any positive integer 
* @return the least common multiple of a and b 
*/ 
public static int lcm (int a, int b) 
{ 
    // Variables 

    int lcm = 0; 

    // Check for negative numbers 

    if((a < 0) || (b < 0)) 
     return -1; 

    // Use gcd to get lcm 

    lcm = (a * b)/gcd(a,b); 

    return lcm; 
    } 

/** 
* Given a number n, this method computes and returns the smallest prime number larger than n. 
* 
* If the input integer is not positive, this method returns 2. If the next prime number exceeds the maximum 
* possible integer value, the behavior of this method is undefined. 
* 
* @param n 
*   an integer 
* @return the smallest prime number larger than n 
*/ 
private static boolean isPrime(int n) 

{ 

if(n == 2 || n == 3) 
{ 
    return true; 
} 

if(n == 1 || n % 2 == 0) 
{ 
    return false; 
} 
for(int i = 3; i * i <= n; i += 2) 

if(n % i == 0) 
{ 
    return false; 
} 


return true; 

} 

public static int nextPrime(int n) 
{ 
    if (n<0) 
{ 
    return 2; //if n is not positive. 
} 
    int value = n; 
    if (n == 2) 
    value = 3; //finds the next prime number. 
    else 
    { 
    do 
    { 
     value += 1; 
    } while (!isPrime(value)); 
    } 
    return value; //displays the next prime number. 
} 

}

0

एक काम मैं प्यार से जब याद मुझे लगता है कि विश्वविद्यालय में अपने शुरुआती दिनों में वापस एक कार्य था जो हमें जीयूआई के बारे में सिखाने के लिए तैयार किया गया था। हमें एक वेब ब्राउज़र लागू करने के लिए कहा गया था।

वेब सामग्री के वास्तविक प्रदर्शन विशेष रूप से महत्वपूर्ण नहीं था - हम एक स्विंग वेब दृश्य का उपयोग करने के लिए प्रोत्साहित किया गया है - यह कार्यक्षमता जो इस समर्थित बारे में अधिक था:

  • एक यूआरएल बार
  • इतिहास
  • आगे और पीछे
  • एक मुख पृष्ठ
  • की स्थापना को बनाए रखने के बुकमार्क/पसंदीदा
  • टैब किए browsi एनजी
  • आदि

काम आप आजादी इनमें से किसी भी संयोजन का चयन करने के, आप कम से कम एक निर्धारित संख्या किया था प्रदान की दे दी है। इसने वास्तव में उत्सुक लोगों को पूरी तरह से सभी सुविधाओं को लागू करने की इजाजत दी, यदि वे चाहते थे, और किसी भी व्यक्ति को जो न्यूनतम रूप से न्यूनतम लागू करने के लिए पहुंचाया गया था।

कुछ और कार्य थे जो वर्षों से इसी तरह से संरचित किए गए थे और वे हमेशा अच्छी तरह से नीचे चला गया। आप आश्चर्यचकित होंगे कि छात्र कितनी बार अतिरिक्त मील जाएंगे और आवश्यकतानुसार अधिक करेंगे। ओपन, GUIs, वेबसाइटों आदि किसी भी कमांड लाइन आधारित प्रोग्राम मज़ा के रूप में नहीं थे:


अंगूठे का एक सामान्य नियम के रूप में, बातें अपने आप को और मेरे coursemates सबसे आकर्षक और अधिक दृश्य थे खोजने के लिए लग रहा था।

शायद जैसे ही आप एल्गोरिदम पर ध्यान केंद्रित कर रहे हैं, यह छात्रों को सॉर्टिंग/खोज एल्गोरिदम को देखने का एक अच्छा विचार हो सकता है। ग्राफिक्स ढांचे के बारे में उन्हें पढ़ाने के अलावा, यह एल्गोरिदम को देखने में मदद करेगा और इसकी समझ को सीमेंट करेगा। आप डेटा संरचनाओं के कस्टम कार्यान्वयन के साथ एक ही काम कर सकते हैं।

इसकी कुंजी एक ग्राफिक्स फ्रेमवर्क ढूंढ जाएगी जो उचित रूप से सहज, अच्छी तरह से प्रलेखित, अच्छी तरह से उपयोग और अच्छी तरह से समर्थित है। असाइनमेंट की तुलना में और अधिक निराशाजनक नहीं था जिसने हमें उन प्रौद्योगिकियों का उपयोग करने के लिए मजबूर किया जो वास्तविक दुनिया में कोई भी वास्तव में उपयोग नहीं करता है। आप इस तकनीक को सीखने का सबसे कठिन हिस्सा नहीं सीखना चाहते हैं।

मुझे नहीं लगता कि यह एक बुरी बात है कि आप उन्हें एक ढांचे का उपयोग करने के लिए सिखा रहे हैं जिसे मॉड्यूल के दायरे से बाहर माना जा सकता है: नए ढांचे और पुस्तकालयों का उपयोग कैसे करना सीखना एक कौशल है जो स्वयं में एक कौशल है यदि आप एक प्रभावी सॉफ्टवेयर डेवलपर और विश्वविद्यालय बनने के लिए विकसित होते हैं तो इसे विकसित करने की आवश्यकता नहीं है।

संबंधित मुद्दे