কেন শেষ হচ্ছে না? [বন্ধ]


95

আপনার টাস্ক: এমন একটি প্রোগ্রাম লিখতে যা স্পষ্টভাবে শেষ হওয়া উচিত, তবে এটি কখনই (কম্পিউটার ক্রাশের পরিমাণে) করে না। এটিকে দেখতে কোনও সাধারণ কাজ সম্পাদন করা উচিত বলে মনে করুন: সংখ্যা যুক্ত করা, কোনও কিছু মুদ্রণ করা, ... তবে এটি কেবল অসীম লুপে ধরা পড়ে।

আপনার প্রোগ্রামটি খুব স্পষ্ট এবং সহজ করার চেষ্টা করুন, যখন এটি বাস্তবে অপ্রত্যাশিত লুপে আটকে যাবে। ভোটাররা: তারা কীভাবে "আন্ডারহ্যান্ডড" তা উত্তরগুলি বিচার করুন!

এটি একটি জনপ্রিয়তা প্রতিযোগিতা: সৃজনশীল হোন!


6
প্রশ্নটি আরও প্রশস্ত করতে আমি কী করতে পারি দয়া করে কেউ দয়া করে ব্যাখ্যা করতে পারেন? আমি এখানে নতুন. ধন্যবাদ!
সংখ্যা 9

6
এটি কেবল টাইপস এবং শুরুর ভুলগুলির একটি বৃহত তালিকা হতে চলেছে যার ফলে লুপগুলি ঘটে।
বিল উড্ডার

আকর্ষণীয় প্রশ্ন, তবে আমি এখনও কোনও সত্যিকারের সৃজনশীল উত্তর দেখিনি। আমি লুপ বা স্পষ্ট পুনরাবৃত্তি ব্যবহার না করে এমন কাউকে ভোট দেওয়ার প্রতিশ্রুতি দিচ্ছি!
ApproachingDarknessFish

14
আমি জানি না এটি গণনা করে তবে আমার মাইক্রোসফ্ট অফিস এই মুহূর্তে ঠিক এরকম আচরণ করছে।
স্তর নদী সেন্ট

1
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এখানে অন্তর্নিহিত চ্যালেঞ্জগুলি আর টপিকের নেই। meta.codegolf.stackexchange.com/a/8326/20469
বিড়াল

উত্তর:


185

জাভাস্ক্রিপ্ট

var x=prompt('Enter a value under 100');
while (x != 100) {
  x=x+1;
}
console.log('End!');

প্রম্পট () একটি স্ট্রিং দেয় এবং লুপটি '1' অক্ষর যুক্ত করে, এটি কখনই 100 এর সমান হবে না।


13
আপনি আমাকে সেই একটি দিয়ে পেয়েছেন ... (উচ্চতর ভোটের উদাহরণগুলি হ'ল কেবল সিনট্যাক্সকে অপব্যবহার করছে ... তবে এটি দুর্দান্ত!
bwoebi

4
কুবুন্টুতে ক্রোম প্রতিক্রিয়াবিহীন হয়ে উঠেছে, সবকিছু ঝুলিয়ে রেখে আমাকে হার্ড রিসেট করতে হয়েছিল :)
সের্গেই তেলশেভস্কি

4
@ ভ্যালাকারডোস: পাইথন জাভাস্ক্রিপ্টের অন্তর্নিহিত ধরণের রূপান্তরটি করবে না। পাইথন-তে সমতুল্য কোড raw_inputবা পাইথন 3 ব্যবহার inputকরে a TypeError
ব্যবহারকারী 2357112

2
'- (: আসলে পরীক্ষা করা হয় না যে মান 100 অধীনে আসলে তাই এটি সাধারণত স্টপ যখন আপনি প্রবেশ "100"
C.Champagne

1
@ সংকল্প, এখানে +অপারেটরটি স্ট্রিং কনটেনটেশন, সংযোজন নয়।
মাইকেল এম।

87

সি

কেবলমাত্র একটি প্রাথমিক উদাহরণ প্রোগ্রাম যা সিতে তিনটি ধরণের ধরণের লুপগুলি চিত্রিত করে

int main() {

    int x = 0;

    // Multi-statement while loops are of the form "while (condition) do { ... }" and
    // are used to execute multiple statements per loop; this is the most common form
    while (x < 10) do {
        x++;
    }

    // x is now 10

    // Null-statement while loops are of the form "while (condition) ;" and are used
    // when the expression's side effect (here, decrementing x) is all that is needed
    while (x-- > 0)
        ; // null statement

    // x is now -1

    // Single-statement while loops are of the form "while (condition) statement;"
    // and are used as a shorthand form when only a single statement is needed
    while (x > -10)
        x--;

    // x is now -10

    return 0;
}

লুপগুলিতে খোলার কোঁকড়া ধনুর্বন্ধনী আগে "do" নেই। এটি আসলে (x <10) লুপের অভ্যন্তরে একটি ডু-ওয়েল লুপ তৈরি করে যা লুপের সময় নিম্নলিখিত "নাল স্টেটমেন্ট" দ্বারা সমাপ্ত হয়। যেহেতু এক্সটি লুপের অভ্যন্তরে বৃদ্ধি পেয়েছে এবং তারপরে ডু-ওয়েল লুপের অবস্থার সাথে হ্রাস পেয়েছে, তাই অভ্যন্তরীণ লুপটি কখনই শেষ হয় না এবং তাই বাহ্যিক লুপও হয় না। শেষে "একক বিবৃতি" লুপটি কখনই পৌঁছায় না।

আপনি যদি এখনও বিভ্রান্ত থাকেন তবে এখানে দেখুন (বাহ্যিকভাবে হোস্ট করা হয়েছে কারণ কোডগল্ফ.এসই স্পয়লারগুলিতে কোড ব্লক পছন্দ করে না)।


8
হাহা, সমাধান স্পয়লারটি দেখার আগে আমি এটি আবিষ্কার করেছি। : পি
জো জে।

54
আপনি কেন "যান" অপারেটরটি ব্যবহারের এমন দুর্দান্ত সুযোগটি পেরিয়ে গেলেন? (x --> 0)
কর্সিকা

2
কি শান্তি. এটি আশ্চর্যজনকভাবে মন্দ। আমাকে এটি চারটি পড়তে পাঠিয়েছে।
প্যাট্রিক এম

1
@JoeZ। উপায় খুব সহজ। সর্বাধিক উত্সাহিত সমাধানটি আরও ভাল ছিল। এটি আমি পাইনি।
বেনামি পাই

3
@ হাট গাই, বাশের জন্য রয়েছে; করুন এবং করুন; সিনট্যাক্স করুন যাতে আমি দেখতে পাচ্ছি যে লোকেরা এতে সি-সি / সি ++ ভাষার সাথে পরিচিত না হয়েও এটিকে ফেলে দেওয়া হচ্ছে। tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html
nemec

85

জাভাস্ক্রিপ্ট

var a = true;
(function() {
  while(!a){}
  alert("infinite");
  var a = true;
})();

চলক উত্তোলন: জাভাস্ক্রিপ্ট আসলে আমার দ্বিতীয় সংজ্ঞাটি গ্রহণ করবে var a = true;, এটি হিসাবে ফাংশনটির শীর্ষে ঘোষণা করবে var a;এবং আমার অ্যাসাইনমেন্টটি a = true;অর্থের সাথে সংশোধন aকরবে যখন এটি লুপটি প্রবেশ করবে এমন সময়টিকে সংজ্ঞায়িত করা হবে।


3
কেন এটি কখনই বন্ধ হয় না এর একটি আরও ভাল ব্যাখ্যা আপনি যুক্ত করতে পারেন? দয়া করে :) সম্পর্কে "পরিবর্তনশীল উত্তোলন" গভীরতা ঢোকা
Number9

1
@ সংখ্যা 9 আমি আশা করি এটি সাহায্য করে, গুগলের তুলনায় এর থেকে আরও ভাল উদাহরণ রয়েছে;)
নিউব্রিক্ট

25
পবিত্র বিষ্ঠা এটি সেমিকোলন সন্নিবেশের চেয়েও খারাপ। +1 টি!
টমসডিং

2
এই প্রোগ্রামটির সাথে আমি যে সমস্যাটি দেখতে পাচ্ছি তা হ'ল এটি কোনও সাধারণ কাজ সম্পাদন করে বলে মনে হচ্ছে না ... দেখে মনে হচ্ছে এটি অবশ্যই কিছু করা উচিত নয়। alertলুপ পরে একটি যোগ করুন ।
পিটারটি

2
আপনি পরিবর্তন করা উচিত a = 1কাছে a = true। কোডটিতে এখনও সেইভাবে অসীম লুপ থাকবে তবে এটি স্পষ্ট হবে যে কারণটি জাভাস্ক্রিপ্টে বুলেট থেকে রূপান্তরিত করার ক্ষেত্রে কোনও তাত্পর্য নয়।
ররি ও'কেনে

49

সি শার্প

class Program
{
    // Expected output:
    // 20l
    // 402
    // 804
    // l608
    // 32l6
    // game over man

    static void Main()
    {
        var x = 20l;
        while (x != 6432)
        {
            Console.WriteLine(x);
            x *= 2;
        }
        Console.WriteLine("game over man");
    }
}

ফাংশনের প্রথম লাইনে আক্ষরিক সংখ্যাটি '201' নয়, তবে '20' ছোট ছোট 'এল' ( দীর্ঘ ডাটা্যাটাইপ) প্রত্যয় সহ। সংখ্যাটি কখনও 32৪৩২ এ আঘাত না করে বেশ দ্রুত প্রবাহিত হবে, তবে বিল্ড অপশনগুলিতে ওভারফ্লো চেকিং চালু না করা হলে প্রোগ্রামটি চলতে থাকবে।
স্পষ্টতই, ভিজ্যুয়াল স্টুডিও 2013 (এবং সম্ভবত অন্যান্য সংস্করণগুলিও) আপনাকে এই কোডটির জন্য একটি সতর্কতা দেয়, এটি সুপারিশ করে যে আপনি 'এল' এর পরিবর্তে 'এল' ব্যবহার করুন।


12
ওহ, lদেখতে অনেকটা মনে হচ্ছে 1! আমি অপদার্থ. : \
জো জে।

6
উন্নতির জন্য পরামর্শ: প্রত্যাশিত আউটপুট বিভাগের 1 টি পাশাপাশি l এর সাথে প্রতিস্থাপন করুন (আপনার সাথে তুলনা করার জন্য সত্যিকারের 1s থাকা থাকলে অদ্ভুত চরিত্রটি চিহ্নিত করা সহজ)
অ্যালেন গোল্ড

3
হ্যাঁ, এটি বেশ পরিবেশ-নির্দিষ্ট বলে মনে হচ্ছে। @ মাইকেল এর ফন্টটি আমার বাড়ির কম্পিউটারের ফন্টের থেকে খুব আলাদা দেখাচ্ছে ( imgur.com/PKIuJpr - ক্রোম, উইন্ডোজ 8), এবং কৌশলটি আমার বাড়ির কম্পিউটারের চেয়ে আমার ওয়ার্ক কম্পিউটারে আরও ভাল কাজ করেছে বলে মনে হচ্ছে, যদিও তারা বেশ মিল পেয়েছে though চশমা। আমার ফোনের ব্রাউজারটি কোনও স্থির ফন্টে কোড দেখায় বলে মনে হচ্ছে না, এবং কৌশলটি এটিতে কোনও কাজ করে না।
বেনম

1
এফটিআর, এটি আমার ওয়ার্ক কম্পিউটারে দেখতে কেমন দেখাচ্ছে ( imgur.com/Opfs3BH - ফায়ারফক্স, উইন্ডোজ)) আমি বিবেচনা করি যে একজন ব্যক্তি এমনকি যথেষ্ট বিস্মৃত লোকদের বোকা বানাতে পারে।
বেনম

15
লোকেরা একই বর্ণনামূলকভাবে বর্ণনাকারীদের আপত্তি জানায় কেন?
বেনামে পাই ২

39

সি

যথার্থতা সম্পর্কে কীভাবে?

int main(void)
{
    double x = 0;
    while(x != 10) x += 0.1;
    return 0;
}

কল্পনা করুন যে আপনাকে কম্পিউটারের মেমরিতে অনেকগুলি পূর্ণসংখ্যার সং <<0; 3> সঞ্চয় করতে হবে। এই ব্যাপ্তিতে (0,1,2,3) কেবলমাত্র 4 টি পূর্ণসংখ্যার সংখ্যা রয়েছে। এটিকে স্মৃতিতে সঞ্চয় করতে 2 বিট ব্যবহার করা যথেষ্ট। এখন ভাবুন আপনাকে <0; 3> ভাসমান পয়েন্ট সংখ্যা বিস্তৃত রাখতে হবে। সমস্যাটি হ'ল এই ব্যাপ্তিতে অসীম সংখ্যক ভাসমান পয়েন্ট সংখ্যা রয়েছে। অসীম সংখ্যার কীভাবে সংরক্ষণ করবেন? এটা অসম্ভব. আমরা কেবল সীমাবদ্ধ সংখ্যার সংখ্যা সঞ্চয় করতে পারি। এই কারণেই ০.১ এর মতো কিছু সংখ্যা আসলে আলাদা। 0.1 এর ক্ষেত্রে এটি 0.10000000000000000006। যতক্ষণ আপনি ভাসমান পয়েন্ট সংখ্যা ব্যবহার করেন না কেন শর্তে == বা! = ব্যবহার না করার পক্ষে এটি সুপারিশ করা হয়।


1
কিভাবে কাজ করে?
এমএইচএমডি

5
রাউন্ডিং ত্রুটি। 0.1 আসলে 0.10000000000000000006 কারণ বাইনারি 0.1 দশমিক 1/3 এর মতো - এটি বাইনারি সম্প্রসারণ অসীম এবং পর্যায়ক্রমিক।
orion

3
আসলেই কোনও গোলাকৃতি ত্রুটি নয়। ভাসমান পয়েন্টের মানগুলি কোনও সংখ্যার আনুমানিক উপস্থাপনা। আনুমানিক মানগুলির মধ্যে সঠিক তুলনা করা কার্যকর হচ্ছে না।
একেহোল্যান্ড

4
এজন্য আপনার (প্রায়) কখনও সমতার জন্য ভাসা / ডাবল তুলনা করা উচিত নয়।
ইমানুয়েল ল্যান্ডহোম

1
আমি এটি দেখতে অপেক্ষা করছিলাম। খুশী হলাম।
ডেভিড কনরাড

33

এইচটিএমএল / জাভাস্ক্রিপ্ট

আপনার পৃষ্ঠাতে একটি ইনপুট বাক্স রয়েছে তা কল্পনা করুন:

<input onfocus="if (this.value === '') alert('Input is empty!');">

এবং এখন আপনি এটিতে কিছু টাইপ করতে চান ... Chrome এ চেষ্টা করুন: http://jsfiddle.net/jZp4X/

alertফাংশন সহ ডাকা স্ট্যান্ডার্ড ব্রাউজার ডায়ালগ বাক্সটি মডেল, সুতরাং এটি প্রদর্শিত হলে এটি পাঠ্য বাক্সের বাইরে ফোকাস নেয়, কিন্তু যখন এটি বরখাস্ত হয় তখন পাঠ্য বাক্সটি ফোকাসটি ফিরে পায়।


5
ফায়ারফক্সে, ইনপুটটিতে সতর্কতা বন্ধের সাথে অটোফোকাস নেই, এবং দ্বিতীয় বার থেকে এটি আমাকে আরও সতর্কতা না দেখানোর প্রস্তাব দেয় এবং তারপরে আমি সাধারণত পাঠ্যবক্সে লিখতে পারি
আইনাসিও

6
সুন্দর. কোন লুপ বা পুনরাবৃত্তি জন্য +1।
ApproachingDarknessFish

5
ফায়ারফক্স বা ক্রোমের কোনও লুপ নেই। ডায়ালগ ক্লিক করা হলে এফএফ একবার সতর্কতা দেখায়, আপনি এটিকে বরখাস্ত করুন এবং এটি এর শেষ the পুনরাবৃত্তি করতে আবার ক্লিক করতে পারেন। ক্রোম একই কাজ করে তবে বাক্সটি ফোকাসে ফেলে দেয় এবং আপনি এটিতে টাইপও করতে পারেন। দুঃখিত, সম্ভবত পুরানো সংস্করণগুলিতে এটি একটি সমস্যা ছিল, তবে আর নয়।
রোমানস্ট

6
আইই ১১ আমার জন্য ক্রোমের মতোই কাজ করে। আমি মনে করি আপনি অজান্তেই এমন কোনও কিছুর উদাহরণ খুঁজে পেয়েছেন যা ম্যাকের প্রতিটি আধুনিক ব্রাউজারে একভাবে কাজ করে এবং উইন্ডোজের প্রতিটি আধুনিক ব্রাউজারে আলাদা উপায়ে কাজ করে!
রোমানস্ট

1
এমএসআইই 11-এ সাধারণভাবে (কোনও লুপ নেই) কাজ করে
কিনোকিজুফ

32

সি ++

#include <iostream>
#include <cstddef>

int main() {
    size_t sum = 0;
    for (size_t i = 10; i >= 0; --i) {
         sum += i;
    }
    std::cout << sum << std::endl;
    return 0;
}

শর্তটি i >=0সর্বদা সত্য কারণ সাইজ_টি স্বাক্ষরযুক্ত নয়।


2
চমৎকার একটি, তবে
সংকলকরা

2
@ সিংসিস হ্যাঁ সংকলকরা করেন। তবে আপনি কেবল সংকলক সতর্কতা চালু করলেই। g++এগুলি ছাড়া আপনাকে এ সম্পর্কে আপনাকে সতর্ক করবে না।
এফডিনফ

5
আপনার সর্বদা -Wall --pedanticযাইহোক ব্যবহার করা উচিত ।
মার্টিন ইয়েডিং

3
@ কুইওভারফ্লো সতর্কতা কেবলমাত্র সেই পতাকাগুলির সাথে দেখাবে না। আপনার প্রয়োজন -Wsign-compareযা দিয়ে চালু করা যেতে পারে -Wextra
এফডিনফ

7
এক ড্যাশ অন-অফ্যান্টিক। #pedantic
ডেভিড কনরাড

29

সজোরে আঘাত

(কোনও লুপ বা পুনরাবৃত্তির জন্য অনুরোধ ছিল)

#!/bin/bash

# Demo arrays

foo=("Can I have an array?")

echo $foo

echo ${foo[0]}

foo[2] = `yes`

echo $foo

echo ${foo[2]}

Foo [2] কে 'হ্যাঁ' স্ট্রিং নির্ধারণের পরিবর্তে, এটি সিস্টেম কমান্ডকে কল করে yes, যা "হ্যাঁ \ n" এর শেষ না হওয়া পরিমাণে ফু [2] পূরণ করে।


শেষ bashপর্যন্ত স্মৃতি থেকে বেরিয়ে যায় এবং এটি ক্র্যাশ হয়ে যায়
ডিজিটাল ট্রমা

4
হ্যাঁ, সত্যিই তা করে। তবে প্রশ্নটি দ্বারা
ক্র্যাশকে একধরণের

হ্যাঁ, একটি পর্যবেক্ষণ :)। সম্মত।
ডিজিটাল ট্রমা

আসলে, আমি গণ্য করি যে এই ছোট্ট কম্পিউটারে প্রোগ্রামগুলি আসলে আপনার মেশিনটি বিধ্বস্ত করেছে, বা পরিষেবা থেকে অন্য কোনও অস্বীকৃতি, বোনাস নম্বর
পেয়েছে

সংশোধন: yesকেবলমাত্র একটি কোরিউটিলস প্রোগ্রাম। সিস্কেল নয়।
এমনিইপ

28

সি

একটি ফাইলের মধ্যে চিঠি "এক্স" হারিয়ে গেছে। এটির জন্য একটি প্রোগ্রাম লেখা হয়েছিল:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  FILE* fp = fopen("desert_file", "r");
  char letter;
  char missing_letter = argv[1][0];

  int found = 0;
  printf("Searching file for missing letter %c...\n", missing_letter);
  while( (letter = fgetc(fp)) != EOF ) {
    if (letter == missing_letter) found = 1;
  }
  printf("Whole file searched.\n");
  fclose(fp);
  if (found) {
    printf("Hurray, letter lost in the file is finally found!\n");
  } else {
    printf("Haven't found missing letter...\n");
  }
}

এটি সংকলিত হয়েছিল এবং দৌড়াতে হয়েছিল এবং এটি শেষ পর্যন্ত চিৎকার করে:

Hurray, letter lost in the file is finally found!

নতুন লোকটি এসে কোডটি অনুকূলিত না করা অবধি বহু বছর ধরে চিঠিগুলি এইভাবে উদ্ধার করা হয়েছে। তিনি ডেটাটাইপগুলির সাথে পরিচিত ছিলেন এবং জানতেন যে অ-নেতিবাচক মানগুলির জন্য স্বাক্ষর করা ছাড়া স্বাক্ষরযুক্ত ব্যবহার করা আরও ভাল কারণ এর বিস্তৃত পরিসীমা রয়েছে এবং এটি ওভারফ্লো থেকে কিছুটা সুরক্ষা দেয়। সুতরাং তিনি স্বাক্ষরবিহীন ইন মধ্যে int পরিবর্তন । তিনি এসকিও যথেষ্ট পরিমাণে জানতেন যে তাদের সর্বদা অ-নেতিবাচক মূল্য রয়েছে। সুতরাং তিনি চরটি স্বাক্ষরবিহীন চরেও পরিবর্তন করলেন । তিনি কোডটি সংকলন করেছিলেন এবং নিজের ভাল কাজের জন্য গর্বিত হয়ে বাড়ি চলে গেলেন। প্রোগ্রামটি এরকম দেখাচ্ছে:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  FILE* fp = fopen("desert_file", "r");
  unsigned char letter;
  unsigned char missing_letter = argv[1][0];

  unsigned int found = 0;
  printf("Searching file for missing letter %c...\n", missing_letter);
  while( (letter = fgetc(fp)) != EOF ) {
    if (letter == missing_letter) found = 1;
  }
  printf("Whole file searched.\n");
  fclose(fp);
  if (found) {
    printf("Hurray, letter lost in the file is finally found!\n");
  } else {
    printf("Haven't found missing letter...\n");
  }
}

পরের দিন তিনি একটি সর্বনাশ ফিরে এসেছিলেন। চিঠি "এ" অনুপস্থিত ছিল এবং যদিও এটি "মরুভূমি_ফায়লে" থাকার কথা ছিল যাতে "এবিসি" রয়েছে প্রোগ্রামটি চিরতরে কেবল এটি মুদ্রণ করে যাচ্ছিল:

Searching file for missing letter a...

তারা লোকটিকে বরখাস্ত করে এবং পূর্ববর্তী সংস্করণে ফিরে গেছে মনে করে যে কারও কাছে কোডিং ডেটাটাইপগুলি কখনই অনুকূলিত করা উচিত নয় working

তবে তাদের এখানে কী শিক্ষা নেওয়া উচিত ছিল?

প্রথমত, আপনি যদি এসকিআই টেবিলটি একবার দেখে থাকেন তবে খেয়াল করবেন যে কোনও ইওফ নেই। এজন্য যে ইওএফ কোনও অক্ষর নয় তবে fgetc () থেকে প্রত্যাবর্তিত একটি বিশেষ মান, যা হয় অক্ষরের পূর্বে বা -1 ফাইলের শেষ পর্যন্ত প্রসারিত করতে পারে।
যতক্ষণ না আমরা স্বাক্ষর করা চর ব্যবহার করি সবকিছু ভালভাবে কাজ করে - 50 এর সমান চরটি fgetc () দ্বারা 50 এর সমান প্রান্তেও প্রসারিত হয়। তারপরে আমরা এটিকে আবার চরে রূপান্তর করি এবং এখনও 50 টি আছে-একই -1 -1 বা fgetc () থেকে আসা অন্য কোনও আউটপুটও ঘটে।
তবে দেখুন যখন আমরা স্বাক্ষরবিহীন চরটি ব্যবহার করি তখন কী ঘটে। আমরা fgetc এ একটি চর দিয়ে শুরু করি () এটি প্রসারিত পর্যন্ত প্রসারিত করি এবং তারপরে স্বাক্ষরবিহীন অক্ষর রাখতে চাই। একমাত্র সমস্যা হ'ল আমরা স্বাক্ষরবিহীন চরে -1 সংরক্ষণ করতে পারি না। প্রোগ্রাম এটিকে 255 হিসাবে সংরক্ষণ করছে যা আর ইওফের সমান নয়।

বিচারকার্য স্থগিত রাখার আদেশ
আপনি যদি বিভাগ 3.1.2.5 এ একবার নজর দেন তবে এএনএসআই সি ডকুমেন্টেশনের অনুলিপিগুলিতে আপনি জানতে পারবেন যে চরটি স্বাক্ষরিত হয়েছে কিনা তা সম্পূর্ণ বাস্তবায়নের উপর নির্ভর করে। কোডটিতে খুব জটিল একটি ত্রুটিপূর্ণ ত্রুটি পাওয়া গেছে বলে লোকটিকে সম্ভবত বরখাস্ত করা উচিত নয়। সংকলক পরিবর্তন করার সময় বা বিভিন্ন স্থাপত্যে যাওয়ার সময় এটি বেরিয়ে আসতে পারে। আমি ভাবছি যদি এমন পরিস্থিতিতে বাগ বেরিয়ে আসে তবে কে বরখাস্ত করা হবে;)

গীত। পল এ কার্টার দ্বারা পিসি অ্যাসেম্বলি ভাষায় উল্লিখিত বাগের চারপাশে প্রোগ্রামটি তৈরি করা হয়েছিল


7
আমি ভালোবাসি যে সমাধানের সাথে একটি গল্প আছে।
jpmc26

হা হা! আমার ধারণা এটি একমাত্র মাধ্যমে পড়ার জন্য ধন্যবাদ!
লেগাত

1
আমি তোমাকে ভালোবাসি. আপনার গল্পগুলি আমাকে
প্লাস করুন

এটি একেবারে উজ্জ্বল!
kirbyfan64sos

21

Regex

যথাযথ ইনপুট সহ, নিম্নলিখিত রেজেেক্স বেশিরভাগ ব্যাকট্র্যাকিং রেজেক্স ইঞ্জিনকে ব্যাকট্র্যাকিং নরকে যেতে পারে:

^\w+(\s*\w+)*$

সাধারণ ইনপুট যেমন "Programming Puzzles and Code Golf Stack Exchange - Mozilla Firefox"বা "AVerySimpleInputWhichContainsAnInsignificantSentence."(স্বচ্ছতার জন্য উদ্ধৃত উভয় স্ট্রিং) বেশিরভাগ ব্যাকট্র্যাকিং রেজেক্স ইঞ্জিনগুলিকে দীর্ঘ সময়ের জন্য চলতে রাখার জন্য যথেষ্ট।

যেহেতু (\s*\w+)*প্রসারণের অনুমতি দেয় \w+\w+\w+... \w+যার অর্থ রেজেক্স ইঞ্জিন মূলত শব্দের অক্ষরের একটি স্ট্রিংকে বিভক্ত করার সমস্ত সম্ভাব্য উপায়গুলি চেষ্টা করবে । এটি ব্যাকট্রাকিং জাহান্নামের উত্স।
এটা সহজেই পরিবর্তন করে সংশোধন করা যেতে পারে \s*থেকে \s+, তারপর (\s+\w+)*শুধুমাত্র প্রসারণ করা সম্ভব \s+\w+\s+\w+... \s+\w+


3
আমি ব্যাকট্র্যাকিং রেজেক্স ইঞ্জিনগুলি ঘৃণা করি।
ডেভিড কনরাড

2
আমি প্রথমে পার্ল দিয়ে এটি চেষ্টা করেছিলাম, তবে মনে হচ্ছে পার্ল এখানে একটি লুপ লক্ষ্য করতে পারে। আমি এডাব্লুকে চেষ্টা করি নি, কারণ কোনও নিয়মিত প্রকাশই এডব্লিউকে তেমন আচরণের কারণ হতে পারে না। পিএইচপি স্বয়ংক্রিয়ভাবে নিয়মিত ভাব প্রকাশ করে যা ব্যর্থতা মেলে খুব বেশি সময় নেয় (যা নির্বোধ, তবে এটি আপনার জন্য পিএইচপি - এটি স্বয়ংক্রিয়ভাবে প্রোগ্রামগুলিতে বাগগুলি সন্নিবেশ করে)। তবে এটি আসলে পাইথনে কাজ করে।
কনরাড বোরোস্কি

1
@ এক্সফিক্স: কেন পার্ল ব্যাক ট্র্যাকিং নরকে এড়াতে সক্ষম হয়েছিল, এই নিবন্ধটির কারণ ব্যাখ্যা করেছে explains তবে, এখানে প্রদর্শিত মামলার বিরুদ্ধে এটি যথেষ্ট নয় (পারফরম্যান্স বিভাগে স্ক্রোল ডাউন)। পিএইচপি (আসলে পিসিআরই লাইব্রেরি) এর ব্যাকট্র্যাকিং সীমা রয়েছে এবং কার্যকর প্রোগ্রামটি স্থগিত হওয়া বন্ধ ছিল কি না তা সমাপ্তির দিকে চালিত হয়েছিল কিনা তা স্থির করার জন্য ফাংশনের রিটার্ন মানটি সর্বদা পরীক্ষা করা উচিত।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
এটি খুব চটজলদি।
alvonellos

20

জাভাস্ক্রিপ্ট

function thiswillLoop(){
var mynumber = 40;
while(mynumber == 40){
mynumber = 050;
}
return "test";
}
thiswillLoop();

050 জাভাস্ক্রিপ্টে একটি অষ্টাল ধ্রুবক, এবং এটি 40 এর দশমিক মান হয়।


73
আমি এটা সুস্পষ্ট মনে। :-)
জাস্টিন

6
আমি জানতাম না জাভাস্ক্রিপ্ট এটি করেছে। তবে কোডটি পড়ার পরে আমি বলেছিলাম: "050 40 এর প্রতিনিধিত্ব করার কিছু উপায় হতে পারে, সম্ভবত 8 বা কোনও কিছু"
ক্রুঙ্কার

এটি আরও ভাল লুকানো প্রয়োজন।
পাওলো ইবারম্যান

এটা সুস্পষ্ট ..
অলিভার নি

18

Haskell,

head $ reverse $ (repeat '!') ++ "olleH"

ঠিক আছে, এটা চিন্তা করুন! এটি head $ "Hello" ++ (repeat '!')যেমন হবে ঠিক ততক্ষণে ফিরে আসা উচিত 'H'

হাসকেলে তালিকাগুলি পুনরাবৃত্তিমূলক কাঠামোগত রয়েছে, প্রথম উপাদানটি শীর্ষে থাকে most একটি তালিকায় সংযোজন করতে, আপনাকে সেই সমস্ত উপাদানগুলি আনারল করতে হবে, আপনার পরিশিষ্ট স্থাপন করতে হবে এবং উত্তোলিত উপাদানগুলিকে পিছনে রাখতে হবে। এটি অসীম তালিকায় কাজ করবে না। একইভাবে, অসীম তালিকার বিপরীতকরণ যাদুকরীভাবে আপনাকে আপনার "Hello"পিছনে দেবে না । এটি কেবল চিরকাল স্তব্ধ হয়ে যাবে।


1
খুব খারাপ এটি আসলে কাজ করে না: - /
জন ডিভোরাক

1
এটা কিভাবে কাজ করে না?
danmcardle

@ ক্র্যাজেডগ্রিমলিন যখন আমি ফেডোরায় এটি পরীক্ষা করেছি তখন অবশেষে ওএস প্রক্রিয়াটি নিহত করে। (<5 মিনিট) কারণ এটি সিস্টেমে সমস্ত স্মৃতি ব্যবহার করে।
এফডিনফ

মজাদার! আমি বুঝতে পারিনি যে এই ঘটনাটি ঘটেছে। আমি প্রায়শই গবলিং-অল মেমরি অঞ্চলে প্রবেশ করতে চাই না।
danmcardle

4
এটি এখনও একটি বৈধ সমাধান: এটি প্রস্থান
ছাড়বে

16

উইন্ডোজ অধীনে জাভা

public class DoesntStop
{
    public static void main(String[]a) throws InterruptedException, IOException
    {
        ProcessBuilder p = new ProcessBuilder("cmd.exe","/c","dir");
        p.directory(new File("C:\\windows\\winsxs"));
        Process P = p.start();
        P.waitFor();
    }
}

আটকে যাওয়ার জন্য প্রোগ্রামটি কমান্ডলাইন থেকে জ্যামড স্ট্যান্ডার্ড আউটপুট স্ট্রিমের উপর নির্ভর করে। উইন্ডোজ অধীনে উইনএক্সএক্সএস ডিরেক্টরিটিতে দীর্ঘ নাম সহ একাধিক হাজার ফাইল রয়েছে যাতে এটি প্রায় আটকে পড়া স্ট্যান্ডআউটের গ্যারান্টিযুক্ত, এবং waitForপ্রোগ্রামটি অচল হয়ে যায় তাই ফিরে আসতে পারে না


1
হয়তো আমি ঘন হয়ে যাচ্ছি, তবে শেষ পর্যন্ত কি এই ফিরে আসবে না? এটি কিছুটা সময় নিতে পারে। আপনারা "ক্লোগ [জিং] স্টডআউট" বলতে যা বোঝাতে চেয়েছেন তা আমি পাই না
asteri

4
যদি স্ট্রিমটি প্রোগ্রামের ব্লকগুলি খালি না করে, আমার ইতিমধ্যে কিছু মাথা ব্যথার কারণ হয়ে দাঁড়িয়েছে যে আমি কেন এটি ব্যবহার করেছি; দীর্ঘ ডিরেক্টরিটি কেবলমাত্র নিশ্চিত করে যে বাফার পূর্ণভাবে চালিত হয়
এক্স 244

আহ, গোছা। নিস! +1
অস্ট্রেলি

15

আপেল এবং কমলা তুলনা করতে ... সি

আমি মুগ্ধ হয়েছি যে এখানে একটি কোডের টুকরা নেই goto... (আপনি জানেন: গোটো মন্দ! )

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    char *oranges = "2";
    long int apples;

next_harvest:

    apples = random() % 3;

    printf("%ld apples comp. %s oranges ...\n", apples, oranges);

    if( apples != (long int)oranges )
    {
        sleep(1);
        goto next_harvest;
    }

    return 0;
}

ঘুম কেবল এটি পড়তে সক্ষম হওয়ার জন্য। কখনও কখনও ঘটে না এমন কোনও কিছুর জন্য অপেক্ষা করার জন্য আপনার অবিরাম সময় না থাকলে C Press C টিপুন ;-)


9
আপনি লুক্কায়িত জারজ, এই নিরপরাধ :)
ওরিওন

এলোমেলো () ভোডো ব্যবহার করা হয়?
মাস্টারএক্স 244

1
আহ, "2"! = 2; এটি পেয়েছে
মাস্টারএক্স 244

2
ভাল "2" সম্ভবত কখনও 2 হতে পারে না, তবে আপনি যদি একটি বৃহত সংখ্যা ব্যবহার করেন (এবং কমপক্ষে 4 এর একাধিক), এটি ঘটতে পারে;)
ওরিওন

1
@ ওরিওন: হ্যাঁ আপনি ঠিক বলেছেন, এটা হতে পারে। এবং গোটো এখনও খারাপ, তবে খারাপ টাইপের কাস্টিংগুলি আরও বেশি খারাপ!
সর্বোচ্চ.শারডুম

12

সি, কয়েকটি অনুকূলকরণকারী সংকলক সহ

এটি প্রবাহিত না হওয়া অবধি এই প্রোগ্রামটি পূর্ণসংখ্যার পরিবর্তনশীলকে বৃদ্ধি করে।

#include <stdio.h>
#include <stdint.h>
int main()
{
    int32_t x = 0;
    while(x + 1 > x)
        x++;
    printf("Got overflow!\n");
    return 0;
}

স্বাক্ষরযুক্ত পূর্ণসংখ্যা ওভারফ্লো হ'ল অপরিজ্ঞাত আচরণ। সাধারণত অনুশীলনে এটি মোড়ানো হয়, যখন অনুকূলকরণ বন্ধ থাকে ations অপ্টিমাইজেশন চালু থাকলে, সংকলকরা x + 1 > xসর্বদা সত্য যে সিদ্ধান্ত নিতে পারে এবং করতে পারে ।


সম্ভবত ব্যবহার int32_t; একটি 64 বিট ইন্টি সত্যই, সত্যই, সত্যিই দীর্ঘ সময় লাগবে (প্রতিটি পুনরাবৃত্তিতে একটি ন্যানোসেকেন্ড লাগে 585 বছর)।
পল ড্রাগার

11

সি ++

int main()
{
  int x = 1;
  //why doesn't this code terminate??/
  x = 0;
  while(x) {} //no-op/
  return 0;
}

অদ্ভুত মন্তব্য শৈলী কৌশল। ইঙ্গিত: ট্রিগার্ফস।


এটি অসীম লুপের খুব মৌলিক উদাহরণ।
ইসমাইল মিগুয়েল

64
এই ত্রিগ্রাফগুলি এখানে খুব বেশি ব্যবহৃত হয়েছে :(
টিমউইলা

75
আমার প্রায় মনে হয় ট্র্যাফিক্রাফগুলি স্ট্যান্ডার্ড লুফোলগুলিতে রাখা উচিত যা এখন আর মজার নয়।
আন্ডারগ্রাউন্ডোমোনাইল

6
@ দ্য ডক্টর: ?? / একটি ব্যাকস্ল্যাশ চরিত্রের জন্য একটি ট্রিগারফ, সুতরাং ব্যাকস্ল্যাশ মন্তব্যটির শেষে x নির্ধারিত রেখাটি বিভক্ত করে এটিকে মন্তব্যের অংশ হিসাবে তৈরি করে।
কাসাডিরোবিসন


11

জাভা

অটোবক্সিং অপ্টিমাইজেশনের এই পার্শ্ব প্রতিক্রিয়াটি আমি বিশেষভাবে পছন্দ করি:

class BoxingFun {
  public static void main( String[] args) {
    Integer max;
    Integer i;

    max = 100;
    for( i = 1; i != max; i++ ) {
      System.out.println("Not endless");  
    }
    max = 200;
    for( i = 1; i != max; i++ ) {
      System.out.println("Endless");  
    }
  }
}

Autoboxing কারণে Integerবস্তু প্রায় সমতল মত আচরণ intএকটি ব্যতিক্রম বাদে, এস এখানে: i != maxমধ্যে forলুপ তুলনা রেফারেন্স এর (পরিচয়) Integerবস্তু, তাদের মান (সমতা)। 100 পর্যন্ত মানগুলির জন্য এটি আশ্চর্যজনকভাবে "কাজ করে" তবুও জেভিএম-তে একটি অপ্টিমাইজেশনের কারণে: জাভা Integer"সর্বাধিক সাধারণ মানগুলির" জন্য বস্তুগুলি পূর্বনির্ধারণ করে এবং অটোবক্সিং করার সময় সেগুলিকে পুনরায় ব্যবহার করে। সুতরাং 100 টি পর্যন্ত মানগুলির জন্য আমাদের পরিচয় <==> সমতা।


5
প্রদত্ত যে কিছু জাভা ছেলেরা এখনও সি ++ অপারেটর-ওভারলোডিংটিকে খারাপ হিসাবে বিবেচনা করে ...
ড্যানিয়েল

আপনি আরম্ভ করার দরকার নেই = new Integer(0), আপনি যেভাবে পরে মানগুলি আরম্ভ করছেন। (এটি কারণটিকে আরও সুস্পষ্ট করে তুলতে পারে))
পাওলো ইবারম্যান

@ পাওলোবারম্যান: ভালো কথা, আমি কোডটি সম্পাদনা করেছি।
ড্যানিয়েল

9

রুবি / সি

#include <stdio.h>
#ifdef llama
def int(*args)
end
def main(arg)
  yield
end
void = nil
#endif
#define do {
#define end }
int main(void) {
  int x = 10;
  while(x-=1) do
    printf("%i\n",x);
  end
    return 0;
}

এটি সিটিতে সঠিকভাবে কাজ করে , এসটিডিওউটে 9 থেকে 1 পর্যন্ত গণনা করছে। রুবিতে রান করার সময় এটি শেষ হয় না, কারণ

0 রুবিতে একটি মিথ্যা মান নয়।


ভাষা একবারে করুন ... চিত্তাকর্ষক।
পল ড্রাগার

7

জাভাস্ক্রিপ্ট

// This multiplies the elements in the inner lists and sums the results.
function sum_of_products(var items)
{
        var total = 0;
        for(var i = 0; i < items.length; i++) {
                var subitems = items[i];
                var subtotal = 1;
                for(var i = 0; i < subitems.length; i++) {
                        subtotal *= subitems[i];
                }       
                total += subtotal;
        }
        return total;
}

// Should return 1*2 + 3*4*5 + 6*7*8*9 + 10*11 = 3196
sum_of_products([[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]]);

উভয় লুপ একই লুপ ভেরিয়েবল ব্যবহার করে, সুতরাং ইনপুটটির উপর নির্ভর করে অভ্যন্তরীণ লুপটি বাইরের লুপকে শেষ হতে পারে।


এই কি ভাষা?
রোননডেক্স

@ ব্রোনডেক্স জাভাস্ক্রিপ্ট
টমসডিং

1
আহ, হ্যাঁ, এটি জাভাস্ক্রিপ্ট। আমি সিনট্যাক্স হিলাইটিং সক্ষম করার কথা মনে রেখেছিলাম তবে এটি শিরোনামে রাখতেও ভুলে যেতে হয়েছিল :)
আলেকসি তোড়হমো

1
আমি এটা সুস্পষ্ট মনে। :-)
রাফেলকাস্ট্রোআউটো

হ্যাঁ, এটি একরকম, তবে এটি মিস করাও খুব সহজ example উদাহরণস্বরূপ, যখন একটি ফাংশন থেকে অন্য লুপটিতে একটি লুপ সরানো হয় বা কোডের উপর ঝলক দেওয়া হয়। এছাড়াও, নোট করুন যে এটি ভেরিয়েবল শেডিংয়ের কারণে সি সহ কয়েকটি ভাষায় প্রকৃতপক্ষে সঠিকভাবে কাজ করে। :)
আলেক্সি তোড়হামো

7

সি

এটি 0 থেকে 255 পর্যন্ত সমস্ত ASCII অক্ষরের জন্য একটি কোড সারণী প্রিন্ট করা উচিত A charএগুলি পুনরাবৃত্তি করার জন্য এ যথেষ্ট বড়।

#include <stdio.h>

int main(){
    char i;
    for(i = 0; i < 256; i++){
        printf("%3d 0x%2x: %c\n", i, i, i);
    }
    return 0;
}

সমস্ত অক্ষর 256 এরও কম হয় over 255++ ওভারফ্লোর কারণে 0 দেয়, সুতরাং শর্তটি i < 256সর্বদা ধরে রাখে। কিছু সংকলক এটি সম্পর্কে সতর্ক করে, কিছু না।


মনে হচ্ছে আরও কার্যকর কিছু করা হচ্ছে, সম্ভবত printf("%3d %2x: %c", i, i, i);আপনার লুপে (কোড টেবিলের জন্য) ব্যবহার করুন।
পাওলো ইবারম্যান

@ পাওলোএবারম্যান: দুর্দান্ত ধারণা।
রাফা সিলেক

আমি এই কৌশলটি আমার ক্লাসরুমে, 32 থেকে 128 এর মধ্যে মুদ্রণযোগ্য স্বাক্ষরযুক্ত অক্ষরগুলি সহ ব্যবহার করি :) :)
সিপিরি

7

পাইথন

a = True
m = 0
while a:
    m = m + 1
    print(m)
    if m == 10:
        exit

এটা হওয়া উচিত exit()এবং না exit। যেহেতু আমি এটি বুঝতে পেরেছি, exit()তা কি পাইথন ইন্টারপ্রেটার থেকে বেরিয়ে আসার আদেশ। এক্ষেত্রে কলটি ফাংশনের প্রতিনিধিত্ব করতে হবে এবং ফাংশনটির নয় দেখুন: প্রস্থান-আলোচনা । বিকল্পভাবে breakএকটি ভাল পছন্দ হবে।


আপনি কি দয়া করে বলতে পারেন exitআসলে কি? এটি একটি শ্রেণি বলে মনে হয়, তবে এটি কীসের জন্য ব্যবহৃত হয়? এছাড়াও আপনি পরিবর্তন হতে পারে print mথেকে print(m)তাই এই এছাড়াও পাইথন 3. সঙ্গে কাজ করে যে
মার্টিন Thoma

1
জিনিষ ঐ ধরণের ... আমার যখন elseif কারণ এটা ছিল কাজ করে নি Elif
বেনামি পাই

ধন্যবাদ @mooseআপডেট হওয়া মুদ্রণ বিবরণী এবং স্পয়লার বার্তা
উইলেম

6

সি ++

ক্লাসিকাল সি ++ - প্রোগ্রামারের ফাঁদ সম্পর্কে কীভাবে?

int main()
{
   bool keepGoing = false;

   do {
       std::cout << "Hello, world!\n";
   } while( keepGoing = true );

   return 0;
}

আমি এই না? এটি ব্যবহার সম্পর্কে? = পরিবর্তে ==?
এমএইচএমডি

@ user689 ঠিক আছে। keepGoing = trueএর মানটি তুলনা করে বোঝানো হয়েছিল keepGoing, পরিবর্তে এটির সাথে মান নির্ধারণ করে keepGoing; এছাড়াও পুরো বিবৃতিটি keepGoing = trueমূল্যায়ন করে true(যা আপনাকে এমন জিনিস লেখার অনুমতি দেয় a=b=c=d=0) অসীম লুপের দিকে পরিচালিত করে।
কমপ্লেট

3
এটি যোডা শর্তগুলি ব্যবহার করার আরও বেশি কারণ।
রায়ান

@ রায়ানএডওয়ার্ডডুগার্টি হাহা এর মতো আমি তাদের কখনই ডাকতে শুনিনি। সকালের জন্য হাসি ধন্যবাদ।
কমপিউশিপ

@ রায়ানএডওয়ার্ডডৌগার্টি: অবশ্যই == true(বা যোদা -স্টাইল true ==) যেভাবেই হোক অপ্রয়োজনীয় এবং শর্তটি সহজভাবে পড়তে হবে while (keepGoing)
celtschk

6

জাভাস্ক্রিপ্ট

var а = 0;
a = 1;
while(а<10){
    a++;
}

প্রথম এবং তৃতীয় লাইনে ব্যবহৃত ভেরিয়েবলগুলি ২ য় এবং তৃতীয় লাইনে ব্যবহৃত ভেরিয়েবলগুলির থেকে পৃথক।
একটিতে একটি (U + 0061) ব্যবহার করে অন্যরা а (U + 0430) ব্যবহার করে


আমি এখানে কোন সমস্যা দেখছি না। আমি এটি চালিয়েছি এবং এটি ভাল কাজ করেছে। আমি কী মিস করছি?
অ্যান্ড্রু শেফার্ড

এটি সম্ভবত সর্বত্র কাজ করবে যেহেতু ইউনিকোড সম্ভবত রূপান্তরিত হবে। আপনি যেভাবে পেতে পারেন এটি সবচেয়ে অদৃশ্য হওয়ার কারণে একটি +1 পেয়েছেন!
রাফেলকাস্ট্রোআউটো

কেবল এটি সম্পূর্ণরূপে আড়াল করার জন্য (U + 0430 এর সাথে replace প্রতিস্থাপন করুন) যদি এটি আপনার কোড হয় তবে সমস্যাটি সন্ধান করার জন্য ভাগ্য ভাল: var a;var points = 0;function fiftyfifty() {points++;if (Math.random() > 0.5)return true;}; á = fiftyfifty(); while (a === undefined) {á = fiftyfifty();} console.log("Points: " + points);আমি ছেড়ে দেব, এটি চিরতরে মুছে ফেলব, আমার কম্পিউটার সাফ করবো, সম্ভবত ভাইরাস স্ক্যানার নিশ্চিত হয়ে এটি সম্পূর্ণরূপে পুনরায় লিখতে পারে। সম্পাদনা: কারণ var a = 0; a = 1;খুব বাস্তববাদী নয়
YoYoYonnY

6

জাভা:

public class LoopBugThing{
   public static void main(String[] args)
   {
      int i = 0;
      while(i < 10)
      {
         //do stuff here
         i = i++;
      }
      System.out.println("Done!");
   }
}

"I = i ++" হ'ল একটি সাধারণ সাধারণ ভুল এবং এটি আশ্চর্যরকমভাবে খুঁজে পাওয়া শক্ত


5

সি ++

কিছুটা এলোমেলো?

class Randomizer
{
   private:
   int max;

   public:
   Randomizer(int m)
   {
      max = m;
      srand(time(NULL));
   }

   int rand()
   {
      return (rand() % max);
   }
};

int main()
{
  Randomizer r(42);
  for (int i = 0; i < 100; i++)
  {
     i += r.rand();
  }
  return (0);
}

ফাংশনটি কল করে না randবরং পরিবর্তিতভাবে ফাংশনটি কল করে Randomizer::rand


5
রিটার্ন স্টেটমেন্টে অতিরিক্ত বন্ধনী, ইয়াক।
ডেভিড কনরাড

1
এই হবে অবশেষে segfault, যদিও।
kirbyfan64sos

5

Haskell,

অ্যাকারম্যান ফাংশনের প্রদত্ত মানের গণনা করার সময় কিছু কোড। খুব কম মানগুলির জন্য এটি সাধারণত সমাপ্ত হয়। আমার মেশিনে খুব কম মান মানে সংকলিত কোড সহ 3 5 বা এর চেয়ে ছোট কিছু -O। জিসিসি কম মান মানে 3 3 এর মতো কিছু।

'প্রতীক জগাখিচুড়ি আপ সিনট্যাক্স হাইলাইটিং, নিশ্চিত করুন না কেন বলে মনে হয়। কিছু জায়গায় তাদের প্রয়োজন হয় তাই সেগুলি সব সরাতে পারে না।

সম্পাদনা - পরিবর্তিত ভাষা।

{-# LANGUAGE NamedFieldPuns #-}
import Control.Concurrent.STM
import Control.Concurrent
import Data.Time.Clock.POSIX

data D = D { time :: !POSIXTime
           , m :: !Integer
           , n :: !Integer
           , res :: !(Maybe Integer)
           } deriving Show

startvalue = D 0 3 8 Nothing

-- increment time in D. I belive lensen make code like
-- this prettier, but opted out.
inctime t t' (d@D{time}) = d {time = time + t' - t }

-- Counting time
countTime :: TVar D -> POSIXTime -> IO ()
countTime var t = do
    t' <- getPOSIXTime
    atomically $ modifyTVar' var (inctime t t')
    countTime var t'

-- Ackermann function
ack m n
    | m == 0    = n + 1
    | n == 0    = ack (m - 1) 1
    | otherwise = ack (m - 1) (ack m (n - 1))

-- Ackerman function lifted to the D data type and strict
ack' (d@D{m, n}) = let a = ack m n
                   in seq a (d { res = Just a })

-- fork a counting time thread, run the computation
-- and finally print the result.
main = do
    d <- atomically (newTVar startvalue)
    forkIO (getPOSIXTime >>= countTime d)
    atomically $ modifyTVar' d ack'
    (atomically $ readTVar d) >>= print

এটি একটি লাইভলকের কারণ। গণনা থ্রেড বারবার অ্যাকারম্যান গণনা পিছনে ফিরে আসে কারণ তারা একই টিওয়ারটি স্পর্শ করে।


ল্যাং-হেস্কেলের পরিবর্তে এটিকে ল্যাং-এইচএস হিসাবে চিহ্নিত করা আরও ভাল কাজ করে বলে মনে হচ্ছে (এটি গুগল
প্রিটিফায়ার

5

জাভা - কোন লুপস বা পুনরাবৃত্তি নয়

আমি সবেমাত্র নিয়মিত এক্সপ্রেশন শিখতে শুরু করেছি এবং আমার স্ট্রিংটি নিয়মিত অভিব্যক্তির সাথে মেলে কিনা তা পরীক্ষা করার জন্য আমার প্রথম প্রোগ্রামটি লিখেছিলাম।

দুর্ভাগ্যক্রমে, প্রোগ্রামটি কোনও ফল দেয় না। এটি টার্মিনাল ধারণ করে। সমস্যাটি খুঁজে পেতে সহায়তা করুন। আমি লুপগুলির কোনও ব্যবহার করি নি, এতে কোনও পুনরাবৃত্তি জড়িত নেই। আমি সম্পূর্ণ বিস্মিত।

import java.util.regex.*;

public class LearnRegex {
     public static void main(String[] args) {
         Pattern p = Pattern.compile("(x.|x.y?)+");
         String s = new String(new char[343]).replace("\0", "x");
         if (p.matcher(s).matches())
             System.out.println("Match successful!");
     }
}

আমি কি ভুল করেছি? আমার প্রোগ্রাম কেন শেষ হচ্ছে না? সাহায্য করুন!

আইডিয়ন লিঙ্ক এখানে

এটি বিপর্যয়কর ব্যাকট্র্যাকিংয়ের মূup ় উদাহরণ । জটিলতা হ'ল ও (2 এন / 2 )। প্রোগ্রাম অনির্দিষ্টকালের চালাতে না পারে, এটি সম্ভবত বাঁচিয়া থাকা চাই উভয় জীবিত ও অ বাস বস্তু কাছাকাছি এবং না তাই প্রায়


5

সি

আপনার কেবল দুটি লুপের একটি প্রয়োজন, তবে কোনটি আপনার প্রয়োজন তা আপনার সংকলকটির উপর নির্ভর করে।

main()
{
        int i, a[10];

        i = 0;
        while (i <= 10) {
            i++;
            a[i] = 10 - i;
            printf("i = %d\n", i);
        }

        /* Now do it in reverse */

        i = 10;
        while (i >= 0) {
            i--;
            a[i] = 10 - i;
            printf("i = %d\n", i);
        }

}

একটি সাধারণ সীমানা ছাড়িয়ে যায় যা আমি অ-সমাপ্তি মানকে পুনরায় সেট করে । কম্পাইলার কিনা তারা বরাদ্দ উপর পৃথক হতে পারে আমি উপরে বা নীচে একটি স্ট্যাক, তাই আমি উভয় নির্দেশাবলী মধ্যে overruns অন্তর্ভুক্ত করেছি।


5

সি / সি ++

সি ++ কেবল এখানে ব্যবহৃত সহজ ইনলাইন ভেরিয়েবল ঘোষণার অনুমতি দেয় তবে সাধারণ ভুল পুরানো সিটিতে এই ভুল করা ঠিক তত সহজ ...

#include <stdio.h>

int main(void)
{
    int numbers[] = {2, 4, 8};

    /* Cube each item in the numbers array */
    for(int i = 0; i < 3; i++) {
      for(int j = 0; j < 3; i++) {
        numbers[j] *= numbers[j];
      }
    }

    /* Print them out */
    for(int i = 0; i < 3; i++) {
      printf("%d\n", numbers[i]);
    }

    return 0;
}

অভ্যন্তরীণ লুপে 'জে' তুলনা করা হলেও কখনও বাড়ানো হয়নি। ('আমি ++' আসলে 'জে ++' হওয়া উচিত)। এটি এতটুকু ছদ্মবেশী কৌশল নয় বরং আমি অতীতে যে সত্যিকারের ত্রুটি করেছি তা আরও বেশি;) কিছু দেখার জন্য।


2
এটি সাধারণত ডিবাগ করতে আমার কমপক্ষে 5 মিনিট সময় নেয়। আমি যখন এটি করেছি তখন আমি এটি ঘৃণা করি।
#_HongKongInd dependence

4

সি শার্প

নীচে একটি ব্যাকগ্রাউন্ড থ্রেড ব্যবহার করে একটি বৃহত ইনপুট অ্যারেতে পাটিগণিত অপারেশন (সংক্ষেপণ) সম্পাদন করা একটি সাধারণ শ্রেণি রয়েছে। একটি নমুনা প্রোগ্রাম অন্তর্ভুক্ত করা হয়।

তবে এটি বেশ সোজা হলেও এটি কখনও শেষ হয় না। মনে রাখবেন যে হাতের কোনও ঝলক নেই (চরিত্রের লুকালাইকগুলি, লুকানো / নিখোঁজ সেমিকোলনস, ট্রিগ্রেফস ;-), ইত্যাদি)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

class Program
{
    static void Main()
    {
        var summer = new BackgroundSummer(Enumerable.Range(1, 1234567));
        Console.WriteLine(summer.WaitAndGetResult());
    }
}

public class BackgroundSummer
{
    private IEnumerable<int> numbers;
    private long sum;
    private bool finished;

    public BackgroundSummer(IEnumerable<int> numbers)
    {
        this.numbers = numbers;
        new Thread(ComputingThread).Start();
    }

    public long WaitAndGetResult()
    {
        while (!finished) { /* wait until result available */ }
        return sum;
    }

    private void ComputingThread()
    {
        foreach(var num in numbers)
        {
            sum += num;
        }
        finished = true;
    }
}

এটি একটি বাস্তব-জগতের বাজে বাগের উদাহরণ যা আপনার কোডেও উপস্থিত হতে পারে। .NET মেমরি মডেল এবং সি # স্পেসিফিকেশন অনুসারে, WaitAndGetResultপরিবর্তনশীলটিকে অস্থায়ী হিসাবে উল্লেখ না করা হলে এর মতো একটি লুপ কখনই শেষ হতে পারে না কারণ এটি অন্য থ্রেড দ্বারা পরিবর্তিত হয়েছে। বিশদ জানতে এই স্ট্যাকওভারফ্লো প্রশ্নটি দেখুন । ত্রুটি .NET প্রয়োগের উপর নির্ভরশীল, সুতরাং এটি আপনাকে প্রভাবিত করতে পারে বা নাও পারে। তবে সাধারণত, একটি এক্স 64 প্রসেসরের রিলিজ বিল্ড চালানো সমস্যাটি প্রদর্শিত বলে মনে হয়। (আমি এটি "csc.exe / o + / debug- infন্ত . cs" দিয়ে চেষ্টা করেছি ))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.