Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OT4ET1

.docx
Скачиваний:
14
Добавлен:
09.02.2015
Размер:
37.36 Кб
Скачать

Министерство образования и науки РФ

Санкт-Петербургский Государственный Электротехнический Университет имени

В.И. Ульянова (Ленина) «ЛЭТИ».

Факультет Компьютерных Технологий и Информатики

Кафедра вычислительной техники

 

ОТЧЕТ

по лабораторной работе №1

«Условные операторы и циклы на языке Си»

по дисциплине «Программирование»

 

 

 

 

Выполнил студент гр.1305 Головин В.В.

Проверил к.т.н. доцент Сискович Т.И.

 

 

 

Санкт-Петербург

2011 г.

 

 Цель работы: Получение практических навыков при изучении языка «С». Изучение условных операторов и операторов цикла на языке программирования «С». 

Задание: Разработать алгоритм и написать программу, проверяющую многократно, по желанию пользователя, попадает ли точка с заданными координатами (х;у) в указанную область на плоскости, находится на границе области или вне области. Необходимо предусмотреть изменения параметра, задающего область, и изменения координат точки по желанию пользователя. Область на плоскости выбрать самостоятельно.

Заданная область заштрихована на рис. 1.

y

y=x

a x

рис.1.Заданная область

x=a

Уточнение задания: В начале программа предлагает пользователю задать сдвиг прямой x=a и две координаты точки (x ; y) на плоскости.

При разработке алгоритма следует учесть, что изначальные данные могут быть неправильно введены. Например, при вводе значения сдвига меньшего или равного нулю, программа сразу же информирует пользователя о том, что такие данные нельзя использовать в решении данной задачи и запрашивает ввести некорректные данные заново.

 

Контрольные примеры приведены в таблице 1:

 Таблица 1.Контрольные примеры.

Исходные данные

Результат

x

y

a

0

0

1

Лежит на границе

3

1

10

Лежит в области

10

2

1

Не лежит в области

1

1

-2

Ошибка! a<0

 

 

Используемые переменные приведены в таблице 2:

Таблица 2. Используемые переменные.

Переменная

Тип

Назначение

x

float

Координата x точки.

y

float

Координата y точки.

a

float

Сдвиг прямой

k

int

Переменная для цикла, определяющего, нужно ли повторно вводить координаты

p

int

Вспомогательная переменная для цикла, определя-ющего, нужно ли повторно вводить сдвиг прямой x=a

7.Словесное описание алгоритма:

1.Ввод пользователем сдвига прямой x=a;

2. Если a>0 то пункт 3, в противном случае вывод на экран «Ошибка! “a” должен быть больше 0» и возврат к пункту 1.

3.Ввод пользователем координаты x;

4.Ввод пользователем координаты y;

5.Проверка условия «лежит в области»

(y<0&&x>a||y>0&&y<x&&x<a||x<y&&x>a)

Если выполняется, то вывод на экран «Лежит в области».В противном случае переход на пункт 6.

6.Проверка условия «лежит на границе»

(x==y&&x>=0||x==a||x>0&&y==0)

Если выполняется, то вывод на экран «лежит на границе».В противном случае вывод на экран «лежит вне области».

7.Вывод на экран сообщения «Хотите ли Вы ввести новые координаты?»

 Если введен «1», то переход на пункт 3, в противном случае переход на пункт 8.

8.Вывод на экран сообщения «Хотите ли вы ввести новый сдвиг «а»?»

Если введен «1», то переход на пункт 1, в противном случае выход из программы.

Блок-схема алгоритма на рис.2.

начало

 

Введите a

 

 

Ввод a

 

  Нет

a<=0

 

  Да

Ошибка! r>0)

 

 

 

1

2

 

Введите х

2

1

 

 

Ввод х

 

 

Введите y

 

Ввод у

 

 

Условие 1

  Да Нет

3

 

3

 

 

Да Нет

Условие 2

В области

На границе

Вне области

Вывод сообщ.

Ввод k

k==1?

Да

Нет

Вывод сообщ.

Ввод p

p==1?

Да

Нет

конец

Рис.2. Блок-схема алгоритма

Примечание:

Условие 1: (y<0&&x>a||y>0&&y<x&&x<a||x<y&&x>a)

Условие 2: (x==y&&x>=0||x==a||x>0&&y==0)

 9.Исходная программа

/*zadanie: yznatb prenadlewit li to4ka zadannomy grafiky.*/

#include <stdio.h>

#include <conio.h>

void main (void)

{float x=0,y=0,a=0;

int p,k;

do /*TToBTop Bceu TTporpaMMbI*/

{

do /*owibka pri ne polowitelnix zna4enijah a*/

{printf("\n\n\nBBeguTe koeficent sdviga pr9moj x=a\n");

scanf ("%d",&a);

if (a<0||a==0)

printf("\noLLIu6ka!!! Koeficent ‘a’ dolwen 6bITb bolwe nyl9");

}

while (a<0||a==0);

do

{printf("\n\nBBeguTe x\n");

scanf ("%d",&x);

printf("\nBBeguTe y\n");

scanf ("%d",&y);

if (y<0&&x>a||y>0&&y<x&&x<a||x<y&&x>a)

printf ("\n\n gaHHa9 To4ka TTpeHagJIe}I{uT rpafuky");

else

if (x==y&&x>=0||x==a||x>0&&y==0)

printf ("\n\n gaHHa9 To4ka JIe}I{uT Ha rpaHuu,e");

else

printf ("\n\n gaHHa9 To4ka JIe}I{uT BHe rpafuka");

printf ("\n\n BBeCTu HoBbIe KoopguHaTbI? (1/0)\n");

scanf ("%d",&k);

}

while (k==1);

printf ("\n BBecTu 3aHoBo cgBur TTp9IMou x=a? (1/0)");

scanf ("%d",&p);

}

while (p==1);

}

Результаты решения задачи:

При выполнении программы были получены результаты совпадающие со значениями, приведенными в таблице 1.Ошибки не обнаружены.

Выводы:

При выполнении лабораторной работы были получены практические навыки по изучению условных операторов и операторов цикла на языке программирования «С». 

#include <conio.h>

#include <stdio.h>

void main (void)

{

int x[10][10],y[10][10],i,j,i1,n,m,m2=0,i2,j2,f,p=1,r=0;

puts ("\n\n\nBbI6epuTe geucTBue:");

do /*BbIxog u3 TTporpaMMbI TTpu f=6*/

{

do /*TTpu TTepBoM BBoge HeT geucTBuu (2-5)*/

{

if (r==1) /*EcJIu MaTpuu,a y}I{e BBegeHa*/

puts ("\n\n1.BBog HoBou MaTpuu,bI");

else

puts ("\n1.BBog MaTpuu,bI");

puts ("2.BbIBog gaHHou MaTpuu,bI");

puts ("3.BbIBog pa3Mepa gaHHou MaTpuu,bI");

puts ("4.BbIBog HoBou MaTpuu,bI");

puts ("5.BbIBog pa3Mepa HoBou MaTpuu,bI");

puts ("6.BbIxog\n");

scanf ("%d",&f);

if (f!=1&&f!=6&&r==0) /*oLLIu6ka TTpu TTepBom BBoge geucTBuu (2-5)*/

puts ("\nCHa4aJIa BBeguTe MaTpuu,y!!!");

}

while (f!=1&&f!=6&&r==0); /*TToBTop BbIBoga MeH|-0 TTocJIe oLLIu6ku*/

switch(f)

{

case 1:

do /*BBog koJI-Ba cTpok*/

{printf ("\n\nBBeguTe n cTpok oT 1 go 10\n");

scanf ("%d",&n);

}

while (n<1||n>10);

do /*BBog koJI-Ba cToJI6u,oB*/

{printf ("\nBBeguTe m cToJI6u,oB oT 1 go 10\n");

scanf ("%d",&m);

}

while (m<1||m>10);

for (i=0;i<n;i++) /*BBog eJIeMeHToB MaTpuu,bI*/

for (j=0;j<m;j++)

{printf ("BBeguTe x[%d][%d]",i,j);

scanf ("%d",&x[i][j]);

}

r=1; /*MaTpuu,a BBegeHa*/

for (j=0,i1=0,m2=0,i2=0,j2=0;j<m;j++)

/*TTpoBepka Bcex cToJI6u,oB Ha HaJIu4ue oguHakoBbIx eJIeMeHToB*/

{for (i=0,p=0;i<n-1&&p==0;i++)

for (i1=i+1;i1<n&&p==0;i1++)

if(x[i][j]==x[i1][j])

p=1; /*gaHHbIu cToJI6eU, uMeeT oguHaKoBbIe eJIeMeHTbI*/

if (p==0) /* B eToM cToJI6u,e Bce eJIeMeHTbI pa3HbIe*/

{m2++; /* yBeJIu4eHue KoJI-Ba cToJI6u,oB HoBou MaTpuu,bI*/

j2=m2-1; /* HoMep ucTToJIb3yeMoro cToJI6u,a HoBou MaTpuu,bI*/

for (i2=0,i=0;i2<n;i2++,i++) /*BBog eJIeMeHToB gaHHogo cToJI6u,a*/

y[i2][j2]=x[i][j];

}

}

break;

case 2:

printf ("\nBBegeHHa9 MaTpuu,a:\n\n");

for(i=0;i<n;i++) /*BbIBog Bcex eJIeMeHToB MaTpuu,bI*/

{for (j=0;j<m;j++)

printf ("%6d",x[i][j]);

printf ("\n\n");

}

break;

case 3:

printf ("\nPa3MeP BBegeHHou MaTpuu,bI (%d",n);

printf ("x%d",m); /*BbIBog pa3Mepa ucxogHou MaTpuu,bI*/

printf (")\n\n");

break;

case 4:

if (m2>0) /*EcJIu ecTb xot9 6bI 1 cToJI6eu, = BbIBog MaTpuu,bI*/

{printf ("\nTToJIy4eHHa9 MaTpuu,a:\n\n");

for(i2=0;i2<n;i2++) /*BbIBog HoBou MaTpuu,bI*/

{for (j2=0;j2<m2;j2++)

printf ("%6d",y[i2][j2]);

printf ("\n\n");

}

}

else

{printf ("B gaHHou MaTpuu,e HeT cToJI6u,oB");

printf ("\nco BceMu pa3JIu4HbIMu eJIeMeHTaMu");

}

break;

case 5:

if (m2>0)

{printf ("\nPa3Mep HoBou MaTpuu,bI (%d",n);

printf ("x%d",m2); /*BbIBog Pa3Mepa HoBou MaTpuu,bI*/

printf (")\n\n");

}

else

puts ("\nB HoBou MaTpuu,e HeT eJIeMeHToB");

break;

}

}

while (f!=6);

puts ("\nHa}I{MuTe kJIaBuLLIy");

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]