jadval ko'rinishidagi miqdorlar Bir o‘lchovli butun turdagi jadval tavsifi: var B: array [10..100] of integer; Bir o‘lchovli belgili turdagi jadval tavsifi: var A: array [7..21] of string; Ikki o‘lchovli haqiqiy turdagi jadval tavsifi: var M: array [1..23,10..10] of real;
Massivlar n o'lchamli bo'lishi mumkin. Masaladan kelib chiqib, massiv o'lchamini beriladi. Masalan R^n fazoda koordinatalari bilan berilgan K ta gipperkublarning o'zaro ichma-ich joylashganligini tekshirish.
savol2 da raqamlar yig'indisini hisoblash procedurasi: Procedure raq_sum(a:integer ; Var son : integer ) ; Var s,i:integer; begin s : = 0 ; while( a > 0 ) do begin s : = s + (a mod 10 ) ; a : = a div 10; end; son : = s ; end; Shu algoritmdan foydalanib o'ziz dasturni tugatishga harakat qiling.
Bunaqa holatda procedura emas, funksiya ko'rinishida qilish ma'qulroq. To'g'ri, dastur mantig'ida ahamiyatli emas, lekin "chiroyli" yozish uchun muhim.
To'g'ri funktsiyada "chiroyli" chiqadi, kollejda ko'pincha o'quvchilar procedura( yoki void turidagi metod) bilan ishlaganda tezroq tushunar edi. Shu tezroq tushunib olish uchun edi. Lekin funktsiyada rostdan chiroyli chiqadi.
program HelloWorld; // Bu procedurada son nomli birorta natural son kiritilsa, // raqam_summasi o'zgaruvchisiga raqam summasini hisoblabyuklab qaytaradi Procedure raq_sum ( son:integer;Var raqam_summasi:integer ) ; Var s,i:integer; begin s:=0; while ( son > 0 ) do begin s: = s + ( son mod 10 ) ; son : = son div 10 ; end; raqam_summasi: = s ; end; var n,m,i,s:integer; begin writeln( 'N ni kiriting: ' ) ; Readln( N ); writeln( ' M ni kiriting: ' ) ; Readln( M ) ; for i : = 1 to n do //1 dan n gacha sonlarni tekshirishimiz kerak begin raq_sum( i , s ) ; // i- sonni proceduraga murojaat qilib, // s o'zgaruvchiga raqamlar yig'indisini yig'amiz. if( s = m ) then Writeln( i,' da : ', s ) ;
buni boshqacharoq usulda funktsiya yordamida ishlash ham mumkin. Umuman funktsiya procedura ishlatmasdan, whileni for ichiga qo'yibishlashiz ham mumkin.
Bu optimal yechim emas. Masalan,
k = 10^(m/9) ;
k = k*(m mod 9)+k-1 ;
sikldagi i ni qiymatini k dan boshlab sikl qadamini 9 qilinsa, dastur yuqoridagidek ~10 baravar tez bajariladi.
Bu ham eng optimal emas, umuman raq_sum prosedurasisiz ham yechish mumkin, Ya'ni har bir sonni raqamlarini hisoblamasdan. Matematik dasturlashga yorqin misol.
Savol IM6. Qo'shincha o'zgaruvchilardan foydalanmay A va B satr turdagi o'zgaruvchilarning qiymatini almashtirib ekranga chiqarish dasturini tuzing. Oddiyga uxshaydikuda ... yechish algoritmini aytizlar
Javob IM6
var a, b : string ;
begin
readln ( a ) ;
readln ( b ) ;
a = a+b ;
b = copy ( a, 1, length ( a ) - length ( b )) ;
a = copy ( a, length ( b ) 1, length ( a ) - length ( b ) ;
writeln ( a ) ;
writeln ( b ) ;
end.
var i , n, s : integer; begin readln ( n ); s : = 0; for i : = 1 to n do s : = s + ( 2 * i - 1 ); writeln ( s ) ; end. optemallashtirish, ixchamlashlarni ko'ring dasturni yanada chiroyli qilaylik
Savol IM 8. Berilgan ( x0 , y0 ) butun koordinatali nuqtani markaz butun son koordinatali ( x, y ) nuqtadagi R butun qiymatli radiusli doiraga tegishli yoki tegishli emasligini aniqlash aniqlash dasturini tuzing, (shart tekshirish mumkin emas)
Savol IM 9. Uchburchakni a b c tomonlari berilgan. Shu ucburchakni o'tkir o'tmas yoki to'g'ri burchakli ekanini aniqlash dasturini tuzing Agar a * a + b * b > c * c u holda o'tkir Agar a * a + b * b = c * c u holda to'g'ri Agar a * a + b * b > c * c u holda o'tmas savol c gepatinuza eng katta tomon a, b kichik tomonligini qanday olamiz(bilamiz)?
if (a>b) and (a>c) then begin max=a a=c c=max end else if (b>a) and (b>c) then begin max=b b=c c=max end uchunchi hol o'zi bajarilaveradi bo'ladimi shu yozuv
Мы используем cookie-файлы, чтобы улучшить сервисы для вас. Если ваш возраст менее 13 лет, настроить cookie-файлы должен ваш законный представитель. Больше информации
Комментарии 77
Bir o‘lchovli butun turdagi jadval tavsifi: var B: array [10..100] of integer;
Bir o‘lchovli belgili turdagi jadval tavsifi: var A: array [7..21] of string;
Ikki o‘lchovli haqiqiy turdagi jadval tavsifi: var M: array [1..23,10..10] of real;
Masalan R^n fazoda koordinatalari bilan berilgan K ta gipperkublarning o'zaro ichma-ich joylashganligini tekshirish.
Procedure raq_sum(a:integer ; Var son : integer ) ;
Var
s,i:integer;
begin
s : = 0 ;
while( a > 0 ) do
begin
s : = s + (a mod 10 ) ;
a : = a div 10;
end;
son : = s ;
end;
Shu algoritmdan foydalanib o'ziz dasturni tugatishga harakat qiling.
// Bu procedurada son nomli birorta natural son kiritilsa,
// raqam_summasi o'zgaruvchisiga raqam summasini hisoblabyuklab qaytaradi
Procedure raq_sum ( son:integer;Var raqam_summasi:integer ) ;
Var
s,i:integer;
begin
s:=0;
while ( son > 0 ) do
begin
s: = s + ( son mod 10 ) ;
son : = son div 10 ;
end;
raqam_summasi: = s ;
end;
var
n,m,i,s:integer;
begin
writeln( 'N ni kiriting: ' ) ;
Readln( N );
writeln( ' M ni kiriting: ' ) ;
Readln( M ) ;
for i : = 1 to n do //1 dan n gacha sonlarni tekshirishimiz kerak
begin
raq_sum( i , s ) ; // i- sonni proceduraga murojaat qilib,
// s o'zgaruvchiga raqamlar yig'indisini yig'amiz.
if( s = m ) then Writeln( i,' da : ', s ) ;
end;
readln;
end.
k = 10^(m/9) ;
k = k*(m mod 9)+k-1 ;
sikldagi i ni qiymatini k dan boshlab sikl qadamini 9 qilinsa, dastur yuqoridagidek ~10 baravar tez bajariladi.
Bu ham eng optimal emas, umuman raq_sum prosedurasisiz ham yechish mumkin, Ya'ni har bir sonni raqamlarini hisoblamasdan. Matematik dasturlashga yorqin misol.
var a, b : string ;
begin
readln ( a ) ;
readln ( b ) ;
a = a+b ;
b = copy ( a, 1, length ( a ) - length ( b )) ;
a = copy ( a, length ( b ) 1, length ( a ) - length ( b ) ;
writeln ( a ) ;
writeln ( b ) ;
end.
begin
readln ( n );
s : = 0;
for i : = 1 to n do
s : = s + ( 2 * i - 1 );
writeln ( s ) ;
end.
optemallashtirish, ixchamlashlarni ko'ring dasturni yanada chiroyli qilaylik
var n, s: integer;
begin
readln ( n ); s = n*n;
writeln ( s );
end.
Agar a * a + b * b > c * c u holda o'tkir
Agar a * a + b * b = c * c u holda to'g'ri
Agar a * a + b * b > c * c u holda o'tmas
savol c gepatinuza eng katta tomon a, b kichik tomonligini qanday olamiz(bilamiz)?
if (b>a) and (b>c) then begin max=b b=c c=max end
uchunchi hol o'zi bajarilaveradi
bo'ladimi shu yozuv