اخبار و اطلاعات مربوط به دروس

در این وبلاگ مباحث مرتبط با دروس تدریسی توسط اینجانب پیگیری می شود.

اخبار و اطلاعات مربوط به دروس

در این وبلاگ مباحث مرتبط با دروس تدریسی توسط اینجانب پیگیری می شود.

هدیه ای از طرف دانشجویان
Mbt925.ir

۳۴ مطلب با موضوع «دانشگاه صنعتی شاهرود :: برنامه نویسی پیشرفته» ثبت شده است

۰۳
آذر

سلام. نسخه الکترونیکی کتاب مقدمه ای بر مسابقات برنامه نویسی منتشر شد. امیدوارم بتونه بهتون کمک بکنه.

 دریافت نسخه پی دی اف کتاب

  • بیگلری
۰۹
خرداد

برنامه زیر را پیاده سازی بفرمائید.

این برنامه شامل چهار مرحله است که پشت سر هم به کاربر نمایش داده می شوند. مراحل موردنظر در تصویر نمایش داده شده اند.

نکته ها:

  • استفاده از تمامی مدیرهای لایه مجاز است.
  • برای پیاده سازی صفحات پشت سر هم از CardLayout استفاده کنید.

ارسال تمرین:

  • فرصت ارسال این تمرین تا روز جمعه، 14 خرداد، ساعت 24:00 است.
  • عنوان ایمیل: برنامه نویسی پیشرفته، نام دانشجو، عنوان تمرین
  • مثال: برنامه نویسی پیشرفته، علی بهرامی، تمرین یازدهم

 

  • بیگلری
۲۹
ارديبهشت

برنامه ای بنویسید که مجموع عناصر چند آرایه را محاسبه کند.

دو عدد N و L را از ورودی دریافت کند. در n خط بعدی، در هر خط یک آرایه به طول L با مقادیر بین 1 تا 100 قرار دارد.

مجموع عناصر آرایه ها به روش معمولی به صورت زیر محاسبه می شود:

public static void main(String[] args) throws InterruptedException {

Scanner scanner= new Scanner(System.in);

// read N & L
int N= scanner.nextInt(), L= scanner.nextInt();
int[][] arrs= new int[N][L];
// read arrays
for (int i = 0; i < N; i++) {
for (int j = 0; j < L; j++) {
arrs[i][j]= scanner.nextInt();
}
}
long start= System.currentTimeMillis();
// calculate sum of arrays
int[] sum= Arrays.copyOf(arrs[0], arrs[0].length);
for (int i = 1; i < N; i++) {
// add curr array to sum array
for (int j = 0; j < L; j++) {
sum[j] += arrs[i][j];
}
}
// print final sum
System.out.printf("Total time: %d ms%nFinal sum: %s%n", System.currentTimeMillis()-start, Arrays.toString(sum));

}

ورودی نمونه:

3 4

1 2 3 4

2 3 4 5

5 6 7 8

خروجی نمونه:

Total time: 0 ms

Final sum: [8, 11, 14, 17]

حال برنامه ای بنویسید که همین عمل را با استفاده از چند نخ انجام دهد. خروجی یک تفاوت جزئی با خروجی بالا دارد و آن تعداد نخ های مورد استفاده است:

Total time: 0 ms with 3 threads

Final sum: [8, 11, 14, 17]

نکته ها:

  • استفاده از آرایه یا collection ها آزاد است.
  • از فایل برای خواندن ورودی استفاده کنید.
  • استفاده از کلاس Thread توصیه می شود.
  • چندین آرایه بزرگ در فایل ورودی قرار دهید و زمان مصرف شده توسط روش تک نخی و چند نخی را باهم مقایسه کنید.

ارسال تمرین:

  • فرصت ارسال این تمرین تا روز چهارشنبه، 5 خرداد، ساعت 12:00 است.
  • فرصت ارسال تمرین به هیچ عنوان تمدید نخواهد شد.
  • عنوان ایمیل: برنامه نویسی پیشرفته، نام دانشجو، عنوان تمرین
  • مثال: برنامه نویسی پیشرفته، علی بهرامی، تمرین دهم

 

  • بیگلری
۲۹
ارديبهشت

مثال نوشته شده از CardLayout سر کلاس رو می تونید در ادامه مشاهده کنید:

public class MainWindow extends JFrame {

public MainWindow() {
super("My first JFrame");

CardLayout cardLayout= new CardLayout();
JPanel cardPanel= new JPanel(cardLayout);

// center panel
JPanel centerPanel= new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
centerPanel.add(new JButton("Button 1"));
centerPanel.add(new JButton("Button 2"));
centerPanel.add(Box.createRigidArea(new Dimension(0, 10)));
centerPanel.add(new JButton("Button 3"));
cardPanel.add(centerPanel, "page1");
// ===========================
JPanel bottomPanel= new JPanel();
bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.LINE_AXIS));

bottomPanel.add(new JButton("Button 1"));
bottomPanel.add(new JButton("Button 2"));
bottomPanel.add(new JButton("Button 3"));
cardPanel.add(bottomPanel, "page2");

getContentPane().add(cardPanel, BorderLayout.CENTER);

JPanel toolbarPanel= new JPanel(new FlowLayout());
JButton preButton= new JButton("Pre");
preButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.previous(cardPanel);
}
});
toolbarPanel.add(preButton);
JButton nextButton= new JButton("Next");
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.next(cardPanel);
}
});
toolbarPanel.add(nextButton);
getContentPane().add(toolbarPanel, BorderLayout.PAGE_END);

pack();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
}
  • بیگلری
۲۰
ارديبهشت

برنامه ای بنویسید که یک فرهنگ لغت را پیاده سازی کند.

  • در گام اول یک جستجو در اینترنت کرده و یک فایل که حاوی کلمات انگلیسی و ترجمه انگلیسی! اون ها است، پیدا کنید. 100 کلمه اول آن را نگه داشته و باقی را حذف کنید.
  • فایل مربوطه رو در کنار فایل های کد برنامه کپی بفرمائید.
  • در ابتدای اجرای برنامه، محتویات فایل مربوطه را خوانده و در یک Map قرار بدهید.
  • این Map کلمات انگلیسی را به عنوان کلید و ترجمه انگلیسی را به عنوان مقدار ذخیره می کند.

بعد از اجرای برنامه به صورت زیر عمل کنید:

  1. ابتدا پیام زیر را به کاربر نمایش دهید: "Enter an English Word:" و یک کلمه انگلیسی از او دریافت کنید.
  2. کلمه مربوطه را جستجو کرده و 
  3. در صورت پیدا شدن کلمه، ترجمه آن را نمایش دهید.
  4. در صورت پیدا نشدن: به کاربر بگویید "We couldn't find this word. would you like to add it to the dictionary?"
    • No: به مرحله 1 بازگردید
    • Yes: ترجمه موردنظر را دریافت کرده و کلمه و ترجمه آن را به آخر فایل متنی اضافه کنید.
  5. پس از هر بار جستجو، 5 کلمه ای که بیشترین تعداد دفعات توسط کاربر جستجو شده اند را نمایش دهید.

نکته ها:

  • از Collection ها استفاده کنید
  • از روش های توصیه شده خواندن و نوشتن در فایل استفاده کنید

ارسال تمرین:

  • فرصت ارسال این تمرین تا روز یکشنبه، 26 اردیبهشت، ساعت 1:00 است.
  • فرصت ارسال تمرین به هیچ عنوان تمدید نخواهد شد.
  • نحوه ارسال تمرین ها در این پست توضیح داده شده.
  • عنوان ایمیل: برنامه نویسی پیشرفته، نام دانشجو، عنوان تمرین
  • مثال: برنامه نویسی پیشرفته، علی بهرامی، تمرین نهم

 

  • بیگلری
۱۲
ارديبهشت

صورت مسئله پروژه پایانی رو می تونید در ادامه دریافت بفرمائید.


 پروژه پایانی

  • بیگلری
۰۹
ارديبهشت

برنامه ای بنویسید که نتایج لیگ شاهرود را دریافت کرده و جدول لیگ را رسم کند.

در ابتدای ورودی یک عدد n آورده می شود که تعداد تیم ها را مشخص می کند. سپس n رشته دنبال هم آورده می شوند که نام تیم ها می باشند.


در ادامه، در هر خط نتیجه یک بازی قرار می گیرد. نتیجه یک بازی به چند شکل متفاوت قابل ارائه است.

در پایان ورودی نیز عدد 1- قرار می گیرد.
در همه مثال های زیر، تیم اول بازی را 3 بر 1 از تیم دوم برده است.

  • شکل اول:

Team1 3 Team2 1

  • شکل دوم:

Team1 Team2 3-1

  • شکل سوم:

Team1 Team2 [3-1]

  • شکل چهارم:

Team1-Team2 (3-1)

هر برد 3 امتیاز و هر مساوی 1 امتیاز دارد. هر دو تیم، فقط یک مرتبه باهم بازی می کنند. جدول نتایج را به فرمت زیر رسم کنید.

Team Name Num of Plays Win Lost Drawn Points

======= ======== === === === ====

Team1         3                   2       0       1      7

Team2         3                   1       1       1      4

Team3         2                   1       1       0      3

Team4         2                   0       2       0      0

یک مثال از ورودی برنامه که منجر به خروجی بالا می شود:

4

Team1 Team2 Team3 Team4

Team1 Team2 3-3

Team1 5 Team3 1

Team1 Team4 [4-2]

Team2-Team3 (1-2)

Team2-Team4 (2-1)

-1

نکته ها:

  • شکل و ترتیب ورودی و خروجی را دقیقا رعایت کنید

ارسال تمرین:

  • فرصت ارسال این تمرین تا روز پنجشنبه، 16 اردیبهشت، ساعت 1:00 است.
  • فرصت ارسال تمرین به هیچ عنوان تمدید نخواهد شد.
  • نحوه ارسال تمرین ها در این پست توضیح داده شده.
  • عنوان ایمیل: برنامه نویسی پیشرفته، نام دانشجو، عنوان تمرین
  • مثال: برنامه نویسی پیشرفته، علی بهرامی، تمرین هشتم
  • بیگلری
۰۵
ارديبهشت
public static void main(String[] args) {

StringBuilder sb= new StringBuilder("ali");
for (int i = 0; i < 10000000; i++) {
sb.append("-ali");
}
String testStr= sb.toString();

long start= System.currentTimeMillis();
String[] splited1= testStr.split("-");
int counter1=0;
for (int i = 0; i < splited1.length; i++) {
counter1++;
}
long end= System.currentTimeMillis();
System.out.println("Time: " + (end-start) + " - counter1: " + counter1);

start= System.currentTimeMillis();
int counter2=0;
StringTokenizer st= new StringTokenizer(testStr, "-");
while(st.hasMoreTokens()) {
st.nextToken();
counter2++;
}
end= System.currentTimeMillis();
System.out.println("Time: " + (end-start) + " - counter2: " + counter2);
}
  • بیگلری
۰۲
ارديبهشت

برنامه ای بنویسید که کلاس زیر را توسعه دهد.

کلاس BaseManager دارای مشخصات زیر است. موارد انتزاعی را به شکل مناسب دوباره نویسی کنید.

  • فیلدهای عدد و مبنا که در سازنده دریافت می شوند و توسط تابع changeValue هم قابل تغییرند
  • تابع convertToBase: یک مبنا دریافت کرده و عدد مربوطه را در آن مبنا برمی گرداند
  • تابع sumInBase: یک عدد و مبنا دریافت کرده و آن را با عدد و مبنای خود جمع کرده و نتیجه را برمی گرداند (در هنگام جمع باید مبناها یکسان سازی شوند). نتیجه در مبنای خود شیء برگردانده می شوند
  • تابع print: عدد و مبنای جاری را چاپ می کند
  • تابع printInAllBases: عدد جاری را در مبنای 2 تا 16 در خروجی چاپ می کند. چاپ را به صورت زیر انجام دهید:

2              3            4              ....>

--------- ---------- ----------

1011     0102       0023

  • در جدول بالا، طول همه اعداد باید برابر با طول بلندترین عدد باشد. در مثال بالا در سمت چپ 102 و 23 به تعداد کافی صفر اضافه شده است.

در تابع main اعمال زیر را به ترتیب ذکر شده انجام دهید:

  • از کلاس خود یک شیء ایجاد و مقداردهی کنید
  • تابع print را فراخوانی کنید
  • تابع printInAllBases را فراخوانی کنید
  • عدد و مبنای جدیدی از ورودی دریافت کرده و به شیء نسبت دهید
  • یک مبنا از ورودی دریافت کرده و برای تابع convertToBase ارسال کرده و نتیجه را چاپ کنید
  • یک عدد و مبنای جدید از ورودی دریافت کرده و برای تابع sumInBase ارسال کرده و نتیجه را چاپ کنید.
  • تابع print را فراخوانی کنید
  • تابع printInAllBases را فراخوانی کنید

نکته ها:

  • کلاس BaseManager و کلاس خود را به صورت کامل با استفاده از JavaDoc کامنت گذاری کنید.
  • ترتیب ذکر شده در main را دقیقا رعایت کنید
  • استفاده از توابع اضافی مجاز است.

ارسال تمرین:

  • فرصت ارسال این تمرین تا روز سه شنبه، 7 اردیبهشت، ساعت 1:00 است.
  • فرصت ارسال تمرین به هیچ عنوان تمدید نخواهد شد.
  • نحوه ارسال تمرین ها در این پست توضیح داده شده.
  • عنوان ایمیل: برنامه نویسی پیشرفته، نام دانشجو، عنوان تمرین
  • مثال: برنامه نویسی پیشرفته، علی بهرامی، تمرین هفتم


کلاس BaseManager:

public abstract class BaseManager {

private String number;
private int base;

public BaseManager(String number, int base) {
changeValue(number, base);
}

public final void changeValue(String number, int base) {
this.number= number;
this.base= base;
}

// convert number from base to newBase and return
public abstract String convertToBase(int newBase);
// sum [this.number with this.base] and [number with base] and return result in this.base
public abstract String sumInBase(int number, int base);
// print number in base
public abstract void print();
// print number in base 2..16
public abstract void printInAllBases();

}
  • بیگلری
۱۷
فروردين

برنامه ای بنویسید که بازی زیر را پیاده سازی کند.

در این بازی چهار نوع صفحه بازی وجود دارد که همگی دارای مشخصات زیر هستند:

  • یک آرایه یک بعدی از خانه ها که به ترتیب از 1 تا طول صفحه بازی شماره گذاری شده اند. بعضی از صفحات دارای طول 15 و بعضی دارای طول 16 می باشند.
  • هر صفحه بازی دارای یک موقعیت جاری است که بصورت پیشفرض برابر با خانه 1 می باشد.
  • هر صفحه بازی دارای سه تابع moveLeft، moveRight و printCurrentPosition است.
  • هر صفحه بازی دارای یک طول گام است. طول گام مشخص می کند که اندازه حرکت به راست/چپ چقدر باشد (در شکل زیر طول گام ها قابل مشاهده اند)
  • توابع moveRight و moveLeft بر اساس شکل صفحه بازی حرکت می کنند که در تصویر مشخص شده است
  • تابع printCurrentPosition برای هر صفحه بازی اطلاعات متفاوتی را چاپ می کند:
    • صفحه بازی مستقیم: شماره خانه جاری
    • صفحه بازی چرخشی: شماره خانه جاری و یکی از مقادیر بالا، پایین، راست و چپ (برای خانه هایی که در تقاطع قرار دارند، فرقی نمی کند که بالا/پایین چاپ شود یا چپ/راست)
    • صفحه بازی رفت و برگشتی: شماره خانه جاری و شماره سطر (1، 2 یا 3)
    • صفحه بازی زیگ زاگ: شماره خانه جاری

بازی توسط کلاس Player انجام می شود. کلاس Player دارای مشخصات زیر است:

  • آرایه ای از 4 صفحه بازی از 4 نوع موجود
  • یک عدد تصادفی بین 1 تا 15 در شروع بازی تولید می شود. هر صفحه بازی که زودتر به این عدد برسد برنده است و بازی متوقف می شود.
  • عدد تصادفی تولید شده (هدف) چاپ می شود.
  • یک حلقه وظیفه انجام بازی را به عهده دارد. در هر دور از حلقه عملیات زیر انجام می شود:
    • یک عدد تصادفی بین 1 و 2 تولید می شود (1 یا 2).
    • در صورتی که عدد تصادفی 1 باشد، صفحه بازی جاری به سمت راست حرکت می کند و در صورتی که 2 باشد، به سمت چپ
    • موقعیت جاری صفحه بازی چاپ می شود (printCurrentPosition)
    • در صورتی که موقعیت جاری صفحه بازی برابر با عدد تصادفی تولید شده (قبل از حلقه) بود، صفحه جاری برنده است. پیغام برنده شدن این صفحه چاپ شده و از حلقه خارج می شویم
    • در غیر اینصورت، دور بعدی حلقه اجرا می شود

نکته ها:

  • در این تمرین رفتارها و حالت ها به صورت جداگانه بیان نشده اند. وظیفه تشخیص رفتارها و حالت ها به عهده شماست.
  • از یک کلاس صفحه بازی به عنوان پدر و چهار فرزند استفاده کنید.
  • از دوباره نویسی توابع و چندریختی در زمان مناسب استفاده کنید.
  • در صفحه های بازی، پس از رسیدن به انتهای صفحه بازی، به ابتدای آن برمی گردیم.
  • استفاده از توابع اضافی مجاز است.

ارسال تمرین:

  • فرصت ارسال این تمرین تا روز یکشنبه، 22 فروردین، ساعت 1:00 هست.
  • فرصت ارسال تمرین به هیچ عنوان تمدید نخواهد شد.
  • نحوه ارسال تمرین ها در این پست توضیح داده شده.
  • عنوان ایمیل: برنامه نویسی پیشرفته، نام دانشجو، عنوان تمرین
  • مثال: برنامه نویسی پیشرفته، علی بهرامی، تمرین ششم

روش تولید عدد تصادفی بین 1 و 10:

Random rnd= new Random();

int aRandomNumber= rnd.nextInt(10)+1;

System.out.println(aRandomNumber);



  • بیگلری