برنامه ی دفتر چه تلفن ***فوری***

computer_soft

اخراجی موقت
سلام، امیدوارم امتحاناتونو خوب داده باشین.
یک برنامه دادن بهمون تا 14 بهمن زمان داریم.
یک دفترچه تلفن با امکانات زیر
1.امکان درج شماره تلفن با نام
2.امکان جستجو بر اساس تلفن
3.امکان جستجو بر اساس نام
4.امکان حذف شماره
5.چاپ لیست شماره ها ی مرتب بر اساس شماره تلفن
6.چاپ لیست مرتب بر اساس نام

ممنون
اگر این برنامه زیاد برایتان کار میبرد اما میتوانید بنویسید ، تا کمتر از 10هزار حساب هم میکنم.
مرسی
تا 14 بهمن حداکثر زمان
که اگه بتونین توضیح هم بدین ممنون میشم
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
اول این که فکر نمی کنم کسی بره مقاصد مادی تو این سایت وارد شده باشه!!
دوم این که نمی دونم بیرون قیمت گرفتید یا نه اما به خصوص بره اسمبلی مبالغ خیلی بیشتری ا این چیزی که گفتید درخواست می کنن! مثلاً اون موقع که ما اسمبلی داشتیم، یکی از پروژه ها برنامه ای بود که بتونه یه صدا و یا چند نت رو اجرا کنه که کار ساده ای در حدود 100 خط بود که روی اسپیکر کیس کار می کرد! اما از طرف برای نوشتن و آموزشش 60000 تومان گرفته بودن!
سوم در مورد برنامه، کار سختی نیست شروع کنید، مطمئناً می شه!
بره سادگی کار یه ساختمان بگیرید که نام، شماره تلفن، مکان در لیست مرتب براساس نام، مکان در لیست مرتب براساس شماره تلفن، فیلد هاش هستند و آرایه ای مثلاً 1000 تایی از این ساختمان در نظر بگیرید.
یه آرایه هم باید در نظر بگیرید که شماره ی خانه ی آرایه ی شامل ساختمانی که حذف شده رو نگهداری می کنه! پس نیازی نیست واقعاً حذف کنید. فقط چاپ نمی کنید و ورودی بعدی رو روش ذخیره می کنید.
برای سهولت کار هر بار که یه شماره وارد می شه باید مرتب سازی انجام بشه و فیلدهای 3 و 4 که گفتم پر می شن!
بازم سؤالی داشتید بپرسید!
 

computer_soft

اخراجی موقت
ممنون.
من الان همین اولش موندم که باید data داشته باشم یا نه؟!
اگه داشته باشم که برای دریافت نام و شماره باید چیکار کنم؟ اگه نداشته باشم ثبات کم میارم برای برنامه..
 

computer_soft

اخراجی موقت
"نام، شماره تلفن، مکان در لیست مرتب براساس نام، مکان در لیست مرتب براساس شماره تلفن، فیلد هاش هستن"
منظورتون رو از این جمله متوجه نشدم فیلد هاش هستند رو متوجه نشدم
 

computer_soft

اخراجی موقت
منظورتون از ساختمان ، پروسجره؟
من اینا رو خوندم :"دستورات محاسباتی-دستورات کنترلی-دستورات منطقی-روش های آدرس دهی - پروسجر ها و پشته - دستورات رشته ای - "
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
فکر کنم قبل از اسمبلی باید ساختمان داده پاس کرده باشید یا تو مبانی (C) بهتون گفته باشن که ساختمان چیه!! منظورم همون Structure اه! (گیر می دن فارسی بنویسید این مشکلاتم داره!)
اونایی هم که نوشتید عناصر ساختمان هستند! مثلاً:
کد:
[LEFT]struct PhoneBook
{
string name;
string telNo;
int NP;
int TP;
}[/LEFT]
مطمئناً تو برنامه به data احتیاج دارید چون باید به صورت یه آرایه (ایستا یا پویا) داده ها ذخیره بشن!! تازه! قرار نیست برنامه تون با کاربر ارتباط داشته باشه و مثلاً ازش بخواد که نام رو وارد کنه یا انتخابش رو، که می خواد نام وارد کنه، جستجو کنه، لیست رو ببینه، و ... ؟؟ اینا همه باید به صورت رشته تو data تعریف بشن دیگه!!!
البته اگه کار به Struct رو سخت می دونید باید دو تا آرایه برای اسامی و شماره تلفن ها در نظر بگیرید، اما هر تغییری تو یکی از آرایه ها باید تو اون یکی هم اعمال بشه! مثلاً اگه دارید برحسب نام مرتب می کنید و باید خونه ی 4 و 5 جا به جا بشن، باید خونه ی 4 و 5 آرایه ی شماره تلفن ها هم جا به جا بشن! این روش هم می تونه مناسب باشه!
 

computer_soft

اخراجی موقت
ممنون
چرا حالا انقد عصبانی اید!
ساختمان داده مال ترم بعد از اسمبلی هست .
استراکچر رو تو سی و سی++ خوندیم. اما معادلش تو اسمبلی رو نخوندیم.متاسفانه.
یک قسمت برنامه درج شماره تلفن همراه با نام است ، اگه از ماربر دریافت نکنیم پس چه طوری باید درج کنم؟
برای مرتب سازی ، روش حبابی میگن ساده تره.
قسمت حذف شماره اش رو که چند پیام قبل توضیح دادین رو متوجه نشدم.ممنون میشم دوباره توضیح بدین.
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
از کجا فهمیدید عصبانی شدم!! مطمئن باشید در اون صورت اصلاً جواب نمی دم!
1.ما اسمبلی رو بعد از ساختمان داده پاس کردیم بره همین گفتم!
2.معمولاً پروژه رو طوری می دن که نیاز باشه طرف دنبال چیزایی بره که بهش یاد ندادن!! مثلاً پروژه ی اسمبلی من کاملاً تو محیط گرافیکی بود و با موس هم همه ی کارا انجام می شد!!
3.اگه دوست ندارین دنبال چیز جدید برید از همون آرایه ها استفاده کنید. یه آرایه برای "نام ها" و یکی برای "شماره ها".
4.این که نوشتید "از کاربر دریافت نکنیم" رو متوجه نمی شم! مگه من گفتم از جای دیگه ای بیارید! گفتم بره ارتباط با کاربر، این که انتخاب کنه چی کار می خواد بکنه، نام رو وارد کنه یا شماره رو، و ... نیاز دارید که بخش Data داشته باشید! مثلاً تو بخش Data یه رشته دارید که نوشته MSG db "Enter your choice و خیلی موارد دیگه مثل همون آرایه ها، و شاید چند متغیر! (فکر کنم اون جمله ی "اصلاً قرار نیست... "منظورتونه! اونو با حالت سؤالی بخونید!!)
5.همون طور که گفتید ساده ترین روش مرتب سازی حبابیه! اما باید توجه کنید که تغییر روی یه آرایه روی آرایه ی دیگه هم تأثیر می ذاره! همون طور که دفعه ی پیش گفتم!
6.وقتی درخواست حذف میاد هم می شه از جستجوی دودویی در آرایه ی مرتب استفاده کرد و هم جستجوی خطی در آرایه ی اصلی! بعد از حذف هم باید همه ی خونه های بعد از اون خونه، یکی به عقب برن. راه ساده تر اینه که اندیس خونه های حذف شده رو در یه آرایه ی دیگه بذارید و واقعاً حذفشون نکنید. موقع چاپ هم اگر خونه ای تو اون آرایه باشه چاپ نمی شه! اما اگه درخواست درج بیاد، روی این خونه ی حذف شده درج می شه!
 

computer_soft

اخراجی موقت
"تغییر روی یه آرایه روی آرایه ی دیگه هم تأثیر می ذاره!"
چه طوری باید اینو متوجه شم؟
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
در ادامه ی جمله گفتم که "قبلاً هم اشاره کردم"!
یعنی اگه تو مرتب سازی قراره خونه ی 4 و 5 آرایه ی نام ها جابه جا بشن باید خونه ی 4 و 5 آرایه ی شماره ها هم جابه جا بشن تا مثلاً شماره ی اصغر با شماره ی ممد جابه حا نشه!!!
 

computer_soft

اخراجی موقت
زیاد متوجه نشدم اما یه چیزایی گرفتم ، مینویسم و چیزی که نوشتم رو میگم ببینین درسته یا نه.
یا همین قسمت رو مینویشم بهتون نشون میدم و یا کل برنامه رو تا 2 3 روز آینده مینویسم اینجا میذارم.یا بهتون پیام میدم
ممنون
 

computer_soft

اخراجی موقت
این که اول برنامه است و فقط منو است:
.model small
.stack 1000
.data
a db '1.add',0ah,0dh,'$'
b db '2.search with number telephone',0ah,0dh,'$'
c db '3.search with name',0ah,0dh,'$'
d db '4.delete number',0ah,0dh,'$'
e db '5.list with number telephone',0ah,0dh,'$'
f db '6.list with name',0ah,0dh,'$'

.code
main proc far
mov ax,@data
mov ds,ax

mov ah,9
lea dx,a
int 21h

mov ah,9
lea dx,b
int 21h

mov ah,9
lea dx,c
int 21h

mov ah,9
lea dx,d
int 21h

mov ah,9
lea dx,e
int 21h

mov ah,9
lea dx,f
int 21h





حالا برای اینکه از کاربر اسم و شماره تلفن بگیره باید چی کار کنم چه کد ای بزنم؟
برای cin>>name<<number معادلش چی میشه؟
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
این جا در مورد گرفتن رشته توضیح دادم
در ضمن باید جداجدا نام و تلفن رو دریافت کنید
بخش data هم آرایه ها رو نداره که!
 

computer_soft

اخراجی موقت
رشته ها رو باید چه طوری بگیرم؟
من قبلا فقط عدد میگرفتم.
mov ah,1
int 21h
برای رشته باید چه کدی بنویسم؟
قسمت data رو هم همزمان با نوشتن کامل میکنم
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
آدرس دادم که!
برید تاپیک آموزشم اون جا هست!
روی "این جا" در پست قبل کلیک کنید!
 

computer_soft

اخراجی موقت
سلام ، ممنون
یعنی این؟
.model small
.stack 1000
.data
a db '1.add',0ah,0dh,'$'
b db '2.search with number telephone',0ah,0dh,'$'
c db '3.search with name',0ah,0dh,'$'
d db '4.delete number',0ah,0dh,'$'
e db '5.list with number telephone',0ah,0dh,'$'
f db '6.list with name',0ah,0dh,'$'
string label byte
max db 20
len db ?
biffer db 20 dup('$'),'$'

.code
main proc far
mov ax,@data
mov ds,ax

mov ah,9
lea dx,a
int 21h

mov ah,9
lea dx,b
int 21h

mov ah,9
lea dx,c
int 21h

mov ah,9
lea dx,d
int 21h

mov ah,9
lea dx,e
int 21h

mov ah,9
lea dx,f
int 21h

mov ah,0ah
lea dx,string
int 21h ;daryaft reshte


main endp
end main

بعد این رشته رو تو چه ثباتی ذخیره میکنه؟
که بخوام بریزم تو t (مثلا یعنی شماره تلفن)
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
لازم نیست این کار رو کنید!
باید رشته رو مستقیماً از بافر به آرایه انتقال بدید! آرایه رو به صورت زیر تعریف کنید:
کد:
[LEFT]Name db 1000 dup(20 dup('$'))[/LEFT]
آرایه ی تلفن هم به همین شکل و با نام جدا!
و باید با یه حلقه یا دستورات رشته ای، رشته رو به یه خونه از این آرایه (که در واقع ماتریسه!) منتقل کنید. برای سهولت کار هم باید یه شمارنده ی متغیری تو قسمت داده بره این که بدونیم اولین خونه ی خالی کجاست تعریف کنید.
 

computer_soft

اخراجی موقت
mov ah,0ah
lea dx,string
int 21h
باید همین باشه؟

حالا این برای دریافت نام است اگه بخوام mov کنم تو name چی رو باید بریزم؟
یعنی (مثلا وقتی ضرب میکردین AX رو mov میکردیم تو متغیر A )
حالا باید چی رو بریزیم تو name که وقتی شماره رو جدا میگیریم ، نام از بین نره.
تشکر
 

computer_soft

اخراجی موقت
یعنی
.model small
.stack 1000
.data
a db '1.add',0ah,0dh,'$'
b db '2.search with number telephone',0ah,0dh,'$'
c db '3.search with name',0ah,0dh,'$'
d db '4.delete number',0ah,0dh,'$'
e db '5.list with number telephone',0ah,0dh,'$'
f db '6.list with name',0ah,0dh,'$'
name db 1000 dup(20 dup('$'))
number db 1000 dup(20 dup('$'))

.code
main proc far
mov ax,@data
mov ds,ax

mov ah,9
lea dx,a
int 21h

mov ah,9
lea dx,b
int 21h

mov ah,9
lea dx,c
int 21h

mov ah,9
lea dx,d
int 21h

mov ah,9
lea dx,e
int 21h

mov ah,9
lea dx,f
int 21h

mov ah,0ah
lea dx,string
int 21h ;daryaft reshte

mov name,ax

mov ah,0ah
lea dx,string
int 21h

mov number,ax


main endp
end main

درسته؟
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
گفتم که یه حلقه یا دستورات رشته ای!
مثلاً:
کد:
[LEFT]mov ax,index
mov bx,20
mul bl
 
mov cl,String[1]
mov ch,0
lea bx,string[2]
mov si,0
mov di,ax
 
copying:
mov Name[di],[bx+si]
inc di
inc si
cmp si,cx
jnz copying[/LEFT]
که index شمارنده ی خونه ی جاریه!
 

computer_soft

اخراجی موقت
copying:
mov Name[di],[bx+si]
inc di
inc si
cmp si,cx
jnz copying

این قسمت جداست؟ از بالاییش؟
میشه خواهشا فارسی توضیح بدین که هر خط اش داره چی کار میکنه.
ممنون میشم
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
مگه تا الان خارجی می گفتم!!!؟
من معمولاً برنامه رو به صورت بخش های جدا می نویسم تا درکش ساده تر بشه! با یه خط فاصله! این به این معنی نیز که کاملاً مستقل هستند.
این رو در نظر بگیرید:
$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$
آرایه ای که تعریف کردید یعنی این! البته به صورت متوالی، برای درک بهتر زیر هم نوشتم! تعداد این سطرها هم 1000 تاست. برای این که به ابتدای هر سطر برسید تو C می نوشتید:
کد:
[LEFT]Name[i][0][/LEFT]
اما تو اسمبلی فقط یه آدرس می تونید بدید. برای رفتن به ابتدای سطر باید شماره ی سطر رو در تعداد ستون ها ضرب کنید. پس index رو در 20 ضرب می کنیم.
حالا اشاره گر si به ابتدای رشته ی ورودی اشاره می کنه و مقدار به دست اومده در بالا هم که در di اه به ابتدای رشته ی خروجی! حلقه ی copying هم برای کپی رشته ای به طول len اه که طول رشته اس!
 

computer_soft

اخراجی موقت
میشه قسمت دریافتشو بنویسین شما؟
3 روز 4 ر.ز دیگه وقت ندارم. توروخدا.بعد من اشکالامو ار رو برنامه ای که نوشتین میپرسم
البته اگه همه اش رو بنویسین که خیلی خوب تر میشه!

الان اینی ه نوشتین چیکار میکنه؟ رشته میگیره؟ میریزه تو چی؟ تو name میریزه؟ برای شماره گرفتنش باید همینو بنویسیم به جای name ، باید number بذاریم؟
 

computer_soft

اخراجی موقت
میشه برای دریافت رشته نگیریم اصلا.!
آخه سخته
یعنی آرایه بگیریم
یعنی تو data بنویسیم
Name 10dup(?)
و number 10dup(?)
?
 

Sarp

مدیر بازنشسته
میبخشین که میپرم وسط بحثتون
قصد جسارت هم نیست
جناب computer_soft شما مطمئن هستید که جزوه یا کتاب رو خوندین ؟
چون من با اینکه اسمبلی هنوز پاس نکرده ام ، یه چیزایی از اینا دستگیرم شده
ولی شما انگار نه !
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
میبخشین که میپرم وسط بحثتون
قصد جسارت هم نیست
جناب computer_soft شما مطمئن هستید که جزوه یا کتاب رو خوندین ؟
چون من با اینکه اسمبلی هنوز پاس نکرده ام ، یه چیزایی از اینا دستگیرم شده
ولی شما انگار نه !

با سلام،
خواهش می کنم! نظرات شما همیشه به جا بوده!
فکر می کنم این تاپیک نمونه ی خوبی باشه بره دوستانی که گیر می دن چرا بچه ها رو راهنمایی نمی کنی و برنامه ی آماده براشون می نویسی!!!
ولی اگه صد صفحه هم بشه پیش می رم!
 
  • Like
واکنش ها: Sarp

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
دوست عزیز برنامه ی مورد نظر شما چند صد خط کد نیاز داره و بخش دریافت از ورودیش ساده ترین قسمتشه!!!
نکته ی بعدی این که تو زبان c هم که می خواید 1000 تا نام رو بگیرید از دستور char name[1000 استفاده می کنید؟؟
بخش دریافت و ذخیره رو هم که کامل نوشتم براتون، دیگه چه مشکلی هست؟ فقط باید یه شمارنده یا اندیس که نامش مثلاً index اه رو از نوع dw به بخش data اضافه کنید. مقدار اولیه هم صفر باشه. هر نام جدید که اضافه می شه یکی بهش اضافه می کنیم.
 

computer_soft

اخراجی موقت
با سلام،
دوست عزیز برنامه ی مورد نظر شما چند صد خط کد نیاز داره و بخش دریافت از ورودیش ساده ترین قسمتشه!!!
نکته ی بعدی این که تو زبان c هم که می خواید 1000 تا نام رو بگیرید از دستور char name[1000 استفاده می کنید؟؟
بخش دریافت و ذخیره رو هم که کامل نوشتم براتون، دیگه چه مشکلی هست؟ فقط باید یه شمارنده یا اندیس که نامش مثلاً index اه رو از نوع dw به بخش data اضافه کنید. مقدار اولیه هم صفر باشه. هر نام جدید که اضافه می شه یکی بهش اضافه می کنیم.

توC وقتی میخوایم رشته بگیریم میزنیم char name[10][10] مثلا.
من هر ترم شاگرد اول تا سوم ام و فقط منم که این پرزه رو دارم انجام میدم کلا.
ما دریافت رشته نخوندیم همیشه داشتیم عدد میگرفتیم... دلیل نمیشه یکی بیاد به شخصیت انسان ها تهمت بزنه
 

computer_soft

اخراجی موقت
با سلام،
دوست عزیز برنامه ی مورد نظر شما چند صد خط کد نیاز داره و بخش دریافت از ورودیش ساده ترین قسمتشه!!!
نکته ی بعدی این که تو زبان c هم که می خواید 1000 تا نام رو بگیرید از دستور char name[1000 استفاده می کنید؟؟
بخش دریافت و ذخیره رو هم که کامل نوشتم براتون، دیگه چه مشکلی هست؟ فقط باید یه شمارنده یا اندیس که نامش مثلاً index اه رو از نوع dw به بخش data اضافه کنید. مقدار اولیه هم صفر باشه. هر نام جدید که اضافه می شه یکی بهش اضافه می کنیم.

نمیفهمم برنامه داره چیکار میکنه!
 

Similar threads

بالا