۷۹ مطلب با موضوع «آموزش :: برنامه نویسی» ثبت شده است

الگوریتم وارشال برای بدست آوردن بستار متعدی در زبان راست و پایتون

برای شخص بنده با خوندن کد پایتون خیلی راحت‌تر میتونم الگوریتم را بفهمم.اینجا به ترتیب کد راست و پایتون الگوریتم وارشال برای بدست آوردن بستار متعدی یک ماتریس باینری رابطه به همراه لینک کد در گیت‌هاب گیست قرار داده شده.ضمن اینکه زمان اجرا شدن این کد‌ها برای راست و پایتون در گیست مورد نظر به صورت کامنت قرار داده شده است.توجه کنید که در هر دو زبان با حلقه for این پیاده‌سازی انجام شده و در صورتی که با استفاده از map همین الگوریتم را پیاده کنید پرفرمنس احتمالا بهبود خواهد یافت.

هشدار! کد راست با اینکه به درستی کار می‌کند اما ممکن است به روش خود راست نوشته نشده باشد و در آن عادت‌های خوب برنامه‌نویسی رعایت نشده باشد!

// Code by Rust beginner, Farooq Karimi Zadeh
// Under CC0 1.0
// Warning! Code might not be idiomatic

fn main() {
    let mut bin_matrix = [
        [0, 1, 0, 0],
        [1, 0, 1, 0],
        [0, 0, 0, 1],
        [0, 0, 0, 0]
    ];
    const N:u32 = 300_000;
    for _dummy in 0..N { 
        for k in 0..bin_matrix.len() {
            let the_clone = bin_matrix;
            for (i, row) in bin_matrix.iter_mut().enumerate() {
                for (j, value) in row.iter_mut().enumerate() {
                    if *value == 0 {
                        *value = the_clone[i][k] & the_clone[k][j];
                    }
                }
            }
        }
    }
    println!("{:?}", bin_matrix);
}

لینک کد راست در گیست


"""
Warshall algorithm
This calculates transitive closure for a given binary matrix
Author: Farooq Karimi Zadeh
Code is under CC0 1.0
"""

from pprint import pprint

def pretty_print_matrix(matrix):
    pprint(matrix, width=len(matrix[0]) * 3 + 2)


n = int(3e5)  # calculate n times
bin_matrix = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]]
for dummy in range(n):
    for k, _ in enumerate(bin_matrix):
        for i, row in enumerate(bin_matrix):
            for j, value in enumerate(row):
                if not value:
                    bin_matrix[i][j] = bin_matrix[i][k] and bin_matrix[k][j]

if n == 1:
    pretty_print_matrix(bin_matrix)
else:
    pass  # then we are benchmarking

لینک کد پایتون در گیست

مجوز مطالب و محتوا ۲۴ ارديبهشت ۰۰ ، ۱۴:۲۸ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

شمارنده تک رقمی با ATmega8 و 7-seg

سون سگمنت (Seven-segment) یک قطعه برای نمایش ارقام و بعضی حروف خاص هست. حتما سون سگمنت ها رو تو آسانسور یا محافظ کولر (اونایی که ولت سنج دارن) یا روی بعضی کولر ها برای نمایش دما دیدید. این قطعه دارای هفت LED اصلی برای نمایش ارقام و ... و یک LED اختیاری برای نقطه هست که در واقع برای کامل شدن یک بایت (8 بیت) اضافه می شود. از آن جا که این قطعه از LED ها تشکیل شده دارای دو نوع کاتد مشترک (com-cathode) و آند مشترک (com-anode) که در آن ها به ترتیب پایه های منفی آن ها یا مثبت آن ها به هم وصل شده اند. البته که این تفاوت در ظاهر و کارکرد فرقی نخواهد داشت اما در زمان برنامه نویسی تفاوت هایی هست.

همانطور که می بینید بخش های اصلی یک سون سگمنت با حروف A تا G نام گذاری شده اند و نقطه که اختیاری است با حرف DP که مخفف Decimal point است نام گذاری می شود.

ادامه مطلب...
مجوز مطالب و محتوا ۰۲ اسفند ۹۹ ، ۱۳:۰۹ ۰ نظر موافقین ۱ مخالفین ۰
BSimjoo

مبانی عددی

مبانی عددی از جمله مباحث مهم در رشته کامپیوتر و الکترونیک هست و از آنجا که به تازگی به موضوع AVR پرداختم لازم شد تا حتما یک مطلب در این باره بنویسم. مبنای عددی از گذشته های دور در ریاضیات وجود داشته و سبب شکل گیری دنیای دیجیتال شد. اعدادی که امروزه عموم مردم دنیا از آن ها استفاده می کنند مبنای ده هستند ولی افرادی هم بوده اند که از مبنا های عددی دیگر استفاده می کردند. امروزه مبنا های پرکاربرد دیگر شامل مبنای دو (باینری)، مبنای 8 (اوکتال) و مبنای 16 (هکس) هم هستند. به طور کل مبنای عددی روش ها گوناگون نمایش مقادیر عددی هست.

ادامه مطلب...
مجوز مطالب و محتوا ۲۶ بهمن ۹۹ ، ۰۹:۳۸ ۱ نظر موافقین ۱ مخالفین ۰
BSimjoo

نظرات (۱)

سیدمهدی موسویان

چشمک زن هشتایی با ATmega8

همون طور که قبل تر گفته بودم به عنوان اولین پروژه یک چشمک زن هشتایی می سازیم.

کد برنامه

/*
 * 8-LED-flasher.c
 *
 * Created: 08/11/1399 10:24:35 ب.ظ
 * Author : bsimjoo
 */
#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRD=0xff;
    PORTD=0xff;
    while (1)
    {
        for(uint8_t i=1;1;i*=2){
            _delay_ms(300);
            PORTD=i;
            if(i>=128) break;
        }
    }
}

تفسیر کد...

ادامه مطلب...
مجوز مطالب و محتوا ۱۵ بهمن ۹۹ ، ۱۳:۲۸ ۰ نظر موافقین ۴ مخالفین ۰
BSimjoo

شروع برنامه نویسی AVR

تو برنامه نویسی AVR ساختن یه فلاشر هشتایی عین Hello world میمونه و اکثر tutorial ها اولین پروژه شون همینه! منم در آینده نزدیک از همین پروژه شروع می کنم ولی برای شروع باید چنتا نرم افزار رو نصب و راه اندازی کرد. با ما همراه باشید که کلی کار داریم!

ادامه مطلب...
مجوز مطالب و محتوا ۰۸ بهمن ۹۹ ، ۱۵:۵۴ ۰ نظر موافقین ۳ مخالفین ۰
BSimjoo

شروع کار با AVR

مقدمه

همونطور که پیش تر در پستی با گذاشتن مطالبی در حوضه میکروکنترلر AVR موافقت شد با این پست مطالب با این موضوع را شروع می کنم.

همون طور که قبلا هم نقل قول کردم میکروکنترلر ها در واقع دسته ای از تراشه های IC هستند که امکان برنامه نویسی و کنترل مدارات الکتریکی رو به ما می دهند. این تراشه ها درواقع چیزی شبیه به یک رایانه در ابعاد بسیار کوچک هستند که درون خود دارای بخش هایی مانند CPU, RAM, ROM و چند نوع حافظه هستند. این تراشه های از خانواده های مخلف و با معماری ها و ویژگی ها مختلفی هستند که به جرئت میشه گفته خانواده AVR بهترین و پرکاربرد ترین خانواده این دسته از تراشه ها هستند. در ادامه کمی بیشتر در مورد AVR ها آشنا خواهیم شد.

ادامه مطلب...
مجوز مطالب و محتوا ۰۳ بهمن ۹۹ ، ۱۳:۲۶ ۲ نظر موافقین ۲ مخالفین ۰
BSimjoo

کامن لیسپ: یک زبان با تعیین نوع پویا یا ایستا؟

داستان از جایی شروع شد که در مقاله چطور کاری کنیم لیسپ سریع‌تر از سی اجرا شود؟ خواندم که کامن لیسپ بنا به خواست برنامه‌نویس می‌تواند «زبانی با تعیین نوع پویا(dynamic) ویا ایستا(static) باشد» که کنجکاوی بنده برانگیخته شد(بخوانید فضولی‌ام گل کرد!) و در کانال #clschool روی شبکه‌ی آی‌آر‌سی فری‌نود پرسیدم که در ادامه نتیجه بحث خدمتتون عرض خواهد شد.

ادامه مطلب...
مجوز مطالب و محتوا ۱۴ دی ۹۹ ، ۲۳:۳۴ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

با پایتون یک ربات سخنگو بنویسید!

شاید در مورد ماژول chatterbot چیزی خوانده باشید یا شنیده باشید.این ماژول برای شما یک چت‌بات که میتواند یاد بگیرد را فراهم می‌سازد و از الگوریتم‌های یادگیری ماشینی استفاده میکند.

ادامه مطلب...
مجوز مطالب و محتوا ۱۰ مهر ۹۹ ، ۱۰:۵۲ ۳ نظر موافقین ۲ مخالفین ۰
فاروق کریمی زاده

نظرات (۳)

علیرضا آهنی
علیرضا آهنی

«نظرات شما» برنامه‌نویسی را با چه زبانی و چطور شروع کنیم؟

این پست بیشتر برای بحث و تبادل نظر هست.به نظر شما مهم هست که یک کاربر مبتدی برنامه‌نویسی را با زبان خاصی شروع کند؟اگر نه، چرا و اگر بله چه زبانی مدنظر شما هست؟به نظرتون بهتره با بازی کردن(بازی‌هایی مثل روبوکد یا بازی‌های کدینگیم) برنامه‌نویسی یاد گرفته بشه یا مستقیم بریم سراغ پروژه‌های واقعی؟از این دست سوالات زیاد هست و من هم مثل بقیه نظرم رو زیر پست می‌نویسم.

مجوز مطالب و محتوا ۳۱ شهریور ۹۹ ، ۱۱:۵۴ ۷ نظر موافقین ۳ مخالفین ۱
فاروق کریمی زاده

زمان اشکال‌یابی برنامه حواستون به بافر و فلاش کردنش باشه

تکه کد زیر که به زبان سی‌پلاس‌پلاس را در نظر بگیرید:

#include <iostream>
using namespace std;

int main() {
    char *s;
    s = NULL;
    cout << "Hello";
    *s = 'H';
    return 0;
}

انتظار داریم که اول Hello چاپ شود و سپس با توجه به اینکه میخواهیم قسمتی از حافظه که نامربوط به برنامه‌ی ماست دسترسی پیدا کنیم،باید خطای Segmentation fault داده شود و برنامه خاتمه پیدا کند.اما وقتی کد را کامپایل و اجرا می‌کنیم می‌بینیم که اینطور نیست

ادامه مطلب...
مجوز مطالب و محتوا ۱۳ مرداد ۹۹ ، ۱۱:۳۹ ۱ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

نظرات (۱)

علیرضا آهنی

چطور کاری کنیم لیسپ سریع‌تر از سی اجرا شود؟

این مقاله از «دیدیر ورنا» می‌باشد که توسط من به فارسی ترجمه شده است.اگر اشتباهی تایپی یا علمی یا املایی مشاهده کردید حتما به مترجم گزارش دهید.

دریافت با حجم ۹۰ کیلوبایت از بیتکوین‌شل

دریافت از وب‌سایت فاروق

دریافت از «سیب‌زمینی تخم‌مرغ» فاروق

مجوز مطالب و محتوا ۰۶ مرداد ۹۹ ، ۱۶:۵۰ ۰ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

نکاتی اندر کامن لیسپ مصطلح(Idiomatic Common Lisp)

این مطلب به تدریج کامل‌تر می‌شود پس در آینده دوباره به آن سر بزنید :)

مبتدی‌های یک زبان برنامه نویسی مخصوصا اگر قبل از فراگیری زبان جدید یک زبان دیگر را یاد گرفته باشند، کد هایی به زبان جدید اما با روشی نادرست(و با روش زبان قبلی اگر داشته باشند) می‌نویسند. این کد‌ها معمولا به درستی کار می‌کنند اما به روش زبان جدید نوشته نشده‌اند. یک مثال معروف در زبان پایتون استفاده از range(len(somelist)) برای دسترسی به اعضای یک لیست است.کامن لیسپ نیز بین زبان‌ها برنامه نویسی استثنا نیست.در ادامه برای حل کردن هر مسئله در کامن لیسپ حداقل دو تکه کد یکی روش اشتباه حل کردن مسئله در کامن لیسپ و دیگری روش درست آن‌را ارائه میکنم.

ادامه مطلب...
مجوز مطالب و محتوا ۱۸ دی ۹۸ ، ۱۵:۲۱ ۰ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

کنترل ورودی در Python

def controllInput(func:callable, prompt = '>'):
  while True:
    try:
      inputValue = input(prompt)
      value = func(inputValue)
      if type(value) == bool:
        if value:
          return inputValue;
        else:
          print('!!INVALID INPUT!!')
      else:
        return value, inputValue
    except:
      print('!!INVALID INPUT!!')
      
a = controllInput(str.isdigit, 'digit: ')
print(a, type(a))
b = controllInput(int, 'int: ')[0]
print(b, type(b))
c = controllInput(str.isalpha, 'alpha: ')
print(c, type(c))
d = controllInput(lambda x: x.isalpha() and len(x)==5, '5 alpha:')
print(d, type(d))
مجوز مطالب و محتوا ۰۷ دی ۹۸ ، ۱۸:۵۹ ۱ نظر موافقین ۳ مخالفین ۰
BSimjoo

نظرات (۱)

علیرضا آهنی

پیاده‌سازی الگوریتم مرتب سازی حبابی در کامن لیسپ

(defun bubble-sort (vector)
  (loop for swapped = nil
     do (loop for i from 0 below (1- (length vector))
	   when (> (aref vector i) (aref vector (1+ i)))
	   do (rotatef (aref vector i) (aref vector (1+ i)))
	     (setf swapped t))
     unless swapped return vector))

ادامه مطلب...
مجوز مطالب و محتوا ۲۹ آذر ۹۸ ، ۱۶:۵۹ ۳ نظر موافقین ۲ مخالفین ۰
فاروق کریمی زاده

پایتون ۳.۸ و عملگر :=

در پایتون ۳.۸ یک عملگر جدید برای انتصاب معرفی شده است.این عملگر جهت انتصاب در عبارات بزرگتر استفاده می‌شود. مثلا:

a = 10
if (b := a) == 10:
...

در تکه کد بالا هم‌زمان مقدار b برابر مقدار a می‌شود و هم مقایسه انجام می‌شود.

مجوز مطالب و محتوا ۱۳ آبان ۹۸ ، ۱۹:۱۵ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده