ফোর্টরান code 77 কোডটি সি তে রূপান্তর করা হচ্ছে


14

আমি একটি ফোর্টান 7777 প্রোগ্রামকে সি # তে রূপান্তর করার চেষ্টা করছি। আমার কাছে প্রায় 650 টি লাইনের কোড এবং ভয়াবহ জিওটিও বিবৃতি সহ সমস্ত জায়গা জুড়ে একটি সাবরোটাইন রয়েছে। সাব্রোটিনের প্রবাহটি কী করে তা নির্ধারণের জন্য কল্পনা করতে শুরু করেও আমার অনেক সমস্যা হচ্ছে।

এই ধরণের জিনিসটির অভিজ্ঞতা আছে এমন কেউ কি আছেন যে আমাকে এই সাবউরটিনের ওভারভিউ পেতে কীভাবে আমাকে কোনও পরামর্শ দিতে পারেন? এই ধরণের রূপান্তরটি গতি বা সহজতর করার জন্য কি কিছু সরঞ্জাম উপলব্ধ রয়েছে?


1
যেহেতু এই প্রশ্নটি আরও মুক্ত সমাপ্ত এবং পরামর্শের সন্ধানের জন্য এটি প্রোগ্রামার্স এসই

4
আপনি কি কেবল এটি রূপান্তরিত //11 /ftn95/ftn95_fortran_95_for_windows.aspx ব্যবহার করে নেটকে সংকলন করার কথা বিবেচনা করেছেন এবং তারপরে কেবল সমাবেশটি উল্লেখ করছেন?

@ শন, এটি একটি দুর্দান্ত ধারণা শন। আমি পুনঃপ্রক্রামিংয়ের সাথে কোথাও পেতে না পারলে আমি এটি দেখব।
ব্যবহারকারী 643192

2
আমি আপনার জন্য দুঃখিত অনুভব করছি ...
মার্কো

1
আমি তোমার জায়গায় এসেছি এটি আমার কেরিয়ারের সবচেয়ে খারাপ দিন ছিল।
ব্যবহারকারী

উত্তর:


10

আমার অভিজ্ঞতার সাথে, ফোর্টরান কোডের একটি ফ্লো-চার্ট তৈরি করা এটির পক্ষে ভাল উপায়। GOTO বিবৃতিগুলির লক্ষ্যগুলি পৃথক ব্লকগুলিতে আলাদা করার চেষ্টা করুন এবং উচ্চ স্তরের কোডটি বোঝার চেষ্টা করার জন্য ডায়াগ্রামটি ব্যবহার করুন।

আপনি লুপস বা ফাংশন কলগুলির সাথে জিওটিওগুলি যৌক্তিকভাবে প্রতিস্থাপন করতে পারেন তা দেখুন; ফলস্বরূপ চিত্রটি যদি গাছের কাঠামোর আকারে থাকে তবে GOTO- এ অবলম্বন না করে সি # তে রূপান্তর করা তুলনামূলকভাবে সহজ। যদিও শেষ পর্যন্ত, আপনি আত্মবিশ্বাসের সাথে ফলাফল বজায় রাখতে এবং ব্যবহার করতে সক্ষম হওয়ার জন্য আপনার কোডটি নিবিড়ভাবে বুঝতে হবে।


ভাল পরামর্শ, ধন্যবাদ! GOTO বিবৃতি নিষিদ্ধ করা উচিত।
ব্যবহারকারী 643192

6
@ ব্যবহারকারী 643192, gotoযদি বুদ্ধিমানের সাথে প্রয়োগ করা হয় তবে এটি একটি অত্যন্ত দরকারী জিনিস। আপনি একটি ছাড়া দক্ষ, বৃহত রাষ্ট্রীয় অটোম্যাটন প্রয়োগ করতে যাবেন না goto। আপনার অবশ্যই উত্পন্ন কোডে এগুলি অবশ্যই দরকার।
এসকে-যুক্তি

3
ফোর্টরান কোড থেকে ফ্লোচার্টগুলি আঁকতে পারে এমন সরঞ্জাম রয়েছে। উদাহরণ: home.comcast.net/~lchen223621
NoChance

ওপি: আপনি বিপরীতমুখী কার্যকরভাবে নিষিদ্ধ করতে পারবেন না। @ এমদাদকারিম: খুব দরকারী পরামর্শ।
ক্রিস

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

12

উপরে ড্যানিয়েল বি যা লিখেছিলেন তা ছাড়াও আমি নিম্নলিখিতটি বলব:

প্রথমে ডটনেটের জন্য ফোর্টরানের সাথে কাজ করার জন্য আপনার ফোর্টরান কোডটি পান। যদি আপনি "পুনরায় বিতরণের সাথে কোথাও পেতে না পারেন" তবে আপনি কোনও পুনঃপ্রক্রমন করার চেষ্টা করার আগে। এটি একটি ছোট পদক্ষেপ হবে, তবে সঠিক দিকে।

তারপরে, সি # তে একটি পরীক্ষা স্যুট লিখুন যা ফোরট্রান কোডটি যা কিছুটা ইনপুট চালু করার জন্য তৈরি হয়েছিল, এবং আউটপুট সংরক্ষণ করে fe একবার পরীক্ষা স্যুট চালান, এবং আউটপুট সংরক্ষণ করুন। তারপরে, সংরক্ষিত আউটপুটটির বিপরীতে উত্পাদিত আউটপুটটি পরীক্ষা করতে টেস্ট স্যুটটি প্রসারিত করুন। ধরে নিই যে ফোর্টরান কোড সর্বদা একই আউটপুট উত্পাদন করে যখন একই ইনপুট খাওয়ানো হয়, অবশ্যই পরীক্ষা অবশ্যই সফল হওয়া উচিত।

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

আমি @ এসকে-যুক্তির সাথে একমত নই, আপনার সি # কোডে আপনাকে কোনও গোটো ব্যবহার করা উচিত নয়।

(তবে আশা করি একবার আপনি ডটনেটের অধীনে ফোর্টরান কোডের কাজটি শুরু করলে আপনি স্প্যাগেটি কোডের একটি অংশকে সি # তে রূপান্তর করতে আপনার সময় নষ্ট করার কোনও কারণ দেখতে পাবেন না।)


1
মন বুঝিয়ে বলছে, "তোমার উচিত হবে না"? কোন যুক্তিযুক্ত যুক্তি, "সবাই বিশ্বাস করে যে এটি মন্দ?" আমি দুই অত্যন্ত গুরুত্বপূর্ণ ক্ষেত্রে যেখানে আপনি নামে আছে এতে যান ব্যবহার করতে, অন্যথায় আপনি হয় অপাঠ্য বা unefficient কোড (অথবা উভয়) লেখা শেষ করব।
এসকে-যুক্তি

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

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

আপনি সেই লোকদের মধ্যে একজন যারা শেষ শব্দটি না রাখলে কেবল এটি দাঁড়াতে পারেন না, তাই না? সি -: =
মাইক নকিস

1
@ উপহাস 2, আমি সমস্ত সময় ভাল রাষ্ট্র মেশিন লিখি। আমি এনামগুলি ব্যবহার করি এবং বিবৃতিগুলি স্যুইচ করি এবং সংকলকটি উত্পন্ন যন্ত্রের ভাষায় GOTO গুলি লিখতে দিই। GOTOs দিয়ে স্পষ্টভাবে লিখিত কোনও রাষ্ট্রীয় মেশিনের উদাহরণ আমি কখনও দেখিনি। একটি উদাহরণ একটি পয়েন্টার পোস্ট যত্ন?
জন আর স্ট্রোহম

3

আপনার কাজটি জটিল। ফোর্টরানকে আপনার ভালভাবে জানা দরকার। কীভাবে অনুরূপ / পৃথক ফোর্টরান গণনা করে এবং কাটা কাটা এবং বৃত্তাকার কী বিধি প্রয়োগ করে সে সম্পর্কে আপনাকে যত্নবান হতে হবে। এছাড়াও, আপনাকে সি # এবং ফোর্টরানের অর্থগত আদিম ধরণের সম্পর্কে যত্নবান হওয়া দরকার।

যা পরামর্শ দেওয়া হয়েছে তার থেকে আরেকটি পন্থা (অগত্যা আরও ভাল নয়, এটি কেবল অন্য একটি):

উ - ব্যবসায়ের জ্ঞান এবং ফাংশনের উপর ভিত্তি করে সি # তে কোডটি পুনরায় লেখার বিষয়ে বিবেচনা করুন, কেবল একটি রেফারেন্স হিসাবে ফোর্টরান কোডটি ব্যবহার করুন

বি-কনসাইডার একটি বাণিজ্যিক সরঞ্জাম ব্যবহার করে যা রূপান্তর কাজ করে - উদাহরণ: ডেটাটেক

রুটিন যদি কোনও স্ট্যান্ডার্ড ফাংশন বা এমন কোনও ফাংশন উপস্থাপন করে যা আপনি রেডিমেড ডিএল কিনতে পারেন (যেমন সংখ্যার একীকরণ), ম্যানুয়াল অনুবাদের পরিবর্তে মানক ফাংশন বা বাণিজ্যিক পণ্য ব্যবহার করুন এবং আপনার সমস্যার সমাধান হয়ে যায়।

যদি উপরেরটি এটি না কেটে, এই প্রশ্নের উত্তর দিন:

আমার কি কোডটি অপ্টিমাইজ করা বা কেবল এটি চালানো দরকার। অন্য কথায়, কোডটি আরও ভাল করতে 500 ঘন্টা ব্যয় করার ব্যবসায়িক মূল্যটি কী?

অপ্টিমাইজেশনের কোনও মান না থাকলে কোড লাইনটি লাইনে অনুবাদ করুন এবং আপনার কাজ শেষ হয়েছে।

যদি এটি এখনও ভাল না হয় তবে:

0-ফরেনটান কোড লাইনটি সি # তে রূপান্তর করুন (অথবা ফোর্টান সিএলআর ব্যবহার করুন)

1-একটি দ্রুত পরীক্ষা করুন এটি নিশ্চিত হয়ে যায় তা নিশ্চিত করুন

2-আপনাকে আরও অনুকূলিত ফ্যাশনে কোড লিখতে সহায়তা করতে একটি রি-ফ্যাক্টরিং (বাণিজ্যিক সরঞ্জাম উপলব্ধ) ব্যবহার করুন।

শুভকামনা।


2

প্রচুর গোটোসের সাথে স্টাফগুলি পুনরায় সাজানোর একটি সহজ উপায় হ'ল একটি ফ্লোচার্ট আঁকুন এবং স্ট্রিংটি সোজা করে তোলা। কখনও কখনও, F77 প্রোগ্রামগুলি কেবল পুরানো F66 প্রোগ্রাম বা আরও খারাপ এফআইআই প্রোগ্রাম। F66- এর যদি কোনও-পরে-অন্য কোনও নির্মাণের দরকার নেই তাই গোটোস প্রয়োজনীয় ছিল। আপনার যদি যা করতে হবে তা হ'ল যদি তা-ও পাওয়ার জন্য শর্তটি উল্টে দেওয়া হয়।

F66 এর কোনও কাজ নেই তবে F77 রয়েছে। কোডারটি এফ 66 থেকে এফ 77 এ রূপান্তরিত হয়েছে কিনা তার উপর নির্ভর করে (আজকের মতো অনেকে সি থেকে সি ++ বা সি ++ তে সি # হয়) যেখানে তারা এফ 67 এর মতো F77 ব্যবহার করছেন। আপনি কোডিংগুলিতে নিদর্শনগুলি চিহ্নিত করতে পারলে রূপান্তর করা অনেক সহজ।


1

আপনি শুরু করার আগে, বিদ্যমান কোডটি পরীক্ষা করার জন্য একটি পরীক্ষার স্যুট তৈরি করুন। এটি আচরণ সম্পর্কে আলোকপাত করতে সহায়তা করবে বলে খুব পুঙ্খানুপুঙ্খভাবে থাকুন। তারপরে আপনি এই রূপটি আপনার রূপান্তরটির কার্যকারিতা নির্ধারণ করতে ব্যবহার করতে পারেন।

এর বাইরে, পদ্ধতিগত হোন , তাড়াহুড়ো করবেন না এবং কার্যকারিতাটি খুঁজে পেতে প্রচুর কাগজ ব্যবহার করুন।


1

কোডটি সি # তে অনুবাদ করার ক্ষেত্রে আমি এখানে যাচ্ছি is যেহেতু .NET গোটো স্টেটমেন্টগুলিকে সমর্থন করে আমি প্রথমে পুরো ফোর্টরান কোডটি নিয়েছি এবং এটি একটি নতুন পদ্ধতিতে আটকানো হয়েছে, যেমন ফোর্টরান রুটিন এবং সাবরুটাইনগুলি ছিল যতগুলি পদ্ধতি।

সংকলকটি মিলিয়ন ত্রুটি নিয়ে এসেছিল, বেশিরভাগই অঘোষিত ভেরিয়েবল এবং ভুল ব্লক স্টেটমেন্ট ফর্ম্যাটিং সম্পর্কে, যা আমি একে একে পরিষ্কার করেছিলাম। I / O স্টেটমেন্ট এবং এর মতো স্টাফের মতো আমাকে ফোর্টরান-নির্দিষ্ট কোডেরও কিছু আবার লিখতে হয়েছিল। যখন এটি করা হয়েছিল তখন আমার কাছে মূল কোডটির একটি সঠিক প্রতিলিপি ছিল।

ভিজ্যুয়াল স্টুডিওর দুর্দান্ত ফর্ম্যাটিংয়ের জন্য মূল কোডের তুলনায় লজিক্যাল ব্লকগুলি সনাক্ত করা অনেক সহজ ছিল। এবং আমি একের পর এক গোটো স্টেটমেন্টগুলি খুলে ফেলতে শুরু করতে পারি।

এই অভিজ্ঞতাটি থেকে আমি বলতে হবে যে কয়েকটি ক্ষেত্রে আবার একই কোডটি বারবার লেখার বিষয়টি এড়াতে গোটো স্টেটমেন্টগুলি আসলে খুব দরকারী, যদিও অনেক ক্ষেত্রেই পদ্ধতিগুলি ব্যবহার করে এবং বারবার কল করে একই অর্জন করা যায় ।

আমি পুনরায় ফর্ম্যাটিংয়ের ত্রুটিগুলি তৈরি করে না তা নিশ্চিত করার জন্য আমি আমার পুনরায় ফর্ম্যাট কোডটিতে মূল কোড এবং পারফরম নিয়মিত চেকগুলি সংকলন করতে সিলভারফ্রস্টের ফ্রি সংস্করণ ব্যবহার করেছি used


0

এই জাতীয় কোডটি "পচানোর" জন্য একটি জেনেরিক পদ্ধতি নিম্নলিখিত হবে:

  • প্রথমে এটি নিম্ন স্তরের ফর্মের মধ্যে সংকলন করুন (যেমন, এলএলভিএম)
  • এটিতে একটি এসএসএ-ট্রান্সফর্ম সম্পাদন করুন (এটি আপনার স্থানীয় ভেরিয়েবলগুলি পরিষ্কার করতে সহায়তা করবে)
  • অপরিবর্তনীয় নিয়ন্ত্রণ প্রবাহ বিভক্ত (যদি থাকে)
  • লুপ এবং আইএফ সনাক্ত করুন এবং এগুলি যথাযথ উচ্চ স্তরের কনস্ট্রাক্টসের সাথে প্রতিস্থাপন করুন

এলএলভিএমের নিজস্ব সি ব্যাকএন্ড আপনাকে প্রথম খসড়া সরবরাহ করতে পারে।


0

সন্দেহ ছাড়াই সেরা উপায় হ'ল প্রথমে ফরট্রান কোডটি আরও ভাল কাঠামোগত এবং যৌক্তিক উপায়ে পুনর্লিখন / রিফেক্টর করা। এটি আপনাকে সি # তে পোর্ট করার চেষ্টা করার আগে আসল যুক্তি বুঝতে বাধ্য করবে।

আমি এখানে এটি কীভাবে যাব তা এখানে:

  • বিদ্যমান কোডটি এবং যদি প্রয়োজনীয় রিফ্যাক্টরটি বুঝতে হয় এবং এমনকি এটি ফোরট্রেনে পুনর্লিখন করেন যাতে আপনি সহজেই পরীক্ষা করতে পারেন যে এটি কাজ করে।
  • রিফেক্টর কোডটি সি # তে পোর্ট করুন

একটি স্বয়ংক্রিয় কোড রূপান্তরকারী দিয়ে আপনার সময় নষ্ট করবেন না যা সিটি ঠিক যেমন গোটোস এবং লেবেলগুলিকে সমর্থন করে, সেহেতু মূল ফোরট্রান হিসাবে গোটো স্টেটমেন্টগুলির একই গণ্ডগোলের সাথে শেষ হবে C


0

অন্য কিছু ব্যর্থ, আপনি সি # তে গোটো স্টেটমেন্ট ব্যবহার করতে পারেন ।

এতে যান বক্তব্য লেবেল বিবৃতি সরাসরি প্রোগ্রাম কন্ট্রোলের স্থানান্তর করে।

গোটোর একটি সাধারণ ব্যবহার হ'ল একটি স্যুইচ বিবৃতিতে একটি নির্দিষ্ট স্যুইচ-কেস লেবেল বা ডিফল্ট লেবেলে নিয়ন্ত্রণ স্থানান্তর করা ।

এতে যান বিবৃতি এছাড়াও গভীরভাবে নেস্টেড loops নামা দরকারী ...


-2

যে কোনও পুরানো ফরট্রান কোডটিকে একটি নতুন ভাষায় রূপান্তর করার জন্য স্ট্যাটিক টাইপ চেকিংয়ের জন্য আপনার লেগ্যাসি কোড (1) এর কিছু প্রাথমিক পদক্ষেপের মধ্য দিয়ে যেতে হবে কোডটিকে "আইপিএলসিট নন" (2) রূপান্তর করে সমস্ত কাটা সাধারণকে সম্পূর্ণ সাধারণ (3) রূপান্তর করুন সমতুল্যতা (4) ফরটারন 90 এর মডিউলে সাধারণ রূপান্তর করে

তারপরে আপনি অন্য ভাষায় রূপান্তর করতে চেষ্টা করতে পারেন।

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