>> [समीक्षा: प्रश्नोत्तरी 1]
[अली Nahm, Oreoluwa Barbarinsa, लुकास Freitas, रोब बोडेन] [हार्वर्ड विश्वविद्यालय]
[यह CS50 है.] [CS50.TV]
[लुकास Freitas] हर किसी का स्वागत है. इस क्विज 1 के लिए समीक्षा की है.
बस एक त्याग के रूप में, यह है - मेरा मतलब है, हम कवर करने की कोशिश करने जा रहे हैं
संभव है, लेकिन जितना सामग्री है कि इसका मतलब यह नहीं है कि
हम प्रश्नोत्तरी 1 में हो सकता है कि चीजों के सभी को कवर करने जा रहे हैं.
तो आप भी एक व्याख्यान में देखो, वर्गों, आप कर सकते हैं कि सब कुछ ले सुनिश्चित करें.
प्रश्नोत्तरी 1 बुधवार, अगले बुधवार को होने जा रहा है.
तो अध्ययन करने के लिए सुनिश्चित करें. यह पहली प्रश्नोत्तरी तरह, बहुत ज्यादा, होने जा रहा है
इसके स्वरूप के बारे में है, लेकिन यह शायद बहुत कठिन होने जा रहा है.
मैं 50 ले लिया, जब कम से कम पिछले साल, मैं यह बहुत कठिन था.
तो एक बहुत अध्ययन करते हैं.
>> मैं डेटा संरचनाओं को कवर करने के लिए जा रहा हूँ और Huffman कोडन.
यह बहुत से लोगों को जटिल लगता है कि कुछ है
लेकिन मैं इसे यथासंभव आसान बनाने के लिए प्रयास करने के लिए जा रहा हूँ.
सबसे पहले, हम क्या तुम लोगों को प्रश्नोत्तरी 1 के लिए जानना चाहता हूँ करने के लिए है
मैं पेश करने के लिए जा रहा हूँ कि डेटा संरचनाओं में से प्रत्येक के वैचारिक वर्णन समझते हैं.
कि तुम नहीं है इसका मतलब है कि वास्तव में
अपनी प्रश्नोत्तरी 1 में एक हैश तालिका को लागू करने.
हम आपके पूरे हैश तालिका को लागू नहीं करना चाहते हैं, शायद हम कोशिश करेंगे
आप कुछ कार्यों को लागू करने के लिए,
सबसे आम आपरेशन, लेकिन हम आप सब कुछ को लागू करने के लिए नहीं जा रहे हैं.
तो यह है कि आप प्रत्येक डेटा संरचना के पीछे की अवधारणा समझ ज़रूरी है
और भी तुम सी में कोड करने में सक्षम हैं,
वे एक आंकड़ा संरचना के लिए सिर्फ सबसे आम आपरेशन.
और यह भी, संकेत और structs की समीक्षा कर सकेंगे
वे इन आंकड़ों संरचनाओं में एक बहुत दिखाई देते हैं.
>> सबसे पहले, सूचियों से जुड़े. लिंक सूचियों वास्तव में सरणियों के समान हैं,
लेकिन एक लिंक की गई सूची और एक सरणी के बीच अंतर,
सबसे पहले, एक लिंक की गई सूची एक बहुत लचीला आकार की है कि है
सरणियों में आप सरणी के लिए एक बहुत बड़े आकार का चयन करने के लिए या तो है, जबकि
तो आप, आप उस सरणी में अपने सभी डेटा स्टोर करने में सक्षम होने के लिए जा रहे हैं कि पता
या आप सरणी के एक लचीला लंबाई को malloc का उपयोग किया है.
लिंक सूचियों में यह सिर्फ अधिक तत्व प्राप्त करने के लिए बहुत आसान है,
लिंक सूची में अधिक तत्वों डाल या तत्वों को दूर.
और वास्तव में, आप लिंक की गई सूची हल किया जाना नहीं चाहते हैं,
आप खोज और लगातार समय में तत्वों को दूर कर सकते हैं,
इसलिए हे (1) समय है, तो यह बहुत सुविधाजनक है.
तुम बस, नोड्स हमेशा malloc को याद करने के लिए सावधान और मुक्त होना जरूरी
यदि आप नहीं करते हैं, तो आप स्मृति लीक होगा सिर्फ इसलिए.
तो लिंक सूचियों - एक नोड की परिभाषा सिर्फ हम सही वहाँ क्या है की तरह है.
मैं int n रखा है, लेकिन जब आप किसी से डेटा स्टोर कर सकते हैं.
आप एक स्ट्रिंग संग्रहीत करना चाहते हैं तो, यह ठीक है.
आप एक संरचना स्टोर करना चाहते हैं, यह जो आप चाहते हैं, एक डबल ठीक है.
मैं बस यहाँ उदाहरण के लिए int n डाल दिया.
और आप अगले नोड के लिए एक संकेत है.
तो, मूलतः, एक लिंक की गई सूची में कुछ डेटा है, और तब यह अगले नोड के लिए अंक.
यह लिंक की गई सूची में अंतिम तत्व है, यह अशक्त करने के लिए बात करने के लिए जा रहा है.
तो यह एक लिंक की गई सूची का एक उदाहरण है.
>> ठीक है, तो अब मैं एक लिंक की गई सूची में एक तत्व सम्मिलित करना चाहते हैं, तो हम क्या करना चाहिए देखते हैं.
सबसे पहले, एक समारोह डालने प्रकार शून्य से होगा
मैं कुछ भी वापस नहीं करना चाहते क्योंकि.
और मैं एक तर्क के रूप में एक पूर्णांक ले जा रहा हूँ,
मैं मैं सम्मिलित करने के लिए चाहते हैं पता करना चाहते हैं.
तो मुझे क्या करना चाहिए पहली बात क्या है? खैर, मैं newnode पर malloc चाहिए,
इसलिए कि पहली पंक्ति है.
मैं सिर्फ एक लिंक की गई सूची में डालने के लिए एक नया नोड पैदा कर रहा हूँ.
तो मैं क्या कर सकता है? ठीक है, हम जानते हैं कि लिंक सूचियों के बारे में हमारी कार्यान्वयन में
कक्षा में, हम हमेशा एक वैश्विक चर के रूप में सिर रख दिया.
तो हम क्या कर सकते हैं सिर बदल जाता है.
मैं इस नए नोड नए प्रमुख हो कर सकते हैं,
और यह पिछले सिर को इंगित करने के लिए जा रहा है.
हम ऐसा कैसे कर सकते हैं? मुझे क्या करना है पहली बात
, मूल्य के लिए नए नोड में 'एन' बदल रहा है
समारोह के लिए पारित किया गया था.
फिर newnode अगले के सिर होने जा रहा है.
सिर newnode होने जा रहा है. तो यह बहुत आसान है.
एक नोड को हटाने के लिए, हम ऐसा कर सकते हैं -
हम ऐसा कर सकता एक तरीका यह कहना है,
ठीक है, मैं इसे हटाना चाहता था, उदाहरण के लिए, 3,
क्या मैं कर सकता बस पिछले नोड बिंदु है
3 के अगले नोड के लिए.
इसलिए मैं ऐसे ही कुछ करना होगा.
लेकिन यह है कि कर के साथ समस्या क्या है?
मैं एक स्मृति रिसाव है, इसलिए मैं अब और नंबर 3 के लिए पहुँच नहीं है.
उस के साथ समस्या यह है कि मैं उस नोड मुक्त करने के लिए सक्षम होने के लिए नहीं जा रहा हूँ कि है.
मैं स्मृति रिसाव और (दुर्बोध) मुझसे नफरत करने जा रहा है किया जा रहा हूँ.
तो बजाय कर रही है कि, मैं शायद एक अस्थायी सूचक होना चाहिए.
तो मैं अस्थायी डाल दिया. यह मैं इसे हटाना चाहते हैं कि नोड के लिए बात करने के लिए जा रहा है.
और फिर मैं अगले नोड के लिए बात करने के लिए पिछले नोड्स स्थानांतरित कर सकते हैं
मैं इसे हटाना चाहते हैं कि नोड की.
और अंत में, मैं सूचक मुक्त कर सकते हैं.
मुझे लगता है मैं अभी भी वहीं बनाया कि सूचक मुक्त करने के लिए है?
मैं करने के लिए, सिर्फ इसलिए नहीं है -
फर्क इस नोड malloc का उपयोग कर बनाया गया है,
यह सिर्फ एक ढेर में एक नल स्विच के रूप में घोषित किया गया था, इसलिए जब तक यह ढेर में है.
इसलिए मैं इसे मुक्त करने की जरूरत नहीं है.
>> ठीक है. तो अब के ढेर के बारे में बात करते हैं.
ढेर बहुत स्पष्ट हैं.
हम सिर्फ सरणियों का उपयोग कर वर्ग में ढेर और कतार किया था,
लेकिन आप परिचित होना चाहिए - सिर्फ जागरूक होना
तुम भी रूप में अच्छी तरह से जुड़ा हुआ सूचियों का उपयोग कतारों में ढेर कर सकते हैं.
आप एक सरणी है, तो क्या एक ढेर होगा?
एक ढेर, सबसे पहले, एक आकार के लिए होगा.
आप अभी है कि ढेर के आकार क्या है की दुकान है.
और तुम भी, संख्या के इस मामले में, एक सरणी होगा
अगर आप चाहते हैं लेकिन, यह एक सरणी हो सकता है
तार की, संरचना की एक सरणी, आप संग्रहीत करना चाहते हैं कि कुछ भी.
ढेर के बारे में: एक ढेर और एक लिंक की गई सूची के बीच का अंतर
ढेर में आप केवल ढेर में डाल दिया गया था कि पिछले तत्व के लिए उपयोग किया है.
यह पहली बार बाहर, पिछले में कहा जाता है.
आप ट्रे की हो चुकी है, जैसे
आप ढेर के शीर्ष पर एक ट्रे रखा है,
आप अन्य ट्रे का उपयोग किया है पहली बार है कि ट्रे से हटा दिया है.
यह ढेर के साथ एक ही बात है.
मैं, उदाहरण के लिए, एक ढेर करने के लिए एक तत्व जोड़ने के लिए चाहते हैं, तो मुझे क्या करना चाहिए?
यह पुश कहा जाता है, और यह बहुत सीधा है है.
तुम्हें क्या करना है पहली बात की जांच है अगर ढेर का आकार
अधिक से अधिक या ढेर की क्षमता के बराबर नहीं है.
आप पहले से ही पूरी क्षमता पर कर रहे हैं, तो आपको कुछ और नहीं जोड़ सकते हैं.
नहीं तो, आप बस पर ढेर करने के तत्व जोड़ दिया है.
और अंत में, आकार बढ़त. इसलिए यह बहुत सीधा है.
तो मैं बस संख्या 2 जोड़ें.
मैं पॉप करना चाहते हैं, जो मैं निकालना चाहते हैं, इसका मतलब है
जोड़ा और तत्व का मान दिया गया था कि पिछले तत्व,
मैं जाँच करने के लिए पहली बात पर ढेर खाली नहीं है.
यह खाली है, तो मैं कुछ भी वापस नहीं कर सकते हैं.
उस मामले में, मैं -1 लौट रहा हूँ.
अन्यथा, मैं कल्पना के आकार घटती जा रहा हूँ,
और नंबर (s.size) वापसी.
क्यों मैं आकार घटती है और फिर s.size लौटे?
इस मामले में, कल्पना आकार 4 है, क्योंकि यह है
और मैं चौथे तत्व लौटना चाहते हैं, है ना?
लेकिन चौथे तत्व के सूचकांक क्या है? तीन.
मैं आकार है के बाद से - 3 होने जा रहा है, मैं बस (s.size) s.numbers लौट सकते हैं
यह 3 है क्योंकि. तो यह सिर्फ सूचकांक है.
>> अभी कतार. कतारों बहुत ज्यादा एक ही बात कर रहे हैं.
फर्क सिर्फ इतना है कि बजाय आखिरी में होने की, पहली बार बाहर है
जब आप पहली बार बाहर, में पहली बार है.
आप एक संगीत कार्यक्रम में जाने के लिए इंतजार कर रहे हैं शायद अगर,
आप के बजाय एक पंक्ति का ढेर था अगर आप खुश नहीं होगा.
आने के लिए अंतिम व्यक्ति होने के नाते संगीत कार्यक्रम में प्रवेश करने वाले पहले व्यक्ति होंगे.
तुम्हें शायद खुश नहीं होगा.
कतार में, में पाने के लिए पहले व्यक्ति को भी बाहर निकलने के लिए पहला व्यक्ति है.
तो एक पंक्ति की परिभाषा में, सरणी में आकार होने के अलावा,
आप भी ढेर के सिर के सूचकांक है जो सिर, के लिए है.
अब ठीक पहले तत्व तो.
Enqueue के ढेर के लिए धक्का के रूप में एक ही बात है.
तुम बहुत भोली थे, तुम बस कहना होगा,
मैं धक्का के लिए किया था के रूप में अच्छी तरह से, मैं अभी बिल्कुल एक ही बात कर सकते हैं.
यह क्षमता से परे नहीं है अगर मैं सिर्फ देख सकते हैं.
अगर ऐसा है, मैं नहीं तो मैं सिर्फ नए मूल्य निर्यात कर सकते हैं, वापसी झूठी
और फिर आकार बढ़त.
लेकिन क्यों यह गलत है?
चलो इस उदाहरण देखते हैं.
मैं सामान का एक गुच्छा enqueue करने की कोशिश कर रहा हूँ,
और फिर मैं विपंक्ति और enqueue करने जा रहा हूँ.
वहाँ आदेशों की एक बहुत है, लेकिन यह बहुत आसान है.
मैं 5 enqueue, तो 5 जोड़ने के लिए जा रहा है, और उसके बाद 7, हूँ
1, 4, 6, और फिर मैं कुछ विपंक्ति करना चाहते हैं,
जो मैं पहले तत्व को दूर करने के लिए जा रहा हूँ कि इसका मतलब है.
तो मैं सही, नंबर 3 को दूर करने के लिए जा रहा हूँ?
पहला तत्व. ठीक है.
मैं कुछ और enqueue करने की कोशिश अब, क्या होने वाला है?
मेरे कार्यान्वयन के अनुसार,
मैं सूचकांक q.size में अगले नंबर डालने के लिए जा रहा था.
इस मामले में, आकार 8 है,
तो इंडेक्स 8 अंतिम स्थिति में यहीं होगा.
मैं यहीं 1 enqueue करने की कोशिश करते हैं, तो मैं अंतिम स्थिति overwriting की जाएगी
पूरी तरह से गलत है जो संख्या 1, के लिए.
मुझे क्या करना चाहते आसपास लपेटो और पहले की स्थिति के लिए जाना है.
शायद तुम सिर्फ ठीक है, मैं सिर्फ जाँच करने के लिए कहेंगे,
मैं वास्तव में वहाँ कुछ डाल सकते हैं.
यदि नहीं, मैं सिर्फ ओह, नई पूरी क्षमता का कहना है,
वास्तव में क्षमता है - 1, और आप वहाँ एक तत्व नहीं डाल सकते हैं.
लेकिन समस्या क्या है? समस्या यह है कि मैं बस यहीं सब कुछ विपंक्ति अगर
और फिर मैं कुछ और जोड़ने की कोशिश, यह अभी कहना होगा,
खैर, आप 0 है जो पूरी क्षमता, पर थे.
तो अपने कतार में चला गया है.
आप के आसपास लपेटो करने के लिए है, और चारों ओर लपेटकर का एक तरीका
आप दूरदर्शी और अन्य psets में सीखा लड़के माड उपयोग कर रहा था कि.
आप q.size + q.head करना होगा समझने के लिए क्यों घर पर यह कोशिश कर सकते हैं
आधुनिक विपणन क्षमता है, लेकिन आप यहीं की जांच,
हम यह काम करता है देख सकते हैं.
इसलिए पिछले उदाहरण में, 8 q.size था
यह यहां सरणी की इस स्थिति थी क्योंकि और सिर, 1 था.
तो यह 1 + 8, 9 हो जाएगा. मॉड क्षमता 9 0 होगा.
यह सूचकांक 0 के लिए जाना होगा. हम सही स्थिति में हो जाएगा.
और फिर घर में कतार कोशिश.
कुछ महत्वपूर्ण बातें: एक ढेर और एक कतार के बीच के अंतर को समझने की कोशिश करो.
घर में, enqueue, विपंक्ति, धक्का और पॉप लागू करने के साथ बहुत परिचित पाने के लिए प्रयास करें.
आप उनमें से प्रत्येक का प्रयोग करेंगे और जब भी समझते हैं.
>> तो चलो Pokemons के एक समूह के साथ 10 सेकंड के लिए आराम करते हैं.
और अब वापस आ गया डेटा संरचनाओं के लिए चलते हैं.
टेबल हैश. बहुत सारे लोग हैश तालिकाओं के डर गए थे.
समस्या 6 सेट में, वर्तनी परीक्षक.
हैश तालिका और कोशिश करता है, बहुत से लोगों को उनमें से डर लगता है.
उन्होंने कहा कि वे समझने के लिए इतनी मेहनत कर रहे हैं. हाँ?
[लूटने बोडेन] समस्या 5 सेट. >> समस्या हाँ, 5 सेट. धन्यवाद लूटना.
हाँ. छह आवेश एन 'पफ, हाँ था.
समस्या परीक्षक वर्तनी गया था 5 सेट, और आप एक हैश तालिका या एक कोशिश या तो इस्तेमाल किया था.
बहुत सारे लोग वे समझने के लिए सुपर कठिन थे कि सोचा था, लेकिन वे वास्तव में बहुत आसान कर रहे हैं.
एक हैश तालिका असल में, क्या है? एक हैश तालिका लिंक सूचियों की एक सरणी है.
एक सरणी और एक हैश तालिका के बीच फर्क सिर्फ इतना है
हैश तालिका में आप एक हैश समारोह में कहा जाता है कि कुछ है.
एक हैश कार्य क्या है?
तुम लोग यहां पढ़ सकते हैं, तो मैं नहीं जानता.
यह एक हैश तालिका का एक उदाहरण है.
तो अगर आप 31 तत्वों के साथ एक सरणी है कि देख सकते हैं.
और क्या हम एक हैश तालिका में करना एक हैश समारोह है है
एक चाबी है कि अनुवाद करने के लिए जा रहा है, हर एक सूचकांक के लिए int.
तो, उदाहरण के लिए, मैं बी हैरिसन के लिए चयन करना चाहते हैं,
मैं अपने हैश कार्यों में बी हैरिसन रखा जाएगा,
और हैश समारोह 24 लौटेंगे.
इसलिए मुझे लगता है मैं 24 में बी हैरिसन संग्रहीत करना चाहते हैं कि पता है.
तो यह है कि सिर्फ एक सरणी होने और एक हैश तालिका होने के बीच अंतर है.
हैश तालिका में आपको बताने जा रहा है कि एक समारोह होगा
जहां आप संग्रहीत करना चाहते हैं कि डेटा स्टोर करने के लिए.
हैश समारोह के लिए, आप एक हैश समारोह के लिए देखना चाहता हूँ
कि नियतात्मक और अच्छी तरह से वितरित की है.
आप यहाँ देख सकते हैं, आपको मैं दुकान के लिए चाहते थे कि डेटा का एक बहुत वास्तव में 19 थी कि देखते हैं
बजाय सभी मुक्त थे, जो 31 और 30 और 29 का उपयोग कर की.
इसलिए मुझे लगता है कि इस्तेमाल किया हैश समारोह बहुत अच्छी तरह से वितरित नहीं किया गया था.
हम अच्छी तरह से वितरित कहना है, यह हम है चाहता हूँ कि इसका मतलब
मोटे तौर पर, कम से कम 1 या में से प्रत्येक के लिए 2 -
जैसे, सरणियों में सूचकांकों में से प्रत्येक के लिए 1 या 2 के एक अंतर.
तुम्हें पता है, मोटे तौर पर, सरणी में प्रत्येक लिंक की गई सूची में तत्वों की एक ही नंबर है चाहता हूँ.
और यह हैश तालिका में मान्य है हैश तालिकाओं के रूप में देखने के लिए जाँच अगर आसान है.
>> फिर पेड़. यह एक पेड़ है.
कंप्यूटर विज्ञान में पेड़ किसी कारण के लिए उल्टा कर रहे हैं.
तो तुम्हें यहीं पेड़ की जड़ और फिर छोड़ दिया है.
तुम सिर्फ माता पिता और बच्चे के लिए नामकरण पता होना चाहिए.
प्रत्येक नोड माता पिता के नीचे हैं कि नोड्स रहे हैं, जो अपने बच्चों की है.
तो, उदाहरण के लिए, 2, वहीं 3 के लिए और दूसरे बच्चे के लिए माता - पिता होने जा रहा है
3 1 के लिए माता - पिता और कर रहे हैं कि अन्य बच्चों को होने जा रहा है, जबकि.
और 1 इतने पर 3 के बच्चे होने जा रहा है, और है.
हम और अधिक दिलचस्प कुछ, एक द्विआधारी खोज वृक्ष कहा जाता है
जिसमें एक नोड के अधिकार पर सभी मान
यहीं, सही पर होने जा रहे हैं - सही पर,
जड़ में तत्व से अधिक होने जा रहे हैं.
सही पर तो मैं यहीं संख्या 5 है, तो सभी तत्वों
5 से अधिक होने जा रहा है, और बाईं तरफ जाते हैं
सभी तत्वों को 5 से भी कम होने जा रहे हैं.
क्यों यह उपयोगी है?
खैर, मैं नंबर 7 यहाँ है की जाँच करना चाहते हैं, उदाहरण के लिए,
मैं सिर्फ पहले 5 पर जाएँ और मैं यह देखने के लिए जा रहा हूँ, 5 से 7 अधिक से अधिक या कम है?
यह अधिक से अधिक है, तो मैं इसे पेड़ के अधिकार पर होना करने के लिए जा रहा है.
तो मैं देखने के लिए बहुत कम सामान है.
एक द्विआधारी खोज पेड़, नोड के कार्यान्वयन में, मैं सिर्फ जानकारी है करने के लिए जा रहा हूँ
इसलिए int n, तुम भी एक स्ट्रिंग हो सकता था
या आप चाहते थे कि कुछ भी.
आप बस अधिक से अधिक है क्या परिभाषित करने पर सावधान रहना होगा, कम है.
तो तुम तार था, उदाहरण के लिए, आप को परिभाषित कर सकता
सही पर उन सभी चीजों को बड़ा लंबाई करने जा रहे हैं कि,
बाईं कम लंबाई के लिए जा रहे हैं, तो यह आप पर निर्भर सच है.
>> मैं कैसे BST खोजने के लिए लागू कर सकते हैं?
हम क्या करना होगा पहली बात रूट नल है अगर जाँच है.
यह शून्य है, यह बात नहीं है कि इसका मतलब है
आप भी एक पेड़, सही नहीं है क्योंकि?
तो मैं वापसी झूठी.
अन्यथा, मैं संख्या अधिक है, तो जाँच करने के लिए जा रहा हूँ
जड़ में मूल्य से अधिक है.
मैं सही पर तत्व खोजने की कोशिश करने जा रहा हूँ
पेड़ की.
तुम्हें पता है मैं यहाँ recursion का उपयोग कर रहा हूँ कि देखते हैं.
यह कम है और फिर, अगर मैं छोड़ दिया पर देखने के लिए जा रहा हूँ.
और अंत में, अन्यथा, यह अधिक से अधिक कम या नहीं अगर नहीं है,
यह यह मान ही है कि इसका मतलब है.
इसलिए मैं सिर्फ सच वापसी.
तुम्हें पता है मैं अगर, अगर, अगर प्रयोग किया जाता है कि यहाँ देख सकते हैं.
और याद रखो, प्रश्नोत्तरी 0 में, हम, अगर अगर, अगर था कि एक समस्या थी
और आप अक्षमता को खोजने वाले थे,
और अक्षमता अगर आप इस्तेमाल किया गया था.
यदि आप किसी और, अगर नहीं तो, अगर इस्तेमाल किया, और कुछ किया जाना चाहिए था.
अगर और अगर नहीं तो और बाकी यहाँ तो, मैं किसी और का उपयोग करना चाहिए?
क्या किसी - हाँ?
[छात्र बोल, सुनाई]
यह तो एकदम सही है. तो वह, यह बात नहीं है कि कह रहा है
सिर्फ इसलिए कि हम पहले था कि अक्षमता
था कि, कुछ हालत संतुष्ट था हो सकता है अगर, क्योंकि
तो तुम एक काम किया है, लेकिन फिर आप अन्य शर्तों के सभी जांच करने के लिए जा रहे थे.
लेकिन इस मामले में, यह सही दूर लौटे, तो यह बात नहीं है.
तो अगर आप किसी और का उपयोग करने के लिए नहीं है.
>> और अंत में, की कोशिश करता है के बारे में बात करते हैं,
जो सभी की पसंदीदा है.
एक कोशिश सरणियों का एक पेड़ है.
यह मान देखने के लिए बहुत तेजी से है, लेकिन यह स्मृति का एक बहुत का उपयोग करता है.
और यह शब्द फिल्टर करने के लिए आमतौर पर है, इसलिए जब आप
अपने फोन में एक फोन की किताब की तरह है, उदाहरण के लिए, मैं नहीं जानता, लागू करना चाहते हैं
और तुम बी टाइप करने में सक्षम होना चाहता हूँ
और सिर्फ बी हैं, जो लोगों के नाम है
यह उदाहरण के लिए, एक कोशिश का उपयोग कर लागू करने के लिए बहुत आसान है.
कैसे आप एक कोशिश में एक नोड परिभाषित करते हैं?
तुम बस is_word जा रहा है कि एक bool किया है.
यही कारण है, कि नोड से पहले सभी अक्षरों का उपयोग प्रतिनिधित्व करता है कि
आप एक शब्द बनाने के लिए सक्षम थे,
और फिर आप नोड्स के लिए संकेत की एक सरणी होगा.
आपको हम एक पैरेंट नोड की सरणी, तो नोड * सरणी है कि देख सकते हैं? हाँ?
तो चलो काम करेंगे कैसे देखते हैं. जादू की जांच के लिए,
हम 27 तत्वों की एक सरणी है,
हम सभी पत्र प्लस apostrophe किया है.
मैं बोर्ड पर लिखने में सक्षम होना चाहता हूँ, क्योंकि यहां पहले मैं सिर्फ 2 उपयोग करने के लिए जा रहा हूँ.
ठीक है. तो यह एक कोशिश का एक उदाहरण है.
मैं सिर्फ पहला नोड को परिभाषित करते हैं, तो मैं 2 तत्वों की एक सरणी होगा
नल करने के लिए 2 संकेत दिए गए हैं, इसलिए मैं सिर्फ 'ए' और 'बी' में डाल दिया है.
और मैं is_word का कहना है कि एक bool किया जा रहा हूँ.
यह पहली बार एक के लिए झूठी होने जा रहा है,
बस, क्योंकि इससे पहले कि आप किसी भी अक्षर नहीं है.
तो एक खाली शब्द एक शब्द नहीं है. तो यह गलत है.
मैं इस शब्दकोश में 'एक' जोड़ना चाहते हैं, तो मुझे क्या करना होगा?
मैं सिर्फ 'ए' के ​​लिए एक नया नोड malloc करना होगा,
और फिर सच करने के लिए अपने शब्द जोड़ें.
तो यह सिर्फ 'ए' सच होने जा रहा है होने कि प्रतिनिधित्व करता है. भावना करें?
मैं 'बा' को जोड़ने के लिए चाहते हैं, तो मैं 'बी' के लिए malloc 1 के लिए होगा,
और फिर मैं, गलत पर बूलियन स्थापित करने के लिए जा रहा हूँ
अपने आप में 'बी' एक शब्द नहीं है.
तो मैं एक और 'ए' के ​​लिए एक, तो 'बा' malloc के लिए जा रहा हूँ,
और फिर मैं इसे सच करने के लिए एक शब्द है स्थापित करने के लिए जा रहा हूँ.
'बा' एक शब्द है.
मैं देखना चाहते हैं और फिर 'बी', इस शब्दकोश में है
मैं सिर्फ पहले एक, 'बी' में जा सकते हैं. मैं नीचे जाना, और मैं शब्द है पर देखने के लिए, और यह गलत कहते हैं.
तो यह एक शब्द नहीं है. मैं 'बा' की जाँच करना चाहते हैं,
मैं पहली बार एक, 'ख' के लिए जाना है, और फिर 'ए' के ​​लिए जाना है, और मैं सच देखना है, तो यह एक शब्द है. भावना करें?
बहुत सारे लोग कोशिश करता है द्वारा उलझन में हैं. नहीं?
>> अंत में, Huffman कोडन. Huffman कोडन बहुत उपयोगी है
स्मृति बचाने और पाठ फ़ाइलों को संपीड़ित करने के लिए,
सिर्फ इसलिए कि आप उदाहरण के लिए, 'ए' और 'ई' का उपयोग आमतौर पर,
तुम लोग ज्यादा के रूप में 'क्यू' या 'जेड' का उपयोग अगर अपने दस्तावेज़ों में, लेकिन मैं नहीं जानता.
हर एक चरित्र के लिए सिर्फ 1 बाइट के बाद,
हर एक - हम ASCII तालिका में है कि 256 अक्षर बहुत इष्टतम नहीं है,
आप बहुत अधिक उपयोग करने वाले कुछ अक्षर हैं, सिर्फ इसलिए कि
तो आप शायद उन लोगों के लिए कम स्मृति का उपयोग करना चाहिए.
कैसे मैं Huffman कोडन प्रयोग करते हैं?
हम एक Huffman वृक्ष क्या करना है.
एक Huffman पेड़ नोड्स है
पत्र, 'सी', 'बी', 'एक' की तरह होने जा रहा है कि एक प्रतीक है कि,
आपके पास जो कुछ अक्षर, शब्द पाठ में दिखाई देता है कि आवृत्ति है कि एक आवृत्ति,
यदि आप के लिए Huffman वृक्ष बनाने थे कि
और फिर Huffman वृक्ष के बाईं ओर इंगित करने के लिए जा रहा है कि एक नोड
और सही करने के लिए बात करने के लिए जा रहा है कि एक और नोड. तो बस एक पेड़ की तरह.
कैसे आप एक Huffman वृक्ष का निर्माण करते हैं?
तुम सबसे कम आवृत्तियों है कि 2 नोड्स लेने के लिए जा रहे हैं.
आप एक टाई है, तो आप 2 नोड्स लेने के लिए जा रहे हैं
साथ ही सबसे कम ASCII मूल्यों है कि.
तो फिर तुम उन 2 नोड्स के बाहर एक नए पेड़ बनाने के लिए जा रहे हैं
कि माता पिता के नोड में संयुक्त आवृत्ति किया जा रहा है.
और फिर तुम जंगल से 2 बच्चों को दूर करने के लिए जा रहे हैं
और माता - पिता के साथ बदलें.
और अगर आप आप ही जंगल में 1 पेड़ है जब तक कि दोहराने जा रहे हैं.
तो चलो आप ZAMYLA के लिए एक Huffman वृक्ष करना होगा कैसे देखते हैं.
आप सभी पत्र 'ए' के ​​लिए छोड़कर आवृत्ति 1 है कि यहाँ देख सकते हैं, आवृत्ति 2 है कि.
इसलिए मुझे लगता है मैं ASCII मूल्य और आवृत्ति के क्रम में डाल सभी पत्रों के लिए नोड्स बनाया.
मैं पहले वृक्ष बनाने के लिए चाहते हैं, तो यह 'एल' और 'एम' के साथ हो जाएगा.
तो यह यहाँ है. इस जोड़ी की आवृत्ति 2 होगा
यह 1 + 1 है क्योंकि, तो सबसे कम आवृत्तियों के साथ अगले 2 'वाई' और 'जेड' कर रहे हैं.
2 की एक आवृत्ति है - और फिर मैं जा रहा है उन सभी को है.
तो अगले एक के लिए सबसे कम ASCII मूल्य है कि लोगों को जो लोग कर रहे हैं?
'ए' और 'एल'. इसलिए मैं नई नोड बनाने,
और अंत में, यह 4 और 2 है, तो 2 बाईं तरफ होने जा रहा है.
और इस Huffman वृक्ष है.
मैं कुछ पाठ लिखना चाहते हैं तो अगर,
जैसे Huffman वृक्ष का उपयोग कर, पाठ में बदलने के लिए द्विआधारी में बहुत आसान है.
मैं बाईं ओर घूम रहा एक 0 और सही करने के लिए चलती है का कहना है कि यदि उदाहरण के लिए, एक है 1
क्या प्रतिनिधित्व करने के लिए जा रहा है?
तो जैसे 1, 1, ठीक है, तो सही,
और तब तो छोड़ दिया 0, एल होगा, और फिर 1, 0, 0.
तो 1, 0, इसलिए सिर्फ 1, 0, 'ए'.
और फिर 0, 1, ताकि 'जेड'.
और फिर 1, 0, 0 - नहीं.
0, 0 'वाई' हो, इतना आलसी जाएगा.
इसलिए मेरे लिए यह सब है, रोब पर लेने के लिए जा रहा है.
>> [रोब बोडेन] तो, सप्ताह 7 सामान.
हम वास्तव में तेजी से ऊपर जाने के लिए एक बहुत कुछ मिल गया.
Bitwise ऑपरेटरों, बफर अतिप्रवाह,
CS50 पुस्तकालय, तो HTML, HTTP, सीएसएस.
15 से 20 मिनट की तरह सभी में.
Bitwise ऑपरेटरों. आप जानना चाहते हैं कि उनमें से 6 कर रहे हैं.
बिटवाइस और, बिटवाइस या, XOR, छोड़ा पाली, सही बदलाव, और नहीं.
सही बदलाव और आप मुश्किल से सब पर व्याख्यान में देखा नहीं.
हम जल्दी से इसे यहाँ पर जायेंगे, लेकिन यह इन मौजूद है कि 6 जानते हैं कि अच्छा है.
बिटवाइस ऑपरेटरों आप + 4 3 है जब की तरह हैं याद रखें.
आप 3 और 4 के द्विआधारी के साथ काम नहीं कर रहे हैं.
बिटवाइस ऑपरेटरों के साथ आप वास्तव में संख्या 3 और 4 के व्यक्तिगत बिट्स के साथ काम कर रहे हैं.
>> तो हम कह देंगे कि पहले एक बिटवाइस, नहीं है
और यह सब होता है सभी बिट्स फ्लिप है.
तुम सी में यह लिख रहे हैं, तो यहाँ, आप यह लिख नहीं होगा
~ 11011 या जो कुछ भी रूप में, तुम, यह ~ 4 की तरह लिखना होगा
और फिर यह 4 की द्विआधारी प्रतिनिधित्व फ्लिप जाएगा.
तो यहाँ, 1 के लिए ~ कुछ बाइनरी संख्या के 1,101,101 बिल्कुल 0 के लिए सभी 1 के फ्लिप करने के लिए जा रहा है और सभी 0 की.
मैं वहाँ कहते हैं, इस के लगातार उपयोग,
हम कुछ संख्या के साथ आने के लिए चाहते हैं की तरह है और हम कुछ देर में यह देखेंगे, है
बिट्स के सभी उनमें से एक को छोड़कर, 1 कहाँ हैं.
तो यह संख्या व्यक्त करने के लिए आम तौर पर आसान है
सिर्फ इतना है कि एक बिट सेट है जहां,
और फिर इसके बारे में ~, तो हर दूसरे बिट है कि एक को छोड़कर सेट है ले लो.
इसलिए कि हम एक बिट में और अधिक उपयोग करने के लिए जा रहे हैं.
>> बिटवाइस या. यहाँ 2 द्विआधारी संख्या, और इन 2 नंबर इस प्रकार हैं
वे हर संभव प्रतिनिधित्व करते हैं, सुंदर प्रतिनिधि हैं
बिट्स के संयोजन आप पर काम करने की जरूरत सकता है.
मैं प्रत्येक बिट or'd जब यहाँ, हम बस सीधे नीचे की तुलना करने के लिए जा रहे हैं.
तो बाईं ओर हम एक 1 और एक 1 है.
मैं Bitwise | जब उन, क्या मैं करने जा रहा हूँ? एक.
0 और 1 मुझे देने जा रहा है | फिर bitwise? एक.
बिटवाइस 1 और 0 ही बात है, एक होने जा रहा है.
बिटवाइस 0 | 0 मुझे 0 देने जा रहा है.
0 मामला | तो मैं 0 मिलता है, जहां केवल मामले 0 में है.
और तुम सिर्फ अपने तार्किक अन्य रैंकों की तरह उस के बारे में सोच सकते हैं.
तुम सच के रूप में 1 और के रूप में झूठी 0 से लगता है कि अगर ऐसा है, तो एक ही बात यहाँ लागू होता है.
तो सच है या सच सच है, सही है या गलत सच है.
झूठी या सच सच है, झूठी या गलत वास्तव में गलत है कि केवल एक चीज है.
यहाँ आपको पता होना चाहिए कि उदाहरण है
bitwise ऑपरेटरों का उपयोग किया जाता है जब एक बहुत अच्छा उदाहरण के रूप में.
यहां अगर हम या Ox20 साथ राजधानी 'ए',
और हम हम कुछ मिलता है, एक दूसरे में इन पर गौर करेंगे.
और हम या छोटा अक्षर 'ए' Ox20 साथ, हम कुछ मिलता है.
तो चलो ASCII तालिका ऊपर खींच देना.
ठीक है. यहाँ हम 'ए' देखना है कि -
यहाँ हम 'ए' में 65 दशमलव है.
लेकिन मैं Ox41 है जो हेक्साडेसिमल, साथ जाना होगा.
पूरा यकीन है कि हम क्लास में देखा था. मुझे लगता है हम क्लास में यह देखा है
यह हेक्साडेसिमल से बाइनरी में कनवर्ट करना बहुत आसान है कि.
यहाँ तो, मैं द्विआधारी में 4 डाल करना चाहते हैं,
कि सिर्फ 0100 होने जा रहा है.
यह 1 की जगह, 2 की जगह, 4 की जगह है, तो यह 4 है.
तब मैं 0001 में होने जा रहा है जो बाइनरी में 1 विभाजित कर सकते हैं.
और इसलिए इस द्विआधारी में 'ए' का प्रतिनिधित्व होने जा रहा है.
छोटा अक्षर 'ए', यह अब Ox61 होने जा रहा है ले रहा है,
अपने द्विआधारी में इन तेज जहां,, तो एक 6 -
वास्तव में यह करते हैं - कोई रबड़ है? रबड़.
Ox61. तो द्विआधारी में 6 बंटवारे + 4 + 2 + 0 0 होने जा रहा है.
और बंटवारे 1 0001 होने जा रहा है.
इन 2 के बीच अंतर को देखते हुए
हम एक छोटे और एक पूंजी 'ए' के ​​बीच फर्क सिर्फ इस एक सा है कि देखते हैं.
ठीक है - तो यहाँ वापस करने के लिए आ रहा है.
हम सा Ox20 है देखो, तो यहाँ वापस करने के लिए आ रहा है
अपने द्विआधारी में इतना बंटवारे Ox20,
0010, 0000 है.
Ox20, सेट किया गया है कि केवल बिट, हम साथ संबंध रहे हैं कि इस बिट है
पूंजी और लोअरकेस 'ए' के ​​बीच स्विच के साथ.
यदि यह एक 'ए' है जो मैं या 'ए',,
अगर मैं या Ox20 साथ 'ए',
क्या मैं करने जा रहा हूँ?
[छात्र, अश्रव्य] >> लोअरकेस 'ए', यह एक 1 के लिए इस बिट फ्लिप करने के लिए जा रहा है.
और अगर मैं या 'एक' Ox20 साथ, क्या मैं करने जा रहा हूँ?
एक छोटे, क्योंकि सिर्फ oring 'ए' Ox20 साथ,
मैं सिर्फ एक 1 के लिए इस एकल बिट oring होने जा रहा हूँ, यह बात नहीं है, तो यह पहले से ही एक 1 है.
इसलिए हम 'ए' और 'ए' मिलता है.
>> बिटवाइस और. फिर, हम अपने तार्किक और समकक्ष के रूप में इस के बारे में सोच सकते हैं.
बाईं तरफ हम सच और सच है.
यह सच होने जा रहा है, और मामले के सभी के लिए है
, झूठे और सच है या सच और झूठे, या गलत और झूठे
उन चीजों में से कोई भी सत्य हैं.
तो क्या हम अंत में हो रही 1000 है.
तो अब, यहाँ, यहाँ मैं भरोसेमंद बिटवाइस नहीं का उपयोग किया है, जहां है,
हम Ox20 था जहां.
तो इस Ox20 है.
अब मैं क्या करना चाहते हैं, बिटवाइस Ox20 की ~.
यही कारण है कि सभी बिट्स फ्लिप करने के लिए जा रहा है.
इसलिए मैं 1101, 1111 है.
और तो 'ए' ~ Ox20 मुझे क्या देने जा रहा है साथ anded?
हम वास्तव में के बारे में सोचने की जरूरत ही सा, यह एक है
क्योंकि, इन बिट्स के सभी 1 के लिए सेट कर रहे हैं,
तब हम वास्तव में क्या 'ए' था पाने के लिए जा रहे हैं,
के लिए छोड़कर, संभवतः, क्या इस बिट है.
यह एक 1 था, तो अब यह, एक 0 पर सेट किया जा रहा है क्योंकि
यह है जो भी हो, इस 0 होने जा रहा है साथ anded है.
तो 'ए' ~ Ox20 मुझे देने जा रहा और क्या है?
[छात्रों का जवाब, अश्रव्य] >> और 'ए' और क्या है - यह 'ए' है.
और 'ए' और ~ Ox20 मुझे देने के लिए क्या हो रहा है?
'ए' यह वर्तमान में एक 1 है.
इस 0 से Anding, यह एक 0 बनाने जा रही है
और अब हम एक 'ए' पाने के लिए जा रहे हैं.
>> दोनों ', एक' हैं और इस प्रकार के पिछले नहीं बल्कि कम से कम,
हम XOR है. यह बहुत पसंद है या,
यह विशेष रूप से मतलब है या छोड़कर.
यह आप आमतौर पर के रूप में या असली दुनिया में के बारे में सोच की तरह है.
तो आप या तो 'एक्स' या 'Y', लेकिन दोनों नहीं करते.
यहाँ ^ 1 1 0 होने जा रहा है.
सच है, क्योंकि यह है - यह तार्किक सही और गलत के साथ के रूप में अच्छी तरह से काम नहीं करता
, बिटवाइस और और या कर के रूप में
लेकिन सच ^ सच्चा झूठा है.
उनमें से केवल एक सच है अगर हम केवल सच वापसी करना चाहते हैं.
तो ^ 1 1 0 है. क्या ^ 1 0 के बारे में?
1 है. ^ 0 1 ^ 0 0 0 है, 1 है.
इसलिए सभी परिस्थितियों में, 0 बिटवाइस कुछ 0 0 होने जा रहा है.
1 बिटवाइस कुछ 0 या 0 बिटवाइस 1,
अगर यह है | या ^, यह एक 1 हो जाएगा, और यह और है कि अगर यह 0 हो जाएगा.
और 1 बिटवाइस 1 1 नहीं है, जहां केवल मामले अनन्य या के साथ है.
यही कारण है कि 0110 है.
यहाँ तो अब, XOR का उपयोग कर - तो हम वापस 20 में कर रहे हैं.
'ए' ^ Ox20 हम तुलना कर रहे हैं इन 2 बिट्स है.
तो एक 1 ^ 0 मुझे एक क्या दे रहा है? एक से एक.
'ए' ^ Ox20 मुझे देने जा रहा है? एक छोटा अक्षर.
'एक' ^ Ox20 मुझे देने जा रहा है? राजधानी ए
इस वजह से कर रही है, जो कुछ भी Ox20 साथ इस XORing
प्रभावी ढंग से इस बिट है जो कुछ flipping है.
यह एक 0 है, यह अब एक 1 बनने जा रही है.
यह एक 1 है, ^ 1 1 0 है.
इसलिए हमारे 'ए' 'ए' बन गया है, और हमारे 'ए' 'एक' बन गया है.
तो XOR सिर्फ मामले flipping का एक बहुत आसान तरीका है.
तुम बस पत्र की एक स्ट्रिंग अधिक पुनरावृति करना चाहते हैं
और हर एक चरित्र के मामले वैकल्पिक,
Ox20 साथ आप बस XOR सब कुछ.
>> अब हम पारी को छोड़ दिया है. वाम शिफ्ट बस, मूल रूप से, करने के लिए जा रहा है
में, या बाईं ओर की संख्या के सभी धक्का, और उनके पीछे 0 के सम्मिलित करें.
तो यहाँ हम 00001101 है.
हम सही से 3 0 के दशक में पुश करने के लिए जा रहे हैं
और हम 01101000 मिलता है.
Nonbinary संदर्भ में,
हम चाहते हैं कि वास्तव में 13 बाएँ स्थानांतरित कर दिया 3 के साथ, हमें 104 देता है जो काम कर रहा है कि देखते हैं.
तो बाईं स्थानांतरण, हम यहाँ देख, एक्स << Y मूल रूप से एक्स * 2 ^ Y है.
^ 3 13 * 2, ^ 3 2 इतनी * 8 13 104 है, 8 है.
आप सिर्फ सामान्य रूप में द्विआधारी, कैसे प्रत्येक अंक, के बारे में सोचते हैं
हम सही से शुरू, यह तो 1 की जगह, तो 2 की जगह, 4 की जगह है.
इसलिए सही से 0 के दशक में धकेलने के द्वारा,
हम बस, 8 की जगह पर 4 की जगह में थे कि बातें जोर दे रहे हैं
और 16 के स्थान पर 8 की जगह में थे कि चीजें.
प्रत्येक पारी में सिर्फ 2 से पलता है. हाँ?
आप 5 से स्थानांतरित कर दिया, तो [छात्र] क्या होता है?
[बोडेन] क्या आप 5 से स्थानांतरित कर दिया, तो आप सिर्फ अंक खो देगा.
अनिवार्य रूप से, यह एक ही बात है. जैसे, पूर्णांकों केवल 32 बिट कर रहे हैं,
आप 2 वास्तव में बड़ा पूर्णांकों जोड़ने अगर ऐसा है, तो यह सिर्फ एक पूर्णांक में फिट नहीं है.
तो यह यहाँ एक ही बात है. आप 5 से स्थानांतरित कर दिया है,
हम सिर्फ इतना है कि एक खो देगा.
और कहा कि, "मोटे तौर पर" मैं क्या मतलब है की तरह है
तुम बहुत दूर शिफ्ट, तो आप बिट्स खो जहां.
>> सही बदलाव विपरीत होने जा रहा है,
हम अंत बंद 0 भगाओ कहाँ जा रहे हैं
और हमारे उद्देश्यों के लिए, बाएं से 0 के दशक में भरें.
इसलिए यह कर, हम मूल रूप से हम पहले से ही क्या किया था पीछे रहे.
और हम सही पर तीन 0 की बस से गिर गया है कि देखने
और हम सही करने के लिए 1101 के लिए सभी तरह धक्का दिया है.
यह प्रभावी रूप से, एक्स / 2 ^ Y, है, जो 104 >> 3 कर रही है.
तो अब, यहाँ, यह एक समान विचार है.
ऐसा क्यों है कि सिर्फ मोटे तौर पर एक्स / 2 ^ Y है, और नहीं वास्तव में एक्स / 2 ^ Y?
मैं 4 से स्थानांतरित कर दिया था, तो मैं एक 1 खो दिया होता है.
असल में, सिर्फ सामान्य रूप में पूर्णांक विभाजन का क्या आप सोचते हैं, लगता है.
तो, 5/2 की तरह 2 है. यह 2.5 नहीं है.
यह यहाँ एक ही विचार है. हम 2 से विभाजित, जब
हम जिस तरह से साथ अजीब बिट्स खो सकते हैं.
तो अब - कि बिटवाइस के लिए है. यही कारण है कि आप को जानने की जरूरत है.
हम क्लास में देखा उपयोग के मामलों को याद रखें,
की तरह एक सा मुखौटा, बिटवाइस ऑपरेटरों के लिए उपयोगी है
या तुम सा मास्क के लिए उन्हें इस्तेमाल करते हैं.
पूंजी पत्र और छोटे अक्षरों, रूपांतरण एक सुंदर प्रोटोटाइप उदाहरण है.
>> ठीक है, तो अतिप्रवाह हमलों बफर.
किसी को भी इस समारोह के साथ क्या गलत था याद है?
हम 12 बाइट्स की एक सरणी, 12 घर का काम, घोषित नोटिस
और फिर हम 12 घर का काम पूरे स्ट्रिंग पट्टी के हमारे बफर में कॉपी.
तो यहाँ क्या समस्या है?
क्यों 12 - जादुई संख्या 12 बहुत ज्यादा तुरंत के रूप में बाहर पॉप चाहिए?
बार 12 से अधिक वर्ण होना होता तो क्या होगा?
क्या बार वर्ण के लाखों है तो क्या होगा?
यहाँ मुद्दा memcpy है. बार काफ़ी समय से है, तो
यह अभी पूरी तरह से होगा - 'सी', 'सी' यह केवल 12 अक्षर था कि परवाह नहीं करता;
'सी' यह है कि कई बाइट्स फिट नहीं कर सकते कि कोई परवाह नहीं है.
यह अभी पूरी तरह से चार के ऊपर लिख देगा, हम इसके लिए आवंटित किया है 12 बाइट्स,
और स्मृति में यह अतीत में सब कुछ है कि वास्तव में बफर करने के लिए संबंधित नहीं है
जो कुछ स्ट्रिंग बार है साथ.
तो यह है कि हम क्लास में देखा तस्वीर थी
हम अपने ढेर आगे बढ़ रही है, जहां.
आप इन चित्रों के लिए इस्तेमाल किया या फिर उन लोगों के साथ परिचित हो जाना चाहिए.
हम अपने ढेर आगे बढ़ रही है, स्मृति पते शीर्ष पर 0 में शुरू
और नीचे में 4 अरब पसंद करने के लिए नीचे हो जाना.
हम कहीं स्मृति में हमारी सरणी 'सी' है
फिर हम इसे ठीक नीचे पट्टी करने के लिए हमारे सूचक है,
और फिर हम इस बचाया फ्रेम हमारी वापसी पते में सूचक और हमारी मूल दिनचर्या का ढेर है.
वापसी पता क्या है याद है?
मुख्य एक समारोह बार कहता है, एक समारोह foo कॉल जब यह है
अनिवार्य रूप से, रिटर्न बार.
इसलिए जब बार रिटर्न, वे इसे यह कहा जाता है कि foo के लिए वापस जा रहा है कि पता करने की जरूरत है.
तो वापसी पता जब समारोह रिटर्न पर लौटने के लिए यह है कि समारोह का पता है.
सुविधा, क्योंकि बफर अतिप्रवाह हमलों के लिए महत्वपूर्ण है कि कारण है
हैकर्स कि वापसी पता बदलना.
इसके बजाय वापस foo के लिए जाने की, मैं वापस हैकर मुझे वापस जाना चाहता है जहाँ जाने के लिए जा रहा हूँ.
और, सुविधा, हैकर अक्सर करने के लिए वापस जाना चाहता है, जहां
हम मूल रूप से किया था कि बफर की शुरुआत है.
तो, फिर से, लिटिल भारतीय नोटिस.
उपकरण एक छोटे से भारतीय प्रणाली का एक उदाहरण है,
तो एक पूर्णांक या एक सूचक उलट बाइट्स के साथ संग्रहीत किया जाता है.
तो यहाँ हम देखते हैं - यह है? हाँ.
हम Ox80, OxC0, Ox35, OxO8 देखें.
हेक्साडेसिमल अंक याद है?
हम, थोड़ा भारतीय में हेक्साडेसिमल अंक रिवर्स नहीं है
2 हेक्साडेसिमल अंक एक बाइट श्रृंगार, और हम बाइट्स रिवर्स क्योंकि.
क्यों हम जैसे, 80530CO8 दुकान नहीं है.
हम सही से शुरू, बजाय, 2 अंकों की प्रत्येक जोड़ी की दुकान.
उस पते शुरू की पता करने के लिए संदर्भित करता है
हम वास्तव में पहले स्थान में कॉपी करने के लिए चाहते थे कि हमारे बफर की.
उपयोगी है कि क्या कारण है अगर, क्योंकि हमलावर
के बजाय सिर्फ था कि एक स्ट्रिंग होने के, के लिए हुआ
जैसे की एक हानिरहित स्ट्रिंग, उनके नाम या कुछ और,
क्या होगा अगर, बजाय, कि स्ट्रिंग सिर्फ कुछ मनमाने ढंग से कोड थे
कि वे यह करना चाहता था जो कुछ किया?
इसलिए वे सकता है - मैं किसी भी शांत कोड के बारे में सोच नहीं सकता.
हालांकि यह कुछ भी हो सकता है. किसी भी विनाशकारी कोड.
वे चाहते थे, वे सिर्फ SEG दोष में कुछ कर सकता है, लेकिन वह व्यर्थ होगा.
वे आम तौर पर अपने सिस्टम को हैक करने के लिए यह करना.
>> ठीक है. CS50 पुस्तकालय.
यह मूल रूप से, getInt, getString, उन सभी कार्यों को हम आप के लिए प्रदान की जाती है.
इसलिए हम चार * स्ट्रिंग है, और है कि हम दूर उड़ा दिया कि अमूर्त है
सेमेस्टर के दौरान कुछ बिंदु पर.
एक स्ट्रिंग वर्ण का सिर्फ एक सरणी है कि याद रखें.
तो यहाँ हम getString की एक संक्षिप्त संस्करण देखते हैं.
आप यह वास्तव में लागू कैसे याद करने के लिए इसे वापस देखना चाहिए.
मुख्य विवरण हैं, हम एक समय में एक ही चरित्र में मिलता नोटिस
बस हमें कीबोर्ड पर टाइपिंग की तरह है, जो में मानक से.
तो एक बार में एक ही चरित्र है, और हम भी कई पात्रों हो,
इसलिए एन 1 क्षमता से अधिक है,
फिर हम अपने बफर की क्षमता बढ़ाने की जरूरत है.
तो यहाँ हम अपने बफर के आकार को दोगुना कर रहे हैं.
और वह जा रहा रखता है, हम अपने बफर में वर्ण सम्मिलित
हम एक नई लाइन या फ़ाइल या जो कुछ के अंत प्राप्त करने तक,
जो मामले में, हम स्ट्रिंग और फिर असली getString साथ कर रहे हैं
हम बहुत अधिक स्मृति आवंटित अगर यह वापस जाने के लिए और एक बिट हटना हूँ की तरह, स्मृति सिकुड़ती.
तो हम बताते हैं कि नहीं है, लेकिन मुख्य विचार है
यह एक समय में एक ही चरित्र में पढ़ने के लिए है.
यह सिर्फ एक बार में एक पूरी बात में नहीं पढ़ सकते हैं,
उनके बफर केवल एक निश्चित आकार की है.
यह बफर में डालने की कोशिश करता है कि स्ट्रिंग बहुत बड़ा है, तो यह अतिप्रवाह होगा.
यहाँ तो हम रोकने कि केवल एक ही चरित्र में पढ़ने के द्वारा
एक समय में और हम जब भी जरूरत बढ़ रही है.
तो getInt और अन्य CS50 पुस्तकालय कार्यों getString का इस्तेमाल करते हैं
उनके कार्यान्वयन में.
इसलिए मैं यहाँ महत्वपूर्ण बातों पर प्रकाश डाला.
यह एक स्ट्रिंग पाने के लिए getString कहता है.
GetString स्मृति लौटने करने में विफल रहा है,
getString कुछ mallocs कि याद है, तो आप getString कॉल जब भी
आप (दुर्बोध) तुम्हारे पास जो कि स्ट्रिंग मुक्त नहीं होना चाहिए.
यह कुछ malloc करने में विफल रहा तो अगर यहाँ, हम सिर्फ एक ध्वज के रूप में INT_MAX देने वाले,
अरे, हम वास्तव में एक पूर्णांक प्राप्त करने में सक्षम नहीं थे.
तुम्हें पता है मैं तुम्हारे पास लौट जो भी उपेक्षा, या चाहिए
आप एक वैध निवेश के रूप में इस व्यवहार नहीं करना चाहिए.
अंत में, कि सफल था, यह सोचते हैं हम, कि विशेष ध्वज के साथ sscanf का उपयोग
जिसका मतलब है, पहले एक पूर्णांक से मेल,
फिर उस पूर्णांक के बाद किसी भी अक्षर से मेल.
तो हम इसे 1 के बराबर करना चाहते हैं नोटिस.
तो sscanf रिटर्न सफलतापूर्वक कितने मैचों बनाया तो क्या होगा?
यह सफलतापूर्वक एक पूर्णांक मिलान किया, तो यह 1 वापस आ जाएगी,
यह एक पूर्णांक से मेल नहीं खाती अगर यह 0 वापसी करेंगे, और यह 2 वापसी करेंगे
यह मेल अगर एक पूर्णांक कुछ चरित्र द्वारा पीछा किया.
तो हम 1 लेकिन कुछ मैच हम पुन: प्रयास नोटिस.
तो हम में प्रवेश किया, तो 1, 2, 3, सी, या 1, 2, 3, एक्स,
तो 1, 2, 3 पूर्णांक में जमा हो जाएगा,
एक्स, चरित्र में जमा हो जाएगा
हम केवल एक पूर्णांक चाहते हैं, क्योंकि sscanf 2 लौटेंगे, और हम पुन: प्रयास होगा.
>> जल्दी HTML, HTTP, सीएसएस के माध्यम से उड़ाने.
हाइपरटेक्स्ट मार्कअप लैंग्वेज वेब की संरचना और अर्थ विज्ञान है.
यहाँ हम एचटीएमएल टैग नहीं है जहां व्याख्यान से उदाहरण है.
हम सिर टैग, शरीर टैग है
हम, हम वास्तव में एक शुरुआत है और करीब टैग नहीं है जहां खाली टैग के उदाहरण हैं
हम सिर्फ लिंक और छवि है.
नहीं समापन छवि टैग नहीं है, टैग करने की जरूरत है सब कुछ accomplishes है कि सिर्फ एक ही टैग नहीं है.
लिंक एक उदाहरण है, हम तुम सीएसएस के लिए लिंक कैसे देखेंगे,
स्क्रिप्ट आप एक बाहरी जावास्क्रिप्ट के लिए लिंक का एक उदाहरण है.
यह HTML एक प्रोग्रामिंग भाषा नहीं है, बहुत सीधा है, और याद है.
यहाँ, आप यह करना होगा कि क्या एक फार्म परिभाषित या कम से कम कैसे होगा याद है?
इस तरह के एक फार्म एक कार्रवाई और एक विधि है.
आप ही कभी देखा होगा तरीकों जाओ और पोस्ट कर रहे हैं.
इतनी बात यूआरएल में डाल दिया जाता है जहां संस्करण है.
यह यूआरएल में डाल नहीं है जहां पोस्ट है.
इसके बजाय, प्रपत्र से कोई डेटा HTTP अनुरोध में अधिक छिपा डाला जाता है.
HTTP अनुरोध चला जाता है जहां तो यहाँ, कार्रवाई को परिभाषित करता है.
यह कहाँ जा रहा है google.com / खोज है.
विधि. जाओ और पोस्ट के बीच के मतभेदों को याद रखें,
आप बुकमार्क कुछ करना चाहते हैं, तो सिर्फ एक उदाहरण के रूप में कहते हैं.
आप एक पोस्ट यूआरएल को बुकमार्क करने के लिए कभी नहीं कर सकेंगे
डेटा यूआरएल में शामिल नहीं है क्योंकि.
>> HTTP, अब, हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल है.
हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल, आप इसे स्थानांतरित करने के लिए उम्मीद करेंगे
हाइपरटेक्स्ट मार्कअप लैंग्वेज, और यह करता है.
लेकिन यह भी आप वेब पर खोज किसी भी चित्र स्थानान्तरण,
आप किसी भी डाउनलोड एक HTTP अनुरोध के रूप में शुरू करते हैं.
तो HTTP बस वर्ल्ड वाइड वेब की भाषा है.
और यहाँ आप एक HTTP अनुरोध के इस तरह के पहचान करने की जरूरत है.
पक्ष पर यहाँ HTTP/1.1 बस उस संस्करण का कहना है
प्रोटोकॉल का उपयोग कर रहा हूँ.
आप इसे देखेंगे के रूप में यह बहुत ज्यादा हमेशा HTTP/1.1 होने जा रहा है.
तो फिर हम इस आप देख सकते हैं कि, वैकल्पिक पोस्ट किया जा रहा है, मिल गया था कि देखते हैं.
और मैं यात्रा करने के लिए कोशिश कर रहा था कि यूआरएल www.google.com/search?q = बकवास, बकवास, बकवास था.
तो याद है कि इस प्रश्न चिह्न क्यू = ब्ला ब्ला ब्ला,
एक रूप से प्रस्तुत की है कि सामान की तरह है.
यह मेरे लिए वापस हो सकता है प्रतिक्रिया कुछ इस तरह देखना होगा.
फिर, कि होने जा रहा है जो प्रोटोकॉल, के साथ शुरू
स्थिति कोड द्वारा पीछा किया. यहाँ यह 200 ठीक है.
और अंत में, मैं वास्तव में के लिए कहा है जो वेब पेज के बाद किया जाएगा.
संभव स्थिति कोड आप देख सकते हैं, और आप उनमें से कई को पता होना चाहिए.
200 ठीक है कि आप शायद पहले देखा है.
403 निषिद्ध, 404 नहीं मिला, 500 आंतरिक सर्वर त्रुटि
आप एक वेबसाइट पर जाकर कुछ टूट गया है या उनके PHP कोड दुर्घटनाओं, तो आमतौर पर है
उपकरण में हम हैं, जबकि कि बड़ा नारंगी बॉक्स
कि ऊपर आता है और जैसे, कुछ गड़बड़ है, कहते हैं, इस कोड काम नहीं करता
या इस समारोह का बुरा.
आमतौर पर वेबसाइटों, आप कार्यों को वास्तव में खराब कर रहे हैं जाने क्या नहीं करना चाहती
तो बजाय वे तो बस आप 500 आंतरिक सर्वर त्रुटि दे देंगे.
>> टीसीपी / आईपी HTTP के तहत 1 परत है.
इंटरनेट वर्ल्ड वाइड वेब के बाहर वहाँ है कि याद रखें.
जैसा आप HTTP के माध्यम से जाना नहीं है कि एक ऑनलाइन खेल खेलते हैं,
यह एक अलग माध्यम से हो रहा है - यह अभी भी इंटरनेट का इस्तेमाल कर रहा है,
लेकिन यह HTTP का उपयोग नहीं करता.
HTTP टीसीपी / आईपी पर बनाया प्रोटोकॉल की सिर्फ एक उदाहरण है.
आईपी ​​सचमुच इंटरनेट प्रोटोकॉल का मतलब है.
हर कंप्यूटर एक आईपी पता है, वे उन 4 अंकों की बातें कर रहे हैं
192.168.2.1, या जो कुछ भी तरह, कि एक स्थानीय एक हो जाता है.
लेकिन यह है कि एक आईपी पते के पैटर्न है.
तो DNS, डोमेन नाम सेवा,
कि एक वास्तविक आईपी पते पर google.com तरह बातें तब्दील हो रहा है.
तो तुम एक यूआरएल में है कि आईपी पते लिखते हैं, तो
कि गूगल के लिए आप लाना होगा, लेकिन आप उन बातों को याद करने के लिए नहीं करते हैं.
आप के बजाय google.com याद करते हैं.
हमारे पास आखिरी बात यह आईपी के टीसीपी हिस्सा है जहां बंदरगाहों, है.
टीसीपी अधिक करता है. यदि आप अपने वेब ब्राउज़र चल रहा है, जैसे, के बारे में सोचो.
हो सकता है कि आप कुछ ईमेल अनुप्रयोग चल रहा है;
शायद आप इंटरनेट चल रहा है का उपयोग करता है कि कुछ अन्य कार्यक्रम है.
वे सभी इंटरनेट का उपयोग करने की जरूरत है,
लेकिन अपने कंप्यूटर केवल 1 वाईफ़ाई कार्ड या जो कुछ भी किया है.
तो बंदरगाहों हम अलग करने में सक्षम हैं कि जिस तरह से कर रहे हैं
इन आवेदनों में इंटरनेट का उपयोग करने में सक्षम हैं कैसे.
प्रत्येक आवेदन, उस पर सुन सकते हैं कि 1 विशिष्ट बंदरगाह हो जाता है
और डिफ़ॉल्ट रूप से, HTTP पोर्ट 80 का उपयोग करता है.
कुछ ईमेल सेवाओं में 25 का उपयोग करें.
कम गिने लोगों को सुरक्षित हो जाते हैं.
आप आमतौर पर अपने आप के लिए उच्च गिने लोगों को मिल रहे हैं.
>> सीएसएस, स्टाइल शीट्स.
सीएसएस के साथ हम शैली वेब पेज, नहीं HTML के साथ.
आप अपने सीएसएस डाल सकते हैं 3 स्थानों रहे हैं.
यह शैली टैग के बीच, या एक पूरी तरह से अलग फाइल में है और फिर अंदर जुड़ा है, इनलाइन हो सकता है
और यहाँ सीएसएस की सिर्फ एक उदाहरण है.
आप इस पैटर्न की पहचान करनी चाहिए,
पहला उदाहरण है कि हम शरीर टैग मिलान कर रहे है, जहां
और यहाँ हम शरीर टैग केंद्रित कर रहे हैं.
दूसरा उदाहरण, हम बात से मेल खाते हैं
आईडी पाद लेख के साथ, और हम उस के लिए कुछ शैलियों आवेदन कर रहे हैं.
बाईं ओर उस आईडी पाद लेख पाठ संरेखित सूचना है,
शरीर पाठ संरेखित केंद्र जबकि.
पाद शरीर के अंदर है.
यह बजाय, पाठ शरीर पाठ केंद्र का कहना है, भले ही छोड़ दिया जाएगा.
यह बात के पूरे कैस्केडिंग हिस्सा है.
तुम हो सकता है - आप शरीर के लिए शैलियों निर्दिष्ट कर सकते हैं,
और फिर शरीर में चीजों को आप अधिक विशिष्ट शैली निर्दिष्ट कर सकते हैं,
और चीजों को आप उम्मीद के रूप में काम.
अधिक विशिष्ट सीएसएस विनिर्देशक पूर्वता ले.
मुझे लगता है कि यह है.
>> [अली Nahm] हाय सब लोग. मैं सिर्फ आपका ध्यान मिल सकता है.
मैं अली हूँ और मैं वास्तव में तेजी से PHP और एसक्यूएल के माध्यम से जाने के लिए जा रहा हूँ.
तो हम शुरू कर सकते हैं. PHP PHP के लिए कम है: Hypertext पूर्वप्रक्रमक.
आप सभी को पता होना चाहिए और, जैसा कि यह एक सर्वर साइड पटकथा भाषा है,
और हम वेबसाइटों के पीछे के अंत के लिए इसका इस्तेमाल करते हैं,
और यह संगणना, परदे के पीछे के हिस्से का एक बहुत कुछ करता है.
सिंटेक्स. यह सी, आश्चर्य, आश्चर्य की तरह नहीं है.
मैं आगे नहीं ले जा सकते हैं - यह हमेशा आप देख सकते हैं, के साथ शुरू करने के लिए है.
आप ब्रेसिज़ के नए प्रकार की जरूरत है देख सकते हैं और फिर आप भी? PHP जरूरत है.
यही कारण है कि आप अपने PHP पाठ, अपने PHP कोड फ्रेम करने के लिए है कि कैसे हमेशा है.
तो यह सिर्फ आप की तरह पहले उस पर डाल दिया, जहां सी, तरह नहीं हो सकता.
आप हमेशा यह चारों ओर की जरूरत है.
और अब, प्रमुख वाक्यविन्यास सभी चर $ चरित्र के साथ शुरू करने की जरूरत है.
आप उन्हें परिभाषित कर रहे हैं जब यह करने की जरूरत है, आप ऐसा करने की जरूरत
आप बाद में उन्हें की बात कर रहे हैं.
तुम हमेशा कि $ की जरूरत है. यह बहुत सुंदर है, अपने नए सबसे अच्छा दोस्त है.
तुम नहीं करते - सी विपरीत, आप यह है चर प्रकार की किस तरह खड़ा करने की जरूरत नहीं है.
आप $ की जरूरत क्या है तो, जबकि आप की तरह खड़ा करने की जरूरत नहीं है
INT एक्स या स्ट्रिंग वाई, वगैरह, वगैरह.
तो एक मामूली अंतर है.
इस का एक परिणाम के रूप में, यह PHP एक कमजोर प्रकार है कि इसका मतलब है.
PHP एक कमजोर प्रकार की भाषा है, और यह कमजोर चर टाइप किया गया है.
दूसरे शब्दों में, कि आप चर प्रकार के विभिन्न प्रकार के बीच स्विच कर सकते हैं.
आप एक पूर्णांक के रूप में अपने नंबर 1 स्टोर कर सकते हैं,
आप एक स्ट्रिंग के रूप में यह स्टोर कर सकते हैं, और आप एक नाव के रूप में यह स्टोर कर सकते हैं,
और यह सब उस नंबर 1 हो जाएगा.
आप अलग अलग रूपों में यह भंडारण कर रहे हैं, भले ही
यह अभी भी है - चर प्रकार अभी भी अंत में पकड़े हुए हैं.
तो आप यहां से देखो, तुम pset 7 से याद है,
आप में से कई शायद इस के साथ मुद्दों था.
दो बराबर संकेत, 3 बराबर संकेत, 4 बराबर संकेत.
ठीक है, नहीं 4 बराबर संकेत मिल रहे हैं, लेकिन 2 और 3 रहे हैं.
आप मूल्यों की जांच करने के लिए 2 बराबर संकेत का उपयोग करें.
यह प्रकारों में जाँच कर सकते हैं.
तो आपको पहले उदाहरण में देख सकते हैं,
मैं num_int == num_string है.
तो अपने int और अपने स्ट्रिंग दोनों हैं, तकनीकी रूप से, 1,
लेकिन वे विभिन्न प्रकार के कर रहे हैं. लेकिन डबल बराबरी के लिए, यह अभी भी पारित करेंगे.
हालांकि, ट्रिपल बराबरी के लिए, यह मूल्य के साथ ही विभिन्न प्रकार की जांच करता है.
यही कारण है, यह है कि यहाँ दूसरे मामले में पारित करने के लिए नहीं जा रहा है इसका मतलब है कि
आप के बजाय 3 बराबर संकेत का उपयोग कर रहे हैं.
तो यह है कि तुम सब अब दिखा देना चाहिए कि एक बड़ा अंतर है.
>> स्ट्रिंग कड़ी आप PHP में उपयोग कर सकते हैं एक और शक्तिशाली बात है.
यह मूल रूप से सिर्फ इस काम डॉट संकेतन है
और है कि आप एक साथ तार बाँध कैसे कर सकते हैं.
तो अगर आप बिल्ली है और आप कुत्ता है, और आप एक साथ 2 तार डाल करना चाहते हैं,
आप अवधि का उपयोग कर सकते हैं, और है कि यह कैसे काम करता है की तरह है.
आप भी सिर्फ एक दूसरे के बगल में उन्हें जगह कर सकते हैं,
आप नीचे उदाहरण में यहाँ देख सकते हैं,
मैं स्ट्रिंग 1, अंतरिक्ष स्ट्रिंग 2 गूंज है जहां.
PHP जैसे उन्हें बदलने के लिए पता चल जाएगा.
सारणियों. अब, PHP में, सरणियों के 2 अलग प्रकार के होते हैं.
आप नियमित रूप से सरणियों हो सकता है, और आप भी साहचर्य arrays हो सकता है,
और हम अभी उन के माध्यम से जाने के लिए जा रहे हैं.
नियमित सरणियों, सिर्फ इस सी में हैं
और इसलिए आप गिने जा रहे हैं कि सूचकांक है.
अभी हम सिर्फ एक बनाने के लिए जा रहा है और डाल रहे हैं -
तो यह है कि हम एक खाली सरणी बनाने के लिए है, तो हम करने जा रहे हैं
इंडेक्स नंबर 0 में डाल दिया.
हम नंबर 6, मूल्य 6 डाल करने के लिए जा रहे हैं.
आप यहाँ तल पर इसे देख सकते हैं.
Where's - इंडेक्स नंबर 1 पर हम, मूल्य 4 नंबर डालने के लिए जा रहे हैं
और इसलिए आप एक 6 वहाँ देख सकते हैं, एक 4, वहाँ
और फिर हम चीजों मुद्रण कर रहे हैं, के रूप में
हम कोशिश करते हैं और इंडेक्स नंबर 0 में संग्रहीत मूल्य मुद्रित करते हैं,
तो हम बाहर मुद्रित किया जा रहा 6 मूल्य देखेंगे. कूल?
तो यह है कि आप के लिए नियमित रूप से सरणियों है.
आप भी अब नियमित सरणियों की बातें जोड़ सकते हैं एक और तरीका है
आप बस उन्हें अंत में संलग्न कर सकते है.
यही कारण है कि आप विशिष्ट सूचकांक निर्दिष्ट करने की जरूरत नहीं है कि इसका मतलब है.
आप संख्या देख सकते हैं, और तब वर्ग कोष्ठक में निर्दिष्ट कोई सूचकांक नहीं है.
और यह पता चल जाएगा - PHP सिर्फ सूची, अगले मुक्त स्थान के अंत में जोड़ने के लिए पता चल जाएगा.
तो तुम, कि 0 स्थान पर वहीं 1 देख सकते हैं
2 प्रथम स्थान पर वहीं चला गया.
3 जाता है - के रूप में अच्छी तरह से जोड़ा जाता है.
तो उस तरह की समझ में आता है. तुम बस लगातार यह जोड़ रहे हैं,
और फिर हम नंबर 1 के सूचकांक गूंज रहे हैं जब
यह मूल्य 2 बाहर प्रिंट होगा.
>> तो हम साहचर्य arrays रहे हैं कि सरणियों है.
बजाय संख्यात्मक सूचकांक होने के साहचर्य arrays,,
वे क्या वे स्ट्रिंग से कर रहे हैं कि सूचकांक है, है.
आप के बजाय, देख सकते हैं - मैं उन सभी इंडेक्स नंबर से छुटकारा मिल गया,
और अब यह key1, key2, key3 है, और वे सब तार कर रहे हैं दर्शाता है कि डबल उद्धरण में हैं.
इसलिए हम इस का एक उदाहरण हो सकता है.
इस बात का उदाहरण है कि हम TF है, और कि सूचकांक के नाम है.
हम कैलोरी खाया, सूचकांक में, नाम के रूप में "अली" डाल करने के लिए जा रहे हैं
हम बजाय एक स्ट्रिंग के एक int इस समय रख सकते हैं,
और फिर सूचकांक पसंद पर, हम इसे के अंदर एक पूरे सरणी डाल सकते हैं.
तो इस तरह से है - यह हम था कैसे करने के लिए इसी तरह की एक अवधारणा है
संख्या के साथ सूचकांक, लेकिन अब हम चारों ओर सूचकांकों बदल सकते हैं
बजाय तार के रूप में उनके पास करने के.
तुम भी, सिर्फ व्यक्तिगत रूप से यह कर के अलावा, यह कर सकते हैं
आप एक हिस्सा में यह सब कर सकते हैं. तो तुम, कि सरणी की कि TF देख सकते हैं
और फिर हम एक विशाल वर्ग ब्रैकेट सेट में उन सब को निर्धारित किया है.
तो यह है कि चीजों को गति कर सकते हैं.
यह नहीं की तुलना में एक शैलीगत पसंद का अधिक है.
हम भी छोरों है.
सी में हम इस तरह का काम है कि छोरों है.
हम अपने सरणी था, और हम सूची के अंत में सूचकांक में 0 से चला गया,
और हम सही है, यह सभी के लिए प्रिंट?
, समस्या साहचर्य arrays के लिए है, सिवाय
हम जरूरी उन संख्यात्मक सूचकांक पता नहीं है
अब हम स्ट्रिंग सूचकांकों किया है.
अब हम फिर से, आप उम्मीद है कि pset 7 में प्रयोग किया जाता है, जो foreach छोरों, का उपयोग करें.
Foreach छोरों बस सूची के हर एक भाग को पता चल जाएगा.
और यह है कि आप वास्तव में संख्यात्मक सूचकांक पता करने के लिए नहीं है.
तो आप सरणी डाल, आप foreach वाक्यविन्यास है, तो यह foreach है.
, तो मेरे सरणी pset कहा जाता है, और उसके बाद के रूप में शब्द, रूप
और फिर आप प्रयोग करने जा रहे हैं कि इस स्थानीय अस्थायी चर डाला
सिर्फ विशिष्ट आयोजित करने जा रहा है कि विशेष बात के लिए -
एक उदाहरण या सरणी में से एक खंड.
, Pset संख्या 1 का आयोजन करेगा, और तब शायद यह संख्या 6 का आयोजन करेगा
और फिर यह संख्या 2 का आयोजन करेगा.
लेकिन यह सरणी में है कि हर एक मूल्य के माध्यम से जाने की गारंटी है.
आप PHP में पता होना चाहिए कि उपयोगी कार्यों की आवश्यकता होती हैं,
बाहर निकलें, खाली, गूंज इतनी है कि, आप कुछ फ़ाइलों सहित सुनिश्चित करता है कि.
मैं अत्यधिक तुम pset 7 को देखो और उन कार्यों को देखने की सलाह देते हैं.
आप उन पता करने के लिए हो सकता है,
तो मैं निश्चित रूप से वास्तव में, उन सब क्या कर रहे हैं, पता होगा.
>> और अब हम वास्तव में जल्दी गुंजाइश के माध्यम से जाने के लिए जा रहे हैं.
दायरे में, पीएचपी, सी के विपरीत, एक कायरता बात की तरह है
और इसलिए हम बस जल्दी से इसे माध्यम से जाने के लिए जा रहे हैं.
तो चलिए हम हम वहाँ है कि उस तीर पर शुरू कहते हैं.
और हम $ मैं के साथ शुरू करने जा रहे हैं. तो चर 'मैं', 0 होने जा रहा है
और हम बस वहाँ पर कि बड़े सफेद बॉक्स में यह मुद्रण रखने के लिए जा रहे हैं.
हम I0 के साथ शुरू करने जा रहे हैं, और फिर हम यह गूंज करने जा रहे हैं.
तो 0 नहीं है.
और फिर हम, के लिए पाश से यह वेतन वृद्धि के लिए जा रहे हैं
और फिर यह 1 के मूल्य होने जा रहा है.
, एक कम से कम 3 है, तो यह पाश के लिए उस के माध्यम से पारित करने के लिए जा रहा है
और फिर हम इसे फिर से मुद्रित देखने जा रहे हैं.
हम 2 करने के लिए इसे फिर से बढ़ाने के लिए जा रहे हैं
और 2 कम से कम 3 है, तो यह पाश के लिए पारित करेंगे, और यह 2 मुद्रित करेंगे.
तो फिर तुम 3 3 से कम नहीं है कि ध्यान देंगे, तो हम पाश के लिए के बाहर तोड़ दूँगा.
तो अब हम बाहर हुआ है, और फिर हम क्रियाहीन में जाने के लिए जा रहे हैं.
ठीक है. तो अगर आप इस चर हम बना लिया है कि ध्यान दें कि करने के लिए है
'मैं' चर, स्थानीय स्तर पर scoped नहीं है.
यही कारण है कि यह पाश के लिए स्थानीय नहीं है इसका मतलब है कि,
और उस चर हम अभी भी पहुँच सकते हैं और बाद में बदल सकते हैं, और यह अभी भी प्रभावी हो जाएगा सकता है.
आप अब समारोह में जाना है, तो आप, हम भी 'मैं' चर का उपयोग करने वाले देखेंगे
और हम 'मैं' + + वेतन वृद्धि के लिए जा रहे हैं.
आपको लगता है कि 'मैं' चर की एक प्रति है कि, सी के आधार पर, सबसे पहले, आपको लगता होगा.
यह सही है, जो पूरी तरह से एक अलग बात है.
हम इसे मुद्रित करते हैं तो, हम बाहर मुद्रित करने के लिए जा रहा है, जो 'मैं' + + मुद्रित करने के लिए जा रहे हैं कि 4,
खेद है - और फिर हम करने जा रहे हैं.
तो फिर हम उस समारोह के बाहर समाप्त करने के लिए जा रहे हैं,
और हम उस तीर सही अब कहाँ हो जा रहे हैं.
यही तो, हालांकि, समारोह 'मैं' का मान बदल गया है, भले ही इसका मतलब है कि,
यह बाहर समारोह का परिवर्तन नहीं किया,
समारोह एक अलग गुंजाइश है क्योंकि.
यही है, हम 'मैं' की गूंज है, यह समारोह के दायरे में नहीं बदला है इसका मतलब है कि
और यदि ऐसा है तो हम फिर से 3 मुद्रित करने के लिए जा रहे हैं.
सी. में से PHP में गुंजाइश के बारे में अलग अलग बातें
>> अभी PHP और एचटीएमएल में.
PHP वेब पृष्ठों गतिशील बनाने के लिए प्रयोग किया जाता है.
यह एक तरह से चीजों को अलग करता है.
हम HTML से यह अलग है.
एचटीएमएल के साथ, हम हमेशा बस, रोब दिखाया है कि कैसे की तरह ही स्थिर बात है,
PHP, जबकि आप उपयोगकर्ता है, जो के आधार पर चीजों को बदल सकते हैं.
मैं यह है, तो मैं, "आप के रूप में लॉग इन किया है -" है और उसके बाद नाम,
और मैं नाम बदल सकते हैं. इसलिए अभी नाम यूसुफ है
और यह "मेरे बारे में" है, लेकिन फिर मैं भी टॉमी है करने के लिए नाम बदल सकते हैं.
और वह एक अलग बात होगी.
तो फिर हम भी उसके बारे में अलग अलग चीजों को बदल सकते हैं,
और यह नाम के आधार पर अलग अलग सामग्री दिखाएगा.
इसलिए PHP तरह की अपनी वेबसाइट में क्या हो रहा है बदल सकते हैं.
यहाँ भी. फिर भी, वे अलग सामग्री है कि ध्यान दें,
आप तकनीकी रूप से अभी भी सतह पर है कि एक ही वेब पेज तक पहुँचने रहे हैं, भले ही.
एचटीएमएल सृजन. आप ऐसा कर सकते हैं कि 2 अलग अलग तरीके हैं.
तो क्या अब हम उस अधिकार के माध्यम से जाना होगा. पहला तरीका है आपके पास, है - हाँ, माफ करना.
तो आप सिर्फ PHP में पाश के लिए नियमित रूप से अपने पास
और फिर आप PHP में गूंज और आप HTML बाहर गूंज.
रोब एचटीएमएल स्क्रिप्ट का आप क्या दिखाया का उपयोग करना
और फिर बस वेब पेज के लिए इसे बाहर प्रिंट करने के लिए PHP प्रिंट का उपयोग कर.
वैकल्पिक तरीका आप PHP और एचटीएमएल बाहर अलग रूप में अगर यह करने के लिए है.
तो तुम, पाश के लिए शुरू होता है कि PHP की एक लाइन हो सकता है
तो आपको एक अलग बात में HTML की लाइन हो सकता है,
और फिर आप एक PHP के साथ, फिर से, लूप अंत.
तो यह एक तरह से यह बाहर अलग है.
बाईं ओर, यदि आप कर सकते हैं कि सब -
यह PHP का सिर्फ 1 हिस्सा है.
सही में आप, आप PHP की एक पंक्ति है कि देख सकते हैं
आप HTML की एक पंक्ति है, और आप फिर से PHP की एक पंक्ति है.
तो वे क्या कर रहे हैं में इसे बाहर अलग.
और आपको लगता है कि किसी भी तरह से, उनमें से किसी के लिए, ध्यान देंगे
वे अभी भी छवि बाहर प्रिंट, छवि, छवि,
इसलिए कि एचटीएमएल अभी भी उसी तरह मुद्रित किया जाता है.
और फिर आप अभी भी 3 छवियों को अपनी वेबसाइट पर दिखाने देखेंगे.
तो यह एक ही बात कर के 2 अलग अलग तरीके है.
>> अब हम रूपों और अनुरोध किया है. रोब, आपको दिखाया
वहाँ HTML के रूप हैं, और हम सिर्फ इस माध्यम से हवा जाएगा.
आप एक क्रिया है और आप एक विधि है, और अपनी कार्रवाई
एक तरह से आप इसे भेजने के लिए जा रहे हैं, जहां आपको दिखाता है, और तरीका है कि क्या
यह एक हो जाओ या एक के बाद होने जा रहा है.
और एक अनुरोध प्राप्त, रोब कहा, आप एक प्रपत्र में डाल करने के लिए जा रहे हैं इसका मतलब है कि
एक पोस्ट अनुरोध आप एक URL में नहीं देख सकेंगे जबकि और तुम, एक यूआरएल के रूप में देखेंगे.
तो एक मामूली अंतर है.
हालांकि, एक ऐसी ही बात है कि एक बात
पोस्ट और मिल भी उतना ही असुरक्षित हैं.
तो तुम, सिर्फ इसलिए कि आप URL में इसे देख नहीं लगता है कि हो सकता है
कि, पोस्ट और अधिक सुरक्षित है इसका मतलब
लेकिन आप अभी भी आप भेज रहे हैं कि जानकारी में अपने कुकीज़ में देख सकते हैं.
इसलिए नहीं लगता है कि के बारे में एक या अन्य.
नोट करने के लिए एक और बात आप भी खंड चर है कि है.
तुम लोग अपने यूजर आईडी जानकारी प्राप्त करने के लिए pset 7 में इस का इस्तेमाल किया.
क्या हुआ आप इस साहचर्य सरणी का उपयोग कर सकते हैं कि था,
$ देखना, और उसके बाद आप अलग अलग चीजों का उपयोग करने में सक्षम हैं
और पृष्ठों पर अलग अलग बातें की दुकान.
>> अंतिम बात, हम एसक्यूएल, संरचित क्वेरी भाषा है
और इस डेटाबेस का प्रबंधन करने के लिए एक प्रोग्रामिंग भाषा है.
, वास्तव में, डेटाबेस क्या हैं? वे तालिकाओं का संग्रह कर रहे हैं,
और प्रत्येक मेज वस्तुओं की समान प्रकार के हो सकते हैं.
इसलिए हम आपके वित्त pset में उपयोगकर्ताओं का एक मेज था.
और क्यों वे उपयोगी होते हैं? यह स्थायी रूप से जानकारी संग्रहीत करने का एक तरीका है क्योंकि.
यह बातें नज़र रखने और चीजों के प्रबंधन के लिए एक रास्ता है
और वास्तव में विभिन्न पृष्ठों और ट्रैक रखने पर यह देखकर.
जबकि आप सिर्फ एक है कि तत्काल इस समय यह दुकान
और फिर बाद में उपयोग करते हैं, क्या आप को बचाया है कि कुछ भी उपयोग करने में सक्षम नहीं होगा.
हम SQL आदेश के लिए उपयोग किए जाने वाले 4 प्रमुख बातें हैं.
हम चुनें, सम्मिलित करने, हटाने, और अद्यतन है.
उन तुम लोग अपने प्रश्नोत्तरी के लिए पता करने के लिए वास्तव में महत्वपूर्ण हैं.
>> हम जल्दी से सही अब चुनिंदा जायेंगे.
असल में, आप एक डेटाबेस से पंक्तियों का चयन कर रहे हैं.
तो तुम यहीं, है -
हम इन 2 अलग बातें हैं, और हम कक्षाओं तालिका से चयन करना चाहते हैं
जहां भयानक - भयानक स्तंभ में मान 1 है.
आप यहाँ देख सकते हैं तो, हम, वर्ग के नाम के इन 2 बातें हैं
CS50 और Stat110, और हम वर्ग आईडी और नारा है.
तो हम उस जानकारी का चयन करना चाहते हैं.
तो फिर तुम, यह एक तरह से उस भयानक स्तंभ के बाहर उठा रहा है कि सही यहाँ देख सकते हैं
सब बातें कर रहे हैं 1, और फिर यह वर्ग आईडी, वर्ग के नाम और इसे बाहर ले सकते हैं कि नारा है, जहां.
आप इस कोड में वास्तव में किस प्रकार करते हैं? आप PHP का उपयोग करने के लिए है.
तो उस तरह की PHP और एसक्यूएल एक दूसरे से जुड़े हुए हैं कि कैसे है.
अब हम अपने कोड है, और हम हमारे क्वेरी समारोह का उपयोग करने के लिए जा रहे हैं
हम pset 7 में किया था, और हम एसक्यूएल क्वेरी चलाने के लिए जा रहे हैं.
तो हम करने जा रहे हैं -
हम हमेशा झूठे यदि पंक्ति के ट्रिपल बराबर है की जाँच करने के लिए है.
तो फिर, तुम प्रकार और मान की जाँच करना चाहते,
यह काम नहीं करता है और फिर, तो आप हम pset 7 में किया था, हमेशा की तरह, माफी चाहता हूँ.
अन्यथा, आप उन काम के साथ सब कुछ के माध्यम से लूप करना चाहते हैं
foreach हम बस खत्म हो गया था कि छोरों.
, हम के माध्यम से पाशन कर रहे हैं और हम पिछले इसे बनाया है अब जब कि
चलो हमारे क्वेरी पारित कर दिया है कि कल्पना करते हैं, अब हम अपने foreach पाश है.
और पहली पंक्ति यह है, तो यहाँ पंक्ति यहीं, है, यह बॉक्सिंग है.
यह हो गया है कि सभी जानकारी बाहर मुद्रित करने के लिए जा रहा है.
तो यह नीचे में मुद्रित करने के लिए जा रहा है "चाहता हूँ एचटीएमएल जानें?"
यह पाश के लिए पहले पूरा कर लिया है, क्योंकि तब यह अगली पंक्ति में जाना जा रहा है
और यदि ऐसा है तो यह, यह की दूसरी पंक्ति के बाहर मुद्रित करने के लिए जा रहा है
STAT110 होने जा रहा है, जो सभी क्षणों का पता लगाएं.
>> एक आखिरी बात एसक्यूएल कमजोरियों पर है.
मैं दाऊद इस पर व्याख्यान में एक छोटा सा छुआ पता है.
आप बाद में इसे पढ़ सकते हैं. यह वास्तव में अजीब है.
SQL इंजेक्शन मुश्किल बात का एक प्रकार है.
मान लीजिए कि आप सिर्फ सही आपकी क्वेरी में उन चर छड़ी है कि हम कहते हैं,
आपको लगता है कि पहली पंक्ति में देख सकते हैं.
तो यह ठीक है, ठीक लगता है? तुम बस उपयोगकर्ता नाम में डाल रहे हैं
और अपने एसक्यूएल क्वेरी के लिए पासवर्ड, और आप इसे बंद जहाज और अपने डेटा तालिका में है जो कुछ प्राप्त करना चाहते हैं.
यह बहुत आसान लगता है. तो, किसी में डालता कह देता है
पासवर्ड के लिए, यह या पाठ यहीं -
वास्तव में लाल बॉक्स में होना चाहिए.
तो चलो वे में है कि पासवर्ड डाल कि हम कहते हैं - कि वे प्रवेश कर रहा है.
इसलिए वे डालने या "1" = 1 रहे हैं.
करने के लिए एक मूर्खतापूर्ण पासवर्ड की तरह.
अब चलो बस में जगह ले जाने, और अब आप कि SQL क्वेरी में ध्यान देंगे कि,
आप ध्यान देंगे, क्योंकि यह हमेशा सच करने के लिए है कि मूल्यांकन
आप एसक्यूएल क्वेरी इस जानकारी का चयन कर सकते हैं
या तुम सिर्फ = 1 1 हो सकता है.
तो यह है कि हमेशा सच करने के लिए मूल्यांकन करने के लिए जा रहा है.
कि हैकर आपके सिस्टम में टूट सकता है कि क्योंकि इसका मतलब है कि वास्तव में काम करने के लिए नहीं जा रहा है.
इस का हल आप पीडीओ प्रणाली का उपयोग किया है,
जो, आप प्रश्न चिह्न का उपयोग करने का मतलब है कि
क्या आप pset 7 में इस्तेमाल लोगों को, जो
क्या आप कुछ करना चाहते हैं, जहां के स्थान पर एक प्रश्न चिह्न का उपयोग करने जा रहे हैं जहां,
और, तो आप एक अल्पविराम लिए जा रहे हैं, और फिर आप बाद में होगा
अपने स्ट्रिंग के बाद, आप चाहते हैं कि विभिन्न चर अपने प्रश्न चिह्न में बदलने के लिए.
तो क्या अब मैं इन लाल प्रश्न चिह्न है कि यहाँ ध्यान देंगे.
मैं बाद में इसी क्रम में उन्हें बदलने के लिए पता है तो फिर मैं मेरा तार के बाद चर डाला.
किसी को इस तरह से अगर यह होता है कि, यकीन है कि कर देगा
और वे सुनिश्चित करेंगे कि, या 1 = 1 स्थिति है
वापस अंत में, यह वास्तव में एसक्यूएल क्वेरी नहीं टूटेगा सुनिश्चित करें.
ठीक है, PHP और एसक्यूएल का एक बवंडर, कि यह बहुत सुंदर है तो.
आप सभी को शुभकामनाएँ, और अब अयस्क के लिए
>> [Oreoluwatomiwa Babarinsa] सब ठीक है. कुछ जावास्क्रिप्ट पर जाने के लिए समय
और कुछ अन्य चीजों को बहुत जल्दी तो हम आपको आज रात तक पकड़ नहीं है.
जावास्क्रिप्ट. हां. जावास्क्रिप्ट कथित, एक अच्छी बात की तरह है.
आप वास्तव में जावास्क्रिप्ट के बारे में पता करने की जरूरत बातें, यह की तरह की तरह है
कृपया अपने वेब एप्लिकेशन कर रही हो जा रहा है की क्लाइंट साइड अंत.
तुम सिर्फ सर्वर साइड पर हर समय का ध्यान रखना नहीं चाहते हैं कुछ बातें की.
सभी छोटे बातचीत,, एक बात पर प्रकाश डाला कुछ गायब.
तुम सच में अपने सर्वर से उस के लिए हर समय बात करने के लिए नहीं करना चाहती.
और उस में से कुछ सर्वर साइड पर करने के लिए भी संभव नहीं है.
हम जावास्क्रिप्ट की तरह कुछ की जरूरत क्यों है.
जावास्क्रिप्ट के बारे में अच्छी बातें: यह गतिशील रूप से लिखा गया है.
इसका मतलब क्या यह अपने कार्यक्रम में जानने की जरूरत नहीं है
आप इसे लिखने के बाहर जब क्या, वास्तव में, चर रहे हैं.
यह चल रहा है के रूप में यह बस की तरह यह पता लगा लेंगे.
इसके बारे में अच्छा कर रहे हैं कि अन्य बातें: यह एक घुंघराले ब्रेस भाषा है,
जो वाक्यविन्यास सी और PHP के समान है इसका मतलब है.
आप जावास्क्रिप्ट सीख रहे हैं जब ज्यादा rework करने की जरूरत नहीं है.
यहाँ हम जावास्क्रिप्ट का एक छोटा सा है.
यहीं दिलचस्प बात यह है कि, तुम इसे देखो, तो है
हम सिर टैग में सही वहाँ जावास्क्रिप्ट का एक सा है.
क्या है मूल रूप से एक जावास्क्रिप्ट फ़ाइल शामिल है करता है.
इससे आप अपने प्रोग्राम में जावास्क्रिप्ट शामिल कर सकते हैं एक ही रास्ता है.
फिर दूसरा छोटा सा है, वास्तव में कुछ इनलाइन जावास्क्रिप्ट है
बहुत सीएसएस के साथ एक इनलाइन शैली के समान,
और अगर आप अभी बहुत जल्दी वहाँ कुछ कोड लिख रहे हैं.
जावास्क्रिप्ट सरणियों है.
बहुत उपयोगी, चारों ओर डेटा रखने के लिए सिर्फ एक और तरीका.
बहुत अच्छा और आसान वाक्यविन्यास.
आप सब कुछ का उपयोग और सब कुछ एक साथ रखने के लिए वर्ग कोष्ठक का उपयोग करें.
बहुत जटिल कुछ नहीं है.
सामान्य में जावास्क्रिप्ट और पटकथा भाषाओं के बारे में अच्छी बात
आप सरणी के आकार के बारे में चिंता करने की ज़रूरत नहीं है.
तुम बस array.length का उपयोग करें और इसे का ट्रैक रख सकते हैं,
और भी सरणी बढ़ने या आप इसे करने की आवश्यकता के रूप में छोटा कर सकते हैं.
तो तुम भी, किसी भी प्रकार के बारे में चिंता करने की जरूरत नहीं है
अरे नहीं, मैं अधिक बातें, या ऐसा कुछ भी आवंटित की जरूरत है.
>> यहाँ शांत बात जावास्क्रिप्ट वस्तुओं बुलाया कुछ किया है.
यह एक वस्तु उन्मुख भाषा है, इसलिए यह है क्या, अनिवार्य रूप से,
समूह डेटा के लिए आप के लिए एक तरह से एक साथ, एक संरचना करने के लिए कुछ इसी तरह,
लेकिन आप एक संरचना की तरह या एक साहचर्य सरणी वाक्यविन्यास में यह उपयोग कर सकते हैं.
यह बहुत आसान है और क्या आप इस बात से कर सकते हैं एक साथ समूह डेटा है
आप संबंधित है कि डेटा का एक गुच्छा है.
यह आप पर एक कार का वर्णन करने की जरूरत है सब बातें है, क्योंकि
आप विभिन्न स्थानों के एक झुंड में यह करने की जरूरत नहीं है.
तुम सिर्फ जावास्क्रिप्ट में 1 वस्तु में छड़ी कर सकते हैं.
आप शायद जानते हैं, पुनरावृति को उन कठिन कार्यों में से एक है.
तुम बस फिर से एक से अधिक से अधिक यह कर. आप कार में हर वस्तु से बात करने की जरूरत है
या आप एक सूची या ऐसा कुछ में हर मद के माध्यम से जाने की जरूरत है.
तो कृपया जावास्क्रिप्ट, पीएचपी, एक foreach वाक्यविन्यास के समान है.
इस मामले में, यह पाश में के लिए एक है.
आप केवल वस्तुओं पर इस का उपयोग करना चाहते हैं.
आप सरणियों पर इस का उपयोग हो जो कुछ समस्याएं हैं.
यह आम तौर पर है, हालांकि, कि बहुत उपयोगी है, उन चीजों में से एक है
आप भूमि के ऊपर का एक बहुत समाप्त क्योंकि
तुम अपने आप से अपने उद्देश्य में सब कुछ ऊपर खींचने के लिए नहीं है क्योंकि.
आप सभी प्रमुख नाम याद नहीं करना पड़ेगा.
आप बस की तरह इस वाक्य रचना में उन्हें वापस मिलता है.
इस में, के लिए के साथ, तुम सिर्फ याद रखना चाहते हैं
आप तालिका हैश करने के लिए एक बहुत ही इसी तरह, सभी चाबी वापस हो रही है.
आप उस से याद है कि आप एक स्ट्रिंग में रखा जाएगा, जब आप बाहर कुछ मिल सकता है
कि इसके साथ एक संबद्ध मूल्य होगा.
क्या आप इस बात से कर सकते हैं, आप बिलकुल ठीक कह सकता है
मैं एक कार में डाल दिया, और मैं एक फेरारी यह कहा जाता है.
ताकि आप बाद में फिर स्ट्रिंग फेरारी में डाल सकते हैं, और आपको लगता है कि बाहर निकल सकते हैं.
और तुम पाश में के लिए के साथ, एक पाश में ऐसा कर सकते हैं.
तो सिर्फ वस्तुओं के बारे में अधिक. आपको याद करने की जरूरत है इस से चाबी बात
, आप इन के साथ चाहते हैं जब भी आप वाक्यविन्यास की तरह वस्तु संरचना का उपयोग कर सकते हैं
क्या आपके स्ट्रिंग के रूप में उपयोग करने के लिए जा रहा एक वैध चर नाम नहीं है अगर छोड़कर.
आपको लगता है कि वहाँ पर देखने के लिए तो, अगर हम रिक्त स्थान के साथ कुंजी है.
ठीक है, तुम object.key डाल रहे थे, अंतरिक्ष, साथ, अंतरिक्ष, रिक्त स्थान,
कि सिर्फ वाक्य रचना से मतलब नहीं होता.
तो आप केवल ब्रैकेट वाक्यविन्यास के इस तरह के साथ ऐसा कर सकते हैं.
>> इसके अलावा, जावास्क्रिप्ट बहुत गुंजाइश वार PHP के लिए है.
आप गुंजाइश को संबोधित करने का 2 तरीके हैं.
आप एक चर के सामने वार नहीं कर सकते हैं,
और कहा कि अभी यह वैश्विक है इसका मतलब है.
आप कहीं से भी देख सकते हैं. आप एक अगर बयान में इस डाल रहे थे, तो भी
कहीं और अपने कोड में उस बिंदु के बाद आप उस चर देख सकता था.
एक और बात है, हालांकि, यह तुम अंदर हो जो भी कार्य करने के लिए सीमित है, वर के साथ है
आप एक समारोह में नहीं हैं, तो ठीक है, यह वैश्विक है.
आप एक समारोह में कर रहे हैं लेकिन अगर यह है कि समारोह के भीतर ही दिखाई है.
मैं हाँ, एक उदाहरण है, लेकिन नहीं है. यह उन चीजों में से एक है, जहां
आप, आप वैश्विक क्या बनना चाहते चर का प्रबंधन कर सकते हैं
क्या चर आप स्थानीय होना चाहता हूँ, लेकिन आप इस बारे में सावधान रहने की जरूरत है,
क्या आप सी में करना ठीक अनाज नियंत्रण के प्रकार की जरूरत नहीं है क्योंकि,
कुछ पाश के लिए एक में घोषित किया जाता है, तो यह पाश के लिए कि में रहने के लिए जा रहा है, जहां.
हम वास्तव में के लिए जावास्क्रिप्ट का उपयोग कर के बारे में परवाह बात सही, वेब पेज से छेड़छाड़ कर रहा है?
मेरा मतलब है, यही कारण है कि हम यह कर रहे है.
>> हम डोम बुलाया कुछ का उपयोग करने के लिए.
दस्तावेज़ ऑब्जेक्ट मॉडल.
असल में, यह क्या करता है यह सब अपने HTML लेता है
और एक दूसरे के अंदर नेस्ट कर रहे हैं कि वस्तुओं का एक गुच्छा में मॉडल इसे बाहर.
आप इस तरह से कुछ के साथ बाहर शुरू.
आप बाहर वहाँ कोड का एक गुच्छा है कि तरह की है, मेरे लिए सही है, पर है -
तुम्हें पता है कि हेरफेर करने के लिए बहुत मुश्किल होगा लगता होगा,
आप पाठ का एक गुच्छा के माध्यम से पार्स करने की होगी क्योंकि
और बातों के अलावा टुकड़ा खा रहे हैं. और इसे सही ढंग क्या स्वरूपित नहीं किया गया तो क्या होगा?
बुरी बातें होती होगी.
तो, जावास्क्रिप्ट आप के लिए इस बात का ख्याल रखता है, और आप एक अच्छा डेटा संरचना मिल
आप सिर्फ एक दस्तावेज है, जहां मेरी बाईं तरफ एक तरह,
और कि अंदर आप HTML बुलाया कुछ है
और कि अंदर आप एक सिर और एक शरीर है
और कहा कि सिर के अंदर तुम, वगैरह, वगैरह वगैरह एक शीर्षक है.
यह है, यह सिर्फ इतना है कि एक वेब पेज से छेड़छाड़ को सरल
ओह, मैं सिर्फ इस उद्देश्य के लिए बात करना चाहता हूँ.
क्या आप अपने आप को बनाया एक और उद्देश्य के लिए बात करेंगे एक बहुत ही इसी तरह की तरह.
जैसे मैंने कहा, सभी डोम दस्तावेज़ वस्तु में है.
या तो यह सिर्फ एक जगह है और उसके बाद आप चीजों को खोजने के लिए यह भीतर जा सकते हैं
और आप यह कर सकते हैं - यह वहाँ है, यह कर की पुरानी शैली है,
आप document.getElementById करते हैं, और जहां उसके बाद नाम,
आप शायद बता सकते हैं और, यह एक समय के बाद बहुत बोझल हो जाता है.
तो आप शायद ऐसा करने के लिए नहीं करना चाहती. हम यही कारण है कि
हम इस बारे में बाद में बात करने जा रहे हैं अगले बात.
यहां महत्वपूर्ण बात यह है, कि सब ठीक है, तुम सही, इन सभी तत्वों है?
तो शायद मैं जब पेज लोड कुछ का रंग बदल सकते हैं.
तो क्या हुआ? क्या मेरे उपयोगकर्ता कुछ क्लिक करता है तो क्या होगा?
मुझे लगता है वे कुछ क्लिक करने पर यह दिलचस्प कुछ करना चाहते हैं.
हम घटनाओं है यही कारण है कि.
आप मूल रूप से अपनी डोम में किसी भी तत्व को पा सकते हैं,
और फिर हे, कहते हैं. , इस लोड करता है या किसी को यह क्लिक करता है
या वे माउस इसे खत्म, इसके साथ कुछ करना है.
और जो तुम्हारे पास क्या आप के लिए इस संभाल कि कार्य किया है.
इन कार्यों घटना संचालकों हैं.
क्या they're - यह कह रही है की सिर्फ एक अच्छा तरीका है,
इस घटना होता है जब इस समारोह में केवल मार डाला है.
तो यह होता है कि घटना को संभालती है.
यह आपको एक ईवेंट हैंडलर बाहर करना होगा कैसे है.
मैं कुछ बटन है, और आप इसे क्लिक करते हैं, तो यह फट जाएगा.
तो बटन पर क्लिक न करें.
यह सही है, यह आ का एक तरीका है?
, आप एक बटन टैग है, और क्लिक पर आप कहते हैं कि एक स्ट्रिंग है
ओह, वैसे, मैं मेरे लिए इस विस्फोट बात करते हैं.
अन्यथा, यह सिर्फ तुम अभी बनाया एक नियमित रूप से बटन की तरह है.
आप भी इस दूसरे तरीके से कर सकते हैं,
हम jQuery के बारे में बात करने के बाद डोम तत्व हथियाने, लेकिन हम चाहते हैं कि बचा लेंगे.
>> JQuery: यह पार ब्राउज़र है कि एक पुस्तकालय है.
तुम बहुत ज्यादा कुछ में इसका इस्तेमाल कर सकते हैं.
और यह सिर्फ तुम्हारे साथ काम करने के लिए उपकरणों का एक बहुत कुछ देता है.
जावास्क्रिप्ट, शक्तिशाली, जबकि आप सभी की जरूरत के उपकरण नहीं है क्योंकि
वास्तव में एक वेब अनुप्रयोग से निपटने के लिए बॉक्स से बाहर तुम करना चाहते हो सकता है.
इसलिए यह बहुत सारी बातें सरल करता है कि आप कार्यों की एक बहुत कुछ देता है
आप सामान्य रूप से और फिर से और अधिक से अधिक, अपने आप को लिखना होगा कि बॉक्स के बाहर.
और सिर्फ बातें बहुत आसान बना देता है.
तुम भी आप उन सभी तत्वों को बाहर ले जाने जो चयनकर्ताओं, है
अपने डोम और अधिक से बस, बजाय ये बहुत लंबे समारोह फोन का उपयोग करने के लिए होने का.
इन चयनकर्ताओं पर. तुम चलो कहना है वहाँ ऊपर है,
मैं आईडी के साथ एक तत्व प्राप्त करना चाहते हैं "रॉक."
खैर, jQuery में, यह सिर्फ $ और फिर एक पाउंड है कि एक स्ट्रिंग, और तब है "रॉक."
यह बहुत आसान है और इस समस्या से निपटने के पारंपरिक जावास्क्रिप्ट जिस तरह से एक बहुत तेज है.
और तुम वर्गों और तत्व प्रकार के लिए इसी तरह की बातें है.
jQuery है - शांत सुविधाओं की है कि आप की तरह सेक कर सकते है
अपने डोम पर अपने प्रश्नों के नीचे बहुत, बहुत तेज.
अब हम वापस घटना से निपटने के लिए कर रहे हैं, और यह आपके jQuery में एक घटना को संभाल कैसे होगा है.
तो क्या हम यहाँ जा रहे हैं हम सब ठीक है, कह रहे है. मैं एक स्क्रिप्ट टैग है, है ना?
इसलिए मैं इस इनलाइन जावास्क्रिप्ट है.
हम क्या करने जा रहे हैं हम सब ठीक है, कहने के लिए जा रहे है.
दस्तावेज़, दस्तावेज़ लोड किया गया है, जिसका अर्थ है, के लिए तैयार है
, हम उस समारोह में जाने के लिए जा रहे हैं, और हम सब सही कहने जा रहे हैं
इस समारोह में वास्तव में कुछ और कर रहा है.
यह मूल रूप से सब ठीक है, मुझे आईडी के साथ तत्व मिलता है, कह रही है "MyID."
और फिर यह आप इसे क्लिक करने पर निष्पादित करता है कि एक समारोह हैंडलर दे.
असल में यह क्या करता है, यह कहना है, सब ठीक है.
, पेज लोड किया जाता है, तो मैं में, इस तत्व को खोजने के लिए जा रहा हूँ
यह इस ईवेंट हैंडलर देते हैं, और यह मूल रूप से आप के लिए अपने पृष्ठ सेट.
और यह आपके घटना से निपटने के बारे में सोचना चाहिए कि कैसे है.
तुम बस के बारे में सोचने के लिए ठीक है, कुछ होता है, मैं ऐसा करने के लिए क्या चाहिए चाहते हैं?
क्या आप ठीक है, मैं इस बात को यकीन है कि इस बात की वार्ता करने की जरूरत है, के बारे में सोचना नहीं चाहता है
इस बात ब्ला ब्ला ब्ला, आप सिर्फ घटनाओं के संदर्भ में बात में बात करना चाहते हैं.
जब ऐसा होता है, ऐसा होता है. जब ऐसा होता है, ऐसा होता है.
चीजें अन्य बातों के ट्रिगर तो यह बहुत अच्छी बात है.
लेकिन आप जटिल कोड कोशिश करते हैं और ऐसा नहीं करना चाहते हैं
जहां आप एक ही समय में कई चीजों को ट्रिगर कर रहे हैं
आप बस अपने आप को एक सिर दर्द देने के लिए जा रहे हैं.
>> ठीक है. अब हम अपने पेज घटनाओं को संभाल करने के लिए मिल सकता है,
लेकिन मेरे उपयोगकर्ता एक बटन क्लिक कहते हैं.
क्या, मैं वापस सर्वर से अनुरोध है कि भेजना चाहते हैं
एक नया पेज लोड होने की वजह से है, लेकिन मैं पृष्ठ को फिर से लोड नहीं करना चाहती
हर बार की तरह कर थकाऊ हो जाता है, और यही कारण है कि मैं क्या ज़रूरत है
फिर हैडर नीचे खींच, और फिर पाद लेख,
और सभी पेज के तत्वों को फिर से
सिर्फ ग्रीटिंग या समय को ताज़ा करने के लिए?
हम अजाक्स की तरह कुछ है तो इसलिए.
क्या हम अजाक्स के साथ यहाँ कर सकते हैं, हम सब सही कह सकता है
मैं सर्वर से कुछ डेटा भेजने के लिए चाहते हैं,
और मैं तो मैं अपने पेज को अपडेट कर सकते हैं एक प्रतिक्रिया वापस पाने के लिए चाहते हैं,
या शायद सिर्फ जरूरी उपयोगकर्ता के लिए कुछ भी नहीं दिखा है कि कुछ एल्गोरिथम गणना करते हैं.
क्या आप ऐसा करने की जरूरत है? वैसे, अगर आप आप से बात करने की जरूरत है एक यूआरएल की जरूरत है.
अपने सर्वर सिर्फ जादुई कहीं से में सुन सकते हैं.
आप इस डेटा भेज रहे हैं एक विशिष्ट जगह की आवश्यकता है.
और तुम भी भेजने के लिए कुछ डेटा की जरूरत है, या हो सकता है यह एक तिथिहीन क्वेरी है.
तुम बस अरे, मैं जिंदा, या ऐसा कुछ कर रहा हूँ, सर्वर को वापस पिंग और कहना चाहता हूँ.
और फिर आप मूल रूप से सफलता के साथ संभालती है कि एक समारोह चाहते हैं.
मान लीजिए कि आप अपने सर्वर से कुछ जानकारी वापस मिल हम कहते हैं,
और आप अपने पृष्ठ पर उपयोगकर्ता के शीर्षक बदलना चाहते हैं.
तो तुम वापस जानकारी मिल जाएगा,
और आप स्क्रीन को उस धक्का होगा.
पेज तैयार है तो क्या होता है, यह है,
आप स्वागतकर्ता नामक इस बटन के लिए क्लिक समारोह पर एक बना.
उस बटन धक्का दिया है, तब क्या यह तो करता है,
आप greetings.php के लिए बात करते हैं, तो आप एक पोस्ट अनुरोध करना
और तुम अरे, मुझे अपने पेज से कुछ मिलता है, का कहना है.
हम वास्तव में, कि वर्णन करने के लिए की जरूरत है, लेकिन greetings.php नहीं है
चलो बस कहना है, "हैलो दुनिया." वापस देता है
तो हम, "नमस्ते विश्व" यह वापस पाने के लिए और इस की सफलता पर
कुछ गलत हो जाता संभालने, तो हम सिर्फ इस लक्ष्य स्थान पर जाना
हम निर्दिष्ट और हम बस वहाँ में प्रतिक्रिया छड़ी कि.
और यह एक Ajax क्वेरी स्थापित करने का एक बहुत ही आसान तरीका है.
>> बहुत जल्दी, रोब की तरह, पहले से ही इस उल्लेख
बातें गलत जा सकते हैं, बुरी बातें हो सकता है,
तो आप इन HTTP प्रतिक्रिया कोड के साथ खुद को परिचित करना चाहते हैं.
क्या इन कर रहे हैं कि सब कुछ ठीक चला गया, 200, की तरह, सिर्फ हैं.
कुछ और, बुरी बातें हुआ.
यह आम तौर पर आप याद रखना चाहते हैं तो बात है.
लेकिन यह इन सभी को पता करने के लिए अच्छा है.
और अंत में, एक बार हम उस सब के माध्यम से चला गया है,
हम डिजाइन के बारे में बहुत जल्दी से बात करने की जरूरत
और फिर हम आप सब छोड़ दे सकते हैं.
डिजाइन. आप याद रखना चाहते हैं बातें.
इन सवालों से पूछो: कौन इस का उपयोग होगा?
क्या वे के लिए यह प्रयोग किया जाएगा? मेरे उपयोगकर्ताओं के बारे में परवाह है?
वे क्या बारे में परवाह नहीं है?
तुम बस एक app बनाने के लिए और यह सिर्फ बढ़ने नहीं करना चाहती
और इस विशाल, तुम भी खत्म नहीं कर सकता कि सभी उपभोक्ता बात हो गई है.
आप पता करना चाहते हैं असतत लक्ष्यों और योजनाओं और बातें करना चाहते हैं.
यह सरल बनाएं. इस सब के सब मूल रूप से कहते हैं,
यह आसान उपयोगकर्ता के लिए इसका इस्तेमाल करने के लिए करते हैं, वास्तव में, यह इस स्लाइड की तरह पाठ की एक विशाल बूँद है नहीं बनाते हैं.
तुम बस यह किसी में जाने के लिए यह बहुत आसान है जहां कुछ होना चाहता हूँ
और वे क्या करना चाहते हैं करते हैं.
आप उन्हें 5 पन्नों नेविगेट करने के लिए है नहीं करना चाहती
आपकी साइट के अपने प्रधानमंत्री समारोह को पाने के लिए.
गूगल से पहले 5 पृष्ठों की थी, तो आप भी कुछ खोज सकते हैं,
कोई भी इसका इस्तेमाल होता है.
और अंत में, कागज प्रोटोटाइप, फोकस समूह.
अच्छी डिजाइन और परीक्षण प्रथाओं है.
आप यह आप के लिए काम करता है, सिर्फ इसलिए कि
किसी और को यह काम करता है सोचता है मतलब नहीं है.
लेकिन हाँ, यह बात है.
[CS50.TV]