Thursday, September 17, 2009
Draw Empire State Building Using Oracle PL/SQL
DECLARE
total_pyramid_length NUMBER;
total_pyramid_width NUMBER;
left_pyramid_shade_count NUMBER :=0;
middle_pyramid_shade_count NUMBER:= 0;
right_pyramid_shade_count NUMBER:= 0;
lines_printed_count NUMBER := 0;
new_line_flag VARCHAR2(3) := 'YES';
check_which_building NUMBER;
amt_of_space_interms_line NUMBER;
middle_space NUMBER := 15; -- this is to keep the initial space between the two horizontal lines to be atleast 3 spaces
print_middle_space NUMBER;
noof_lines_occupied_in_1_space NUMBER := 1.5; -- no of lines occupied in one space
increment_space_by NUMBER := 2; -- space should be incremented inbetween the lines to make it look like a moon
space_occupied_in_middle NUMBER;
noof_pics_left_side NUMBER;
noof_pics_right_side NUMBER;
building_1_width NUMBER;
building_2_width NUMBER;
building_3_width NUMBER;
building_4_width NUMBER;
building_5_width NUMBER;
building_6_width NUMBER;
---- #### Procedur to print the shaded part in the background #### ----
PROCEDURE print_shade(para_width NUMBER, next_line NUMBER)
IS
BEGIN
FOR lines_printed IN 1 .. next_line
LOOP
FOR width_of_shade in 1 .. para_width
LOOP
DBMS_OUTPUT.PUT('|');
END LOOP;
IF new_line_flag = 'YES'
THEN
dbms_output.new_line;
ELSIF new_line_flag = 'NO'
THEN
NULL;
END IF;
END LOOP;
END;
---- #### END OF Procedur to print the shaded part in the background #### ----
----#### Procedure to print empty spaces #### ----
PROCEDURE print_empty_space(width_of_space NUMBER)
IS
BEGIN
FOR for_empty_space in 1.. width_of_space
LOOP
DBMS_OUTPUT.PUT(' ');
END LOOP;
END;
---- ####END OF procedure to print empty spaces #### ----
---- #### Procedure to calculate the left right shaded amount #### ----
PROCEDURE calc_left_right_shade
IS
BEGIN
amt_of_space_interms_line := (middle_pyramid_shade_count * 1.5); --taking 1 spaces occupies around 1.5 times the line
left_pyramid_shade_count := CEIL((total_pyramid_width - middle_pyramid_shade_count)/2);
right_pyramid_shade_count := (total_pyramid_width - left_pyramid_shade_count) - amt_of_space_interms_line; -- space occupies more
--area when commpared to line so remove the extra lines that we calculted
--taking 1.5 as a standard
END;
---- #### END OF Procedure to calculate the left right shaded amount #### ----
---- #### Procedure to print buildings #### ----
PROCEDURE print_buildings
IS
BEGIN
IF check_which_building = 1
THEN
middle_pyramid_shade_count := building_1_width;
calc_left_right_shade;
ELSIF check_which_building = 2
THEN
middle_pyramid_shade_count := building_1_width + building_2_width;
calc_left_right_shade;
ELSIF check_which_building = 3
THEN
middle_pyramid_shade_count := building_1_width + building_2_width + building_3_width;
calc_left_right_shade;
ELSIF check_which_building = 4
THEN
middle_pyramid_shade_count := building_1_width + building_2_width + building_3_width + building_4_width;
calc_left_right_shade;
ELSIF check_which_building = 5
THEN
middle_pyramid_shade_count := building_1_width + building_2_width + building_3_width + building_4_width + building_5_width;
calc_left_right_shade;
ELSIF check_which_building = 6
THEN
middle_pyramid_shade_count := building_1_width + building_2_width + building_3_width + building_4_width + building_5_width + building_6_width;
calc_left_right_shade;
END IF;
END;
---- #### END OF Procedure to print buildings #### ----
---- #### Procedure to Calculate the Left, Right , and Middle space #### ----
PROCEDURE calc_lft_rt_middl(para_middle_space NUMBER)
IS
BEGIN
space_occupied_in_middle := CEIL(middle_space * noof_lines_occupied_in_1_space);
noof_pics_left_side := FLOOR((100 - (space_occupied_in_middle))/2);
noof_pics_right_side := (100 - (noof_pics_left_side + space_occupied_in_middle) );
print_middle_space := middle_space;
new_line_flag := 'NO';
print_shade(noof_pics_left_side,1); -- printing the line on the left side
print_empty_space(print_middle_space); -- printing the space in between
print_shade(noof_pics_right_side,1); -- printing the line of the right side
DBMS_OUTPUT.NEW_LINE;
END;
---- #### END OF Procedure to Calculate the Left, Right , and Middle space #### ----
---- #### Proceudre to print the moon on top of the building #### ----
PROCEDURE print_moon
IS
BEGIN
-- top half of the circle
FOR noof_line_with_space in 1 .. 2
LOOP
calc_lft_rt_middl(middle_space);
middle_space := middle_space + increment_space_by ;
END LOOP;
-- bottom half of the circle
FOR bottom_half_circle in 1 .. 2
LOOP
middle_space := middle_space - increment_space_by ;
calc_lft_rt_middl(middle_space);
END LOOP;
new_line_flag := 'YES';
print_shade(100,2); -- prints the top part of the shade
END;
---- #### END OF Proceudre to print the moon on top of the building #### ----
BEGIN
total_pyramid_width:= 100;
building_1_width := 1;
building_2_width := 2;
building_3_width := 3;
building_4_width := 8;
building_5_width := 8;
building_6_width := 8;
print_shade(100,5); -- prints the top part of the shade
print_moon; -- calls the procedure to print the moon on top
--print_shade(100,5); -- prints the top part of the shade
FOR building_line_printed in 5 .. 50 -- lines printed is taken from 5 coz, 5 lines have already been printed in the print_shade
LOOP
IF building_line_printed BETWEEN 5 AND 9
THEN
check_which_building := 1;
ELSIF building_line_printed BETWEEN 10 AND 14
THEN
check_which_building := 2;
ELSIF building_line_printed BETWEEN 15 AND 19
THEN
check_which_building := 3;
ELSIF building_line_printed BETWEEN 20 AND 24
THEN
check_which_building := 4;
ELSIF building_line_printed BETWEEN 25 AND 29
THEN
check_which_building := 5;
ELSIF building_line_printed BETWEEN 30 AND 50
THEN
check_which_building := 6;
END IF;
print_buildings;
new_line_flag := 'NO';
print_shade(left_pyramid_shade_count,1);
new_line_flag := 'NO';
print_empty_space(middle_pyramid_shade_count);
new_line_flag := 'YES';
print_shade(right_pyramid_shade_count,1);
END LOOP;
END;
Subscribe to:
Post Comments (Atom)
This is creative idea to draw empire state building using Oracle PL/SQL. The code design for this is not easy. You need to have vast knowledge of Oracle Pl/SQl for understanding the given code. The code is bit difficult.
ReplyDeletesap testing tools