View Full Version : برنامه هایی که به نظر میرسه درست هستند ولی...
رامین مرادی
جمعه 05 اسفند 1390, 12:17 عصر
::::برنامه اول::::
اگه گفتید چرا این برنامه ساده خطا داره
هرکی بگه یه جایزه دارم...
البته جایزه هام مادی نیست...
چند تا از این برنامه های ساده که با به نظر می رسه درست هستند ولی درست نیستند..
درضمن مدیر اجازه بده تا ببینیم که بچه ها تا چه قدر وقت می زارن واسه این برنامه های ساده!!!
/************************************************
/************************************************
* The “standard” hello world program. *
*************************************************/
#include <iostream>
void main(void)
{
std::cout << “Hello world!\n”;
}
shahmohammadi
جمعه 05 اسفند 1390, 12:51 عصر
سلام.
اينكه با يه نگاه مشخصه. /* */ هاش درست نيست.
رامین مرادی
جمعه 05 اسفند 1390, 13:16 عصر
سلام.
اينكه با يه نگاه مشخصه. /* */ هاش درست نيست.
نه بابا !!!!
اون خطها رو حذف کن برای خوانایی بیشتر گذاشته بودم
اونها رو اگه درست تو جاشون نبود حذف کنید اصل برنامه رو بچسب
irpersian20
جمعه 05 اسفند 1390, 14:02 عصر
“Hello world!\n”
MAN_UNITED
جمعه 05 اسفند 1390, 19:31 عصر
یکی اینکه main باید int باشه
int main(void)
و دوم اینکه کوتیشن اشتباهه همین که دوستمون گفت
25farshid
جمعه 05 اسفند 1390, 20:37 عصر
1
2
3
4
5
6
7
8
9
/************************************************/************************************************
* The “standard” hello world program. *
*************************************************/
#include <iostream>
void main(void)
{
std::cout << “Hello world!\n”;
}
این چیه ؟
سر کار گذاشتی.......
رامین مرادی
دوشنبه 08 اسفند 1390, 17:13 عصر
یکی اینکه main باید int باشه
int main(void)
و دوم اینکه کوتیشن اشتباهه همین که دوستمون گفت
دوستان اين دوستمون درست گفتن تابع مين مقداري رو به سيستم عامل بر مي گردونه و نمي تونه void باشه .آفرين به شما كه مثل بعضي ها عجله نكرديد و تشخيصتون خوب بود.
برنامه بعدي تو تايپيك بعدي!!!!!:تشویق:
رامین مرادی
دوشنبه 08 اسفند 1390, 17:31 عصر
این برنامه مجذور اعداد یک تا پنج است به نظرتون کجاش ایراد داره
#include <iostream>
int main()
{
// An array for the squares
int array[5];
int i; // Index into the array
for (i = 1; i <= 5; ++i) {
array[i] = i*i;
}
for (i = 1; i <= 5; ++i) {
std::cout << i << " squared is " <<
array[i] << '\n';
}
return (0);
}
vistacali
دوشنبه 08 اسفند 1390, 21:09 عصر
این برنامه مجذور اعداد یک تا پنج است به نظرتون کجاش ایراد داره
#include <iostream>
int main()
{
// An array for the squares
int array[5];
int i; // Index into the array
for (i = 1; i <= 5; ++i) {
array[i] = i*i;
}
for (i = 1; i <= 5; ++i) {
std::cout << i << " squared is " <<
array[i] << '\n';
}
return (0);
}
عزیزم ارایه از خونه 0 شروع میشه نه خونه یک :قهقهه: سخت تر کن
کد رو اصلاح کردم و گذاشتم
#include <iostream>
#include <conio.h>
using namespace std ;
int main()
{
// An array for the squares
int array[5];
int i; // Index into the array
for (i = 0; i <5;++i){
array[i] = i*i;
}
for (i = 0; i < 5;++i) {
std::cout << i << " squared is " <<array[i] << '\n';
}
getch();
return (0);
}
Asg.Mojtaba
سه شنبه 09 اسفند 1390, 18:13 عصر
تاپیک جالبی هست ادامه بدید ، نکات خیلی ریز رو میشه از همینجا فهمید .
راستی اولیش که خیلی تابلو بود دوممی روکه هنوز نخوندم :)
رامین مرادی
پنج شنبه 11 اسفند 1390, 11:18 صبح
خوب بود جواب دوستمون در مورد آرايه كه از فر شروع ميشه درسته
ببخشيد كه دير به دير ير مي زنم آخه بح تا شب دارم كد مينويسم......ه...ك....:شیطان:
بريم سراغ برنامه بعدي
خوب اين برنامه مساحت مثلث رو حساب مي كنه. فرمولش ساده است همه چيز به درستي كار مي كند ولي يك اشكال شگفت انگيز وجود دارد
#include <iostream>
int main()
{
int base = 0; /* Base of the triangle */
int height = 0; /* Height of the triangle */
base = 5; /* Set the base of the triangle
height = 2; /* Set the height */
// Area of the triangle
int area = (base * height) / 2;
std::cout << "The area is " <<
area << std::endl;
return (0);
}
vistacali
پنج شنبه 11 اسفند 1390, 17:03 عصر
:شیطان:
/* Set the base of the triangle
height = 2; /* Set the height */
خوب اینم از اشکال این سورس برو بعدی
وقتی اسلش ستاره باز شده توی خط 5 برنامه اون بسته نیشده و در خط 6 بسته شده
به همین دلیل همیشه عدد صفر رو میده بیرون چون هر عدد * 0 جواب صفر هست
Cancer
جمعه 12 اسفند 1390, 18:28 عصر
سلام سلام سلام
من همون برنامه اول رو فقط تست کردم.
اون که مشکلی نداشت.:قهقهه:
فقط مشکلش همون " ها بود.
بعدش فکر کنم یکی گفت که main نمی تونه void برگردونه. چرا نتونه خوب هم می تونه.
main هم مثل بقیه ی تابع ها هست.
هم می تون void برگردونه، هم پارامتر نگیره و void باشه، هم یه نوع داده ای دیگه برگردونه، و هم پارامتر بهش ارسال کرد.
فقط تنها فرقش اینه که تابع های دیگه نمی تونن main رو فراخوانی کنن.
دیگه همین.
تشکر.
رامین مرادی
جمعه 12 اسفند 1390, 19:22 عصر
دوست عزيز حرف شما رو فعلا" قبول نمي كنم فقط اجازه بديد از چند تا از اساتيد بزرگم بپرسم من با كامپايلر توربو تست كردم خطا گرفت:متفکر:
قبل از همه به استناد حرف خودت كه ديگه نمي توني اون تابع رو فراخواني كني سيستم عامل چه طور اونو فراخواني كنه البته اين استدلال منه اگه اشتباه گفتم تصحيح كنيد ولي بازم از اساتيدم سوال مي كنم.:متفکر:
88888888888888888888888888
جواب دوستمون براي مساله بالايي ذرست بود اون */ بسته نشده .
دوستان سروران گرامي لطفا اگه اشتباه ي شد حتما منو راهنمايي كنيد تا منم بعضي از چيزها رو ياد بگيرم از شما اساتيد بزرگوار.:بوس:
خوب بريم سراغ برنامه بعدي
اين برنامه قراره كلمات كليدي رو تشخيص بده ولي درست كار نمي كنه :لبخند:
/************************************************
* test the keyword finding function: "keyword" *
************************************************/
#include <cstring>
#include <iostream>
/************************************************
* keyword -- return true if a keyword found *
************************************************/
bool keyword(
const char word[] // The work to look for
)
{
// A set of keywords
static const char *key_list[] = {
"bool",
"int",
"const",
NULL
};
int i; // Index into the list
// Look for the keyword
for (i = 0; key_list[i] != 0; ++i) {
if (std::strcmp(word, key_list[i]))
return (true);
}
return (false);
}
int main()
{
std::cout << "keyword(bool) = " <<
keyword("bool") << '\n';
std::cout << "keyword(sam) = " <<
keyword("sam") << '\n';
return (0);
}
در ضمن دوستان دل سرد نشيد اگه بخوايد برنامه ها رو يه كمي پيچيده تر مي كنيم.:لبخند:
shahmohammadi
شنبه 13 اسفند 1390, 11:18 صبح
اين هم يه برنامه ديگر:
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int Y0=5;
int y0;
int J1=6;
int j1;
int main(int argc, char *argv[])
{
cout<<sin(y0)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Cancer
یک شنبه 14 اسفند 1390, 11:55 صبح
سلام سلام سلام
قبل از همه به استناد حرف خودت كه ديگه نمي توني اون تابع رو فراخواني كني سيستم عامل چه طور اونو فراخواني كنه
main فقط برای اینکه سیستم عامل فراخوانیش کنه.
یعنی سیستم عامل که نمی تونه تابع های دیگه رو فراخوانی کنه.
واسه همین هم است که از main استفاده می کنیم که اول سیستم عامل فراخوانیش کنه، بعد مابقیه تابع ها رو خود برنامه.
من با ++VC تست کردم.
ولی تو کتابها هم که خونده بودیم فکر کنم که نوشته بود فراخوانی main توسط یه تابع دیگه در برنامه در زبان c امکان پذیر است ولی در ++c نه. (اگه درست یادم بیاد (فکر کنم کتاب مقسمی بود)) ولی ای کاش تو ++c هم می شد فراخوانیش کرد.
تشکر.
رامین مرادی
یک شنبه 14 اسفند 1390, 18:31 عصر
سلام سلام سلام
main فقط برای اینکه سیستم عامل فراخوانیش کنه.
یعنی سیستم عامل که نمی تونه تابع های دیگه رو فراخوانی کنه.
واسه همین هم است که از main استفاده می کنیم که اول سیستم عامل فراخوانیش کنه، بعد مابقیه تابع ها رو خود برنامه.
من با ++VC تست کردم.
ولی تو کتابها هم که خونده بودیم فکر کنم که نوشته بود فراخوانی main توسط یه تابع دیگه در برنامه در زبان c امکان پذیر است ولی در ++c نه. (اگه درست یادم بیاد (فکر کنم کتاب مقسمی بود)) ولی ای کاش تو ++c هم می شد فراخوانیش کرد.
تشکر.
خوب دیدید
من قبل از اینکه برنامه رو اینجا بزارم خودم تستش می کنم .
ولی خوب زحمت کشیدید و به تایپیک من جواب دادید .
جواب دوست عزیزمون هم در مورد تابی کپی درست بود.
دوستان اگه مسائل گفته شده مفید بود تشکر یادتون نره:چشمک:
بریم سراغ برنامه بعدی
این برنامه رو من یه جایی دیده بودم متنش هم برام جالب بود و کپی کردم براتون میزارم ببینیم چی کار می کنید.
متن برنامه:به سادگی گسستن یک ارتباط .چرا برنامه زیر بعضی مواقع....؟
#include <iostream>
#include <string>
/************************************************
* linked_list -- Class to handle a linked list *
* containing a list of strings. *
* *
* Member functions: *
* add -- Add an item to the list *
* is_in -- Check to see if a string is *
* in the list. *
************************************************/
class linked_list {
private:
/*
* Node in the list
*/
struct node {
// String in this node
std::string data;
// Pointer to next node
struct node *next;
};
//First item in the list
struct node *first;
public:
// Constructor
linked_list(void): first(NULL) {};
// Destructor
~linked_list();
private:
// No copy constructor
linked_list(const linked_list &);
// No assignment operator
linked_list& operator = (const linked_list &);
public:
// Add an item to the list
void add(
// Item to add
const std::string &what
) {
// Create a node to add
struct node *new_ptr = new node;
// Add the node
new_ptr->next = first;
new_ptr->data = what;
first = new_ptr;
}
bool is_in(const std::string &what);
};
/************************************************
* is_in -- see if a string is in a *
* linked list. *
* *
* Returns true if string's on the list, *
* otherwise false. *
************************************************/
bool linked_list::is_in(
// String to check for
const std::string &what
) {
/* current structure we are looking at */
struct node *current_ptr;
current_ptr = first;
while (current_ptr != NULL) {
if (current_ptr->data == what)
return (true);
current_ptr = current_ptr->next;
}
return (false);
}
/************************************************
* linked_list::~linked_list -- Delete the *
* data in the linked list. *
************************************************/
linked_list::~linked_list(void) {
while (first != NULL) {
delete first;
first = first->next;
}
}
int main() {
linked_list list; // A list to play with
list.add("Sam");
list.add("Joe");
list.add("Mac");
if (list.is_in("Harry"))
std::cout << "Harry is on the list\n";
else
std::cout << "Could not find Harry\n";
return (0);
}
رامین مرادی
دوشنبه 15 اسفند 1390, 19:55 عصر
مشکل در Destructor هست.
وقتی آخرین Node با delete آزاد میشه.
عضو next در آخرین Node از مقداز 0 یا همون NULL به یک مقدار دیگه تغییر پیدا میکنه.
و این باعث میشه که حلقه یه دور دیگه Loop بشه.چون next دیگه برابر با 0 نیست ، یک Node غیر معتبر بوجود میاد و delete شدن اون باعث میشه برنامه Crash کنه.
ولی من دارم به این فکر میکنم که چرا delete این تغییر رو ایجاد میکنه؟
Update:
بخاطر اینه که بعد آزاد شدن اشاره گر ، تابع free اطلاعاتی (مربوط به bookkeeping ) رو در همون قسمت ذخیره میکنه.
Problem خوبی بود.ممنون
خوب بود نکات ریز رو همیشه باید جدی گرفت به قول یکی از اساتیدم که گفته بودن دو راه برای درست نوشتن برنامه وجود داره ولی همیشه سومین راه کار می کنه
خوب یه کم هم من توضیح بدم البته بی ادبی نباشه استاد...
ببخشید یه کم ترجمه ام ضعیفه خودتون درستش کنید.
مشکل در کد زير است:
while (first != NULL) {
delete first;
first = first->next;
}
اين داده ها را پاک کرده و سپس از آنها استفاده می کند. بعد از اينکه چيزی پاک شد، بايد دور انداخته شود. هميشه
قرار دهيد. وقتی برنامه با مقداری NULL کردن يک اشاره گر، مقدار آن را برابر free کردن يا delete بعد از
محافظت نوشته می شود، مشکل قابل مشاهده است:
delete first;
first = NULL;
first = first->next;
اگر بخواهيم از اشاره گر استفاده کنيم، ،NULL به first همچنين، بخاطر محافظت اضافه شده، يعنی مقدار دهی
در اغلب سيستم ها با شکست مواجه می شويم.
دوستان یه دو سه روزی نیستم ولی سعی می کنم پنج شنبه عصر یه مسئله جالب بزارم امیدوارم موفق باشید....
Cancer
سه شنبه 16 اسفند 1390, 11:34 صبح
تابع ()main باید int رو به عنوان مقدار برگشتی برگردونه.
چرا تابع main حتما باید یک مقداری رو برگردونه؟
یعنی اگه برنگردونه برنامه خطا می ده؟ نه خطا نمی ده.
بحث سر اون برنامه اول بود که گفتن بخاطر اینکه main، مقدار int برنمی گردونه خطا می ده.
ولی پس چرا من تست کردم خطا نداد؟
من خیلی از برنامه ها دیگه رو هم نوشتم که مقدار بازگشتی main رو از نوع void گرفتم و خطایی هم نداد.
مفداری هم که تابع main شما برمیگردونه به عنوان پارامتر به تابع ()exit فرستاده میشه.
تا وقتی که برنامه Exit میشه ، معلوم بشه که برنامه با چه نتیجه ای به پایان رسیده (مقدار 0 یا EXIT_SUCCESS نشان دهنده پایان موفقیت آمیز هست)
مقدار 0 پایان موفقیت آمیز است؟ یعنی اگه 1 بفرسته یعنی پایان موفقیت آمیز نبوده و خطا می ده یا هر مقدار دیگه ای؟
نکته ی دیگه اینه که تابع ()main قابل فراخوانی در داخل توابع دیگر هم هست.(چه در C و چه در ++C )
شما مطمئنی که می شه تو c++ تابع main رو فراخوانی کرد؟ من امتحان نکردم، ولی فکر نکم که بشه ها؟ برای اثبات می تونه با main یه تابع بازگشتی مستقیم بنویسی (مثلاً فاکتوریل) بزاری ببینیم جواب می ده یا نه.
در واقع تابع main ی که شما مینویسید اولین تابعی نیست که اجرا میشه.
خیلی اتفاق ها هم قبل و هم بعد از اجرای تابع main شما می افته .
تابع main اولین تابعی است که داخل برنامه ای که نوشتیم اجرا می شه.
به قول خودتون:
اون تابع اصلی که همون Entry Point برنامه شماست سمبل "main" رو Call کرده .
شما می تونین برنامه ای بنویسید که اول یه تابع یه اسم دیگه اول فراخوانی بشه (قبل از main) و اون تابع بیاد و main رو فراخوانی کنه؟
یادتون نره که بحث سر اینکه اگه تابع main مقدار void برگردنه برنامه خطا می ده یا نه؟
تشکر.
suraty
پنج شنبه 18 اسفند 1390, 16:23 عصر
سلام
تاپیک خیلی خوبیه. تقاضامند ادامه اون هستم.
راستی چرا اینقدر می گید تابلو خوب طرف دلسرد می شه.
shahmohammadi
جمعه 19 اسفند 1390, 10:56 صبح
دوستان اين دوستمون درست گفتن تابع مين مقداري رو به سيستم عامل بر مي گردونه و نمي تونه void باشه .آفرين به شما كه مثل بعضي ها عجله نكرديد و تشخيصتون خوب بود.
برنامه بعدي تو تايپيك بعدي!!!!!:تشویق:
بعضي از كامپايلر ها خروجي void رو براي تابع مين قبول مي كنند.
رامین مرادی
سه شنبه 23 اسفند 1390, 12:23 عصر
دوستان ببخشید که با تاخیر می یام اینجا
دارم رو دو سه تا مسئله جالب کار می کنم البته جواب می دن یعنی کار می کنن ولی استباه جواب می دن اگه آماده شد می زارم اینجا فعلا"
:چشمک:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.