Тролль Опубликовано 30 декабря, 2007 Жалоба Поделиться Опубликовано 30 декабря, 2007 (изменено) 666TEHb666: пока поработаю с градусами,со временем перейду на более точные вычисления)Я и имел в виду, что у тебя в программе угол вводится в радианах, а удобнее было в градусах. Точность вычислений от единиц измерения, естественно, не зависит, что радианы, что градусы - вычисления одинаково точны, с радианами формулы проще, но градусы удобнее, если угол вводится человеком, а не является промежуточным результатом в формуле. Ну ... прикольно xDПросто мне пока советовали вот с прямыми работать.Во-первых проще реализовать Дело-то в том, что ИМХО решение с площадями реализовать намного проще. Впрочем, во многом это уже дело вкуса. Попробуй реализовать свой вариант, интересно, что получится... Для сравнения вот решение этой задачи с помощью площадей. При вводе x и y-координаты каждой точки разделяются пробелом. {$N+} var a:array[1..4,(x,y)]of double; s0,s1,s2,s3,p:double; i,j:integer; function l(i,j:integer):double;begin l:=sqrt(sqr(a[i,x]-a[j,x])+sqr(a[i,y]-a[j,y])) end; function s(i,j,k:integer):double;var p:double; begin p:=(l(i,j)+l(j,k)+l(k,i))/2;s:=sqrt(p*(p-l(i,j))*(p-l(j,k))*(p-l(k,i))) end; begin for i:=1 to 4 do begin Write('x',i,' y',i,' = '); ReadLn(a[i,x],a[i,y]) end; s0:=s(1,2,3); p:=1e-10*s0; s1:=s(4,1,2); s2:=s(4,2,3); s3:=s(4,3,1); if abs(s1+s2+s3-s0)>p then WriteLn('out') else if (abs(s1)<p)or(abs(s2)<p)or(abs(s3)<p) then Writeln('side') else WriteLn('in'); ReadLn end. во-вторых точность расчетов вышеО точности расчетов на компьютере говорить не приходится, она всегда больше чем достаточна. Сейчас программа замечает отклонение от положения точки на прямой, как если бы на поверхность пустыни Сахары (примем ее идеально плоской) сел микроб. Изменено 30 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Васильевич Опубликовано 31 декабря, 2007 Жалоба Поделиться Опубликовано 31 декабря, 2007 Тролль: Кроме того, ввод угла стрельбы (по артиллерийски, возвышения) в радианах выглядит несколько непривычно для артиллеристов , лучше задавать его в градусах и переводить затем в радианы в программе. Извините, что вмешиваюсь, но для артиллеристов привычнее углы в делениях угломера . Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
666TEHb666 Опубликовано 1 января, 2008 Жалоба Поделиться Опубликовано 1 января, 2008 :) 666TEHb666: Я и имел в виду, что у тебя в программе угол вводится в радианах, а удобнее было в градусах. Понятно,но, как вы сказали,везде дело вкуса и точность расчета не меняется все равно :D Так что пусть все остается как есть пока... Дело-то в том, что ИМХО решение с площадями реализовать намного проще. Впрочем, во многом это уже дело вкуса. Попробуй реализовать свой вариант, интересно, что получится... Реализовал)))Выкладываю код))Вот только ваш,конечно более компактный,но...дело вкуса :D :) {$N+} program Triangular_ABC; uses Crt; var xA,xB,xC,xO,yA,yB,yC,yO, A1,A2,A3,B1,B2,B3,C1,C2,C3, z1,z2:extended; s1,s2:integer; begin ClrScr; WriteLn('Please enter x of point A'); ReadLn(xA); WriteLn('Please enter y of point A'); ReadLn(yA); WriteLn('Please enter x of point B'); ReadLn(xB); WriteLn('Please enter y of point B'); ReadLn(yB); WriteLn('Please enter x of point C'); ReadLn(xC); WriteLn('Please enter y of point C'); ReadLn(yC); WriteLn('Now you have triangular ABC.Enter point O that will be find'); WriteLN('Please enter x of point O'); ReadLn(xO); WriteLn('Please enter y of point O'); ReadLn(yO); WriteLn('Press <enter>'); ReadLn; A1:=yB-yA; B1:=xA-xB; C1:=yA*xB-yB*xA; z1:=A1*xC+B1*yC+C1; z2:=A1*xO+B1*yO+C1; if z2=0 then WriteLn('On the border of triangular') else begin if z1>0 then s1:=1 else begin s1:=0; end; if z2>0 then s2:=1 else begin s2:=0; end; if s1<>s2 then WriteLn('Outside of triangular') else begin A2:=yC-yA; B2:=xA-xC; C2:=yA*xC-yC*xA; z1:=A2*xB+B2*yB+C2; z2:=A2*xO+B2*yO+C2; if z2=0 then WriteLn('On the border of triangular') else begin if z1>0 then s1:=1 else begin s1:=0; end; if z2>0 then s2:=1 else begin s2:=0; end; if s1<>s2 then WriteLn('Outside of triangular') else begin A3:=yC-yB; B3:=xB-xC; C3:=yB*xC-yC*xB; z1:=A3*xA+B3*yA+C3; z2:=A3*xO+B3*yO+C3; if z2=0 then WriteLn('On the border of triangular') else begin if z1>0 then s1:=1 else begin s1:=0; end; if z2>0 then s2:=1 else begin s2:=0; end; if s1<>s2 then WriteLn('Outside of triangular') else WriteLn('Inside of triangular'); end; end; end; end; end; WriteLn('Press <enter> please'); ReadLn end. О точности расчетов на компьютере говорить не приходится, она всегда больше чем достаточна. Сейчас программа замечает отклонение от положения точки на прямой, как если бы на поверхность пустыни Сахары (примем ее идеально плоской) сел микроб. А разве это плохо? И енто моя последняя программа пока...((Так как с делфи помощи не поступило((и я лечу как фанера над Парижем,нуно чтото делать...но я вернусь)) И да,кстати,можно ведь в этой теме выкладывать свои программы,чтобы их профессионально оценивали,как вы сейчас,и вносили какие либо коррективы? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
GrAdUs Опубликовано 2 января, 2008 Жалоба Поделиться Опубликовано 2 января, 2008 помогите пожалсто ! по си++ зачет горит Во входном файле записана следующая информация об итогах зимней сессии первого курса. Сведения о каждом студенте-первокурснике (всего их 400) заданы в виде следующего текста: <Фамилия>, <Номер группы>, <Оценка1>, <Оценка2>, <Оценка3>; причем, в фамилии 12-ти букв,номер группы - целое от 101 до 116-ти, каждая оценка – это 2, 3, 4 или 5, причем первая оценка – за экзамен по матанализу, вторая по алгебре, третья – по программированию. Сведения о студентах отделены друг от друга точкой с запятой. Название предмета, который был сдан лучше всего. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 2 января, 2008 Жалоба Поделиться Опубликовано 2 января, 2008 (изменено) Тролль: Извините, что вмешиваюсь, но для артиллеристов привычнее углы в делениях угломера . Спасибо, правильная поправка. P.S. Помню, что команды были типа "два сорок", вот и решил, что это градусы :rolleyes: . Изменено 2 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alancor Опубликовано 8 января, 2008 Жалоба Поделиться Опубликовано 8 января, 2008 (изменено) Может кому пригодится - моя контрольная по С++ Она за I-курс, май-июнь. Там всё - и cpp-шник и word. 4-ре задания. Не знаю, как у кого сдаётся, но может кому пригодится. Контрольная лёгкая конечно, но пришлось попыхтеть... ------------------------------------------------------------------- ------------------------------------------------------------------- Сама контрольная - 4-ре задания. ----> _______________.rar ============================================== Уважаемый Тролль Если не трудно - у меня контрольная к 12-му горит, там массивы, классы..., и ещё что-то. Вариант 13-й, блииннн... Повезло вытянуть 29.12.07-го С++ - условие: ------------------ Определить класс "Аэрофлот", содержащий следующие поля: _ Название пункта назначение рейса; _ Номер рейса; _ Тип самолёта. Определить методы доступа к этим полям и методы извлечения, и вставки для объектов. Написать программу, выполняющую следующие действия: _ Ввод с клавиатуры данных в массив, состоящий из 7-ми объектов класса: _ Ввод на экран пунктов назначения и номеров рейсов обслуживаемых самолётов, тип которого введён с клавиатуры, если таких нет, вывести соотвестсвующее сообщение _______________.rar Изменено 9 января, 2008 пользователем alancor Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 января, 2008 Жалоба Поделиться Опубликовано 9 января, 2008 (изменено) alancor: Не могу сказать, что точно выполнил задание, т.к. не совсем понял, что такое "методы извлечения, и вставки для объектов" , а методы доступа определил только нужные (в случае чего можно дополнить ненужными методами), но согласно заданию работает. Вероятно, выдаваемые подсказки тоже можно сделать попонятнее. // aeroflot.cpp#include <iostream.h>#include <string.h>using namespace std;class aeroflot { private: string target; int tripnumber; string planemode; public:void settrip(){ cout << endl << "target: "; cin >> target; cout << endl << "number: "; cin >> tripnumber; cout << endl << "mode: "; cin >> planemode; cout << endl;}string Otarget() { return target; }int Onumber() { return tripnumber; }string Omode() { return planemode; }};int main(){ int c=0; string pl; aeroflot a[7]; for(int i=0; i<=6; i++) { cout << "plane " << i+1 << endl;a[i].settrip(); } cout << endl << "mode: "; cin >> pl; cout << endl; for (int i=0; i<=6; i++) if (a[i].Omode()==pl) { cout << "target " << a[i].Otarget() << endl; cout << "number " << a[i].Onumber() << endl; cout << endl; c++; } if (c==0) cout << "no such plane! " << endl; return 0;} Изменено 10 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alancor Опубликовано 10 января, 2008 Жалоба Поделиться Опубликовано 10 января, 2008 Уважаемый Тролль: !!! Огромное Вам спасибо!!! срр-шник прекрасно написан!!! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
JoJo Опубликовано 10 января, 2008 Жалоба Поделиться Опубликовано 10 января, 2008 блин наррод срочно выручайте плиз вот задание Задание:написать командный файл для установки атрибутов одного файла (используя команду ATTRIB) Имя файла и список атрибутов задаються в командной строке.В командном файле использовать только один формальный параметр %1.С помощью команды CHOICE опеределить снимаеться или устанавлеваеться атрибут.Проверить существование файла Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 11 января, 2008 Жалоба Поделиться Опубликовано 11 января, 2008 Прошу помочь в решении задач. Задача 1. Написать шаблон функции, принимающую 2 массива и выводящую 3-й массив, равный сумме 2-х первых. Задача 2. Написать шаблон функции, возвращающую среднее арифметическое всех элементов массива и перезагрузить ее для среднеарифметического любых 2-х и любых 3-х чисел. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 12 января, 2008 Жалоба Поделиться Опубликовано 12 января, 2008 Помогите пожалуйста сделать три лабораторные работы по C. Всего 10 заданий. Я этот Си во второй раз в жизни вижу - как делать не знаю В понедельник экзамен, выручайте :D Очень на вас надеюсь, помогите :D Labs.rar Labs.rar Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 января, 2008 Жалоба Поделиться Опубликовано 12 января, 2008 (изменено) Darth Emil: Лабораторная работа 1 1.Самостоятельно разработать, составить и отладить программу, вычисляющую среднее арифметическое трех вещественных чисел, введенных с клавиатуры. 2.Изменить формат обрабатываемых данных на long int, сохранить файл под другим именем, снова откомпилировать программу, учесть и проанализировать возникающие в процессе компиляции ошибки, обратить внимание на способ округления целых чисел в языке Си. #include <stdio.h>main(){float i,j,k,l;scanf("%f%f%f",&i,&j,&k);l=(i+j+k)/3;printf("%g\n",l);} и #include <stdio.h>main(){long i,j,k,l;scanf("%li%li%li",&i,&j,&k);l=(i+j+k)/3;printf("%ld\n",l);} Лабораторная работа 2 1.Разработать и отладить программу, вычисляющую среднее арифметическое значение массива восьми целых чисел, использующую цикл for. Значения элементов массива должны быть заданы при его объявлении. При выполнении разрешается пользоваться материалами лабораторной работы №1. 2.К имеющейся программе добавить объявление двумерного массива вещественных чисел (2 на 3) и заполнить его значениями, введенными с клавиатуры. Для ввода использовать любой тип цикла. 3.Вывести на экран значения массива, созданного в п.2, в виде таблицы, используя форматный вывод данных функции printf. #include <stdio.h>main(){int i,j,k=0; int a[8]={3,1,4,1,5,9,2,6}; float b[2][3]={1,2,3,4,5,6};for(i=0;i<8;i++)k+=a[i];printf("%d\n",k/8);printf(" column 1 column 2 column 3 \n");for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%10.3f",b[i][j]);printf("\n");}} Лабораторная работа 3 1.Создать функцию, читающую с клавиатуры два числа типа long и сохраняющую их в соответствующих глобальных переменных. 2.Создать функцию Max(), использующую в качестве аргументов два числа, полученных в предыдущей функции и возвращающую максимальное из них. 3.Вывести на экран результат работы функции Max(), предварительно преобразовав его к вещественному типу. В функции printf() использовать форматный спецификатор “%f”. 4.Создать собственный тип, представляющий собой одно машинное слово (2 байта без знака). Создать тип для определения массивов 10 таких машинных слов, используя ранее созданный тип. Создать два массива пользовательского типа, причем значения одного из них должны быть заданы при объявлении. Составить функцию, копирующую содержимое одного массива в другой. Массивы должны быть заданны в качестве аргументов функции. Вывести полученный массив на экран (в любом виде). #include <stdio.h>long a,b;Read(){scanf("%ld%ld",&a,&b);}Max(){return a>b?a:b;}typedef unsigned own;typedef own mown[10];Copy(c,d)mown c,d;{int i;for(i=0;i<10;i++)c[i]=d[i];}main(){int i;mown e,f={1,2,3,4,5,6,7,8,9,0};Read();printf("%f\n",Max()+.0);Copy(e,f);for(i=0;i<10;i++)printf(" %u",e[i]);printf("\n\n");} Изменено 12 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 12 января, 2008 Жалоба Поделиться Опубликовано 12 января, 2008 Тролль: Огромное спасибо! :bye1: Выручил :doh: А можно вкратце описать какая строчка что делает? :rolleyes: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 января, 2008 Жалоба Поделиться Опубликовано 12 января, 2008 Это завтра. Сейчас ухожу. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 12 января, 2008 Жалоба Поделиться Опубликовано 12 января, 2008 Тролль: Ок, спасибо :rolleyes: А можно ещё чтобы в 2-й и 3-й лабораторке задания были в виде отдельных программ? А то трудно отделить - ведь всё в одной программе, где какое задание начинается непонятно... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alancor Опубликовано 12 января, 2008 Жалоба Поделиться Опубликовано 12 января, 2008 (изменено) А можно вкратце описать какая строчка что делает? Darth Emil Если в будущем будешь заниматься этой творческой работой, то это называется - постановка комментариев Тролль Есть ещё одна небольшая просьба. Я сдал контрольное задание, как допуск к основному экзамену и там проставил комментарии. Проверь пожалуйста их правильность и если где-то не хватает то добавь. Заранее огромное спасибо!!! :rolleyes: //Определение класса Аэрофлот#include <iostream.h>#include <string.h>using namespace std;class aeroflot //задание класса { private: //закрытые данные класса string target; //Пункт назначения int tripnumber; //Номер самолёта string planemode; //Марка самолёта public: //Открытыеvoid settrip() //Функция ввода/вывода значения переменных{ cout << endl << "target: "; cin >> target; //Ф-ция возвращения значения пункта назначения cout << endl << "number: "; cin >> tripnumber; //Ф-ция возвращения значения номер самолёта cout << endl << "mode: "; cin >> planemode; //Ф-ция возвращения значения марка самолёта cout << endl;}string Otarget() { return target; }int Onumber() { return tripnumber; }string Omode() { return planemode; }};int main() //Главная функция{ int c=0; string pl; aeroflot a[7]; //Задание массива for(int i=0; i<=6; i++) //Ф-ция ввода массива { cout << "plane " << i+1 << endl;a[i].settrip(); } cout << endl << "mode: "; cin >> pl; cout << endl; for (int i=0; i<=6; i++) if (a[i].Omode()==pl) //Присваивание ф-ции данных массива { cout << "target " << a[i].Otarget() << endl; cout << "number " << a[i].Onumber() << endl; cout << endl; c++; } if (c==0) cout << "no such plane! " << endl; //Если массив пустой return 0;} Изменено 13 января, 2008 пользователем alancor Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 13 января, 2008 Жалоба Поделиться Опубликовано 13 января, 2008 Тролль: Так можно получить пояснения? И код каждой программы по отдельности, если можно... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 13 января, 2008 Жалоба Поделиться Опубликовано 13 января, 2008 (изменено) Darth Emil: Комментарии - для тебя, в текст сдаваемой программы их включать не надо; такие программы в комментариях не нуждаются, так как ничего осмысленного эти программы не делают. Как принято в C++ (но не в C), комментарии начинаются с //. Лабораторная работа 1 На части уже было разбито. Комментарии: #include <stdio.h> //включили в текст программы содержание заголовочного файла stdio (стандартный ввод-вывод), где есть спецификации функций scanf и printf main(){ // main - главная функция, ее будет вызывать операционная система после компиляции float i,j,k,l; // определили имена четырех вещественных чисел одинарной точности scanf("%f%f%f",&i,&j,&k); // scanf - стандартная функция ввода; строка "%f%f%f" задает, что будут вводиться три вещественных числа, дальше идут адреса предназначенных для них переменных ( &i дает адрес переменной i ) l=(i+j+k)/3; // вычисление среднего printf("%g\n",l);} // вывод значения переменной l по формату g (формат вывода вещественного числа, форма вывода в этом формате выбирается автоматически) Лабораторная работа 2 Разбил по пунктам с постепенным наращиванием. Текст немного изменен, раньше я пропустил в задании, что значения двумерного массива надо вводить с клавиатуры, сейчас это исправлено. По пункту 1: #include <stdio.h> main() { int i,k=0; int a[8]={3,1,4,1,5,9,2,6}; for(i=0;i<8;i++)k+=a;printf("%d\n",k/8); } По пунктам 1-2: #include <stdio.h> main() { int i,j,k=0; int a[8]={3,1,4,1,5,9,2,6}; float b[2][3]; for(i=0;i<8;i++)k+=a;printf("%d\n",k/8); for(i=0;i<2;i++){for(j=0;j<3;j++){printf("b[%1d,%1d]=",i,j); scanf("%f",&b[j]);}printf("\n");} } Целиком по пунктам 1-3: #include <stdio.h> main() { int i,j,k=0; int a[8]={3,1,4,1,5,9,2,6}; float b[2][3]; for(i=0;i<8;i++)k+=a;printf("%d\n",k/8); for(i=0;i<2;i++){for(j=0;j<3;j++){printf("b[%1d,%1d]=",i,j); scanf("%f",&b[j]);}printf("\n");} printf(" column 1 column 2 column 3 \n"); for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%10.3f",b[j]);printf("\n");} } Комментарии: int a[8]={3,1,4,1,5,9,2,6}; // определяем массив из восьми целых и задаем им начальные значения for(i=0;i<8;i++)k+=a; // для i, меняющегося от 0 с прибавлением 1 (++ - операция прибавления единицы), пока i меньше 8, выполнять прибавление к k элементов a printf("%d\n",k/8); // вывод среднего, в k была сумма всех элементов, после вывода по формату d перевод строки (\n) for(i=0;i<2;i++){for(j=0;j<3;j++){printf("b[%1d,%1d]=",i,j);scanf("%f",&b[j]);}printf("\n");} // цикл в цикле; внутренний цикл выводит подсказки на ввод элементов строки и вводит их значения, внешний - выполняет циклы по строкам и каждый раз после ввода элементов строки переводит строку на экране (символ \n - перевод строки) printf(" column 1 column 2 column 3 \n"); // печатаем строку заголовков столбцов таблицы for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%10.3f",b[j]);printf("\n");} // цикл в цикле; внутренний цикл выводит значения элементов строки, внешний - выполняет внутренние циклы и каждый раз после выполнения внутреннего цикла переводит строку Лабораторная работа 3 По пунктам 1-3: #include <stdio.h> long a,b; Read(){scanf("%ld%ld",&a,&b);} Max(){return a>b?a:b;} main() { int i; Read();printf("%f\n",Max()+.0); } По пункту 4 #include <stdio.h> typedef unsigned own; typedef own mown[10]; Copy(c,d)mown c,d;{int i;for(i=0;i<10;i++)c=d;} main() { int i; mown e,f={1,2,3,4,5,6,7,8,9,0}; Copy(e,f); for(i=0;i<10;i++)printf(" %u",e);printf("\n\n"); } Все четыре пункта вместе уже были. Комментарии: long a,b; // определили два целых двойной длины Read(){scanf("%ld%ld",&a,&b);} // определили функцию чтения двух целых удвоенной длины Max(){return a>b?a:b;} // определили функцию, возвращающую максимум из значений двух ее аргументов Read();printf("%f\n",Max()+.0); // печатаем значение максимума, преобразованное к вещественному типу прибавлением вещественного значения нуля typedef unsigned own; //own теперь обозначает unsigned (тип неотрицательных целых) typedef own mown[10]; //mown теперь обозначает тип массива из 10 переменных типа own Copy(c,d)mown c,d;{int i;for(i=0;i<10;i++)c=d;} //копируем поэлементно значения из d в с for(i=0;i<10;i++)printf(" %u",e);printf("\n\n"); //перебираем значения индексов массива e и выводим их, потом дважды переводим строку на экране Уф, комментировать труднее, чем написать сами программки. Удачи! P.S. Извини, до вечера не было времени . Разбить задачи совсем отдельно нельзя, потому что задания часто идут по типу: 2. создать функцию Max 3. Использовать функцию Max для..., так что пункт 3 требует, чтобы пункт 2 тоже был в программе. Надеюсь, разберешься. Изменено 13 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 13 января, 2008 Жалоба Поделиться Опубликовано 13 января, 2008 (изменено) alancor: Не думаю, чтобы они обращали большое внимание на комментарии. Лишь бы были. Обычно предполагается, что читающий комментарии человек знает язык, поэтому упор делается на пояснение смысла действий, а не обозначений языка. Хороший способ написать программу - написать сначала комментарии, а потом вставлять между ними операторы. Ну и хороший стиль требовал бы еще описания в комментариях в начале программы, что она должна делать, так называемые вводные комментарии. Но у вас всё это не должно быть важным. //Аэрофлот #include <iostream.h> #include <string.h> using namespace std; class aeroflot //Класс рейсов самолетов { private: //Закрытые данные класса string target; //Пункт назначения int tripnumber; //Номер самолёта string planemode; //Тип самолёта public: void settrip() //Ввод данных рейса { cout << endl << "target: "; cin >> target; //Ввод пункта назначения cout << endl << "number: "; cin >> tripnumber; //Ввод номера самолёта cout << endl << "mode: "; cin >> planemode; //Ввод типа самолета cout << endl; } string Otarget() { return target; } //Выдает пункт назначения int Onumber() { return tripnumber; } //Выдает номер рейса string Omode() { return planemode; } //Выдает тип самолета }; int main() //Главная функция { int c=0; //Счетчик количества подходящих рейсов string pl; //Тип самолета aeroflot a[7]; //Массив данных 7 рейсов for(int i=0; i<=6; i++) //Ввод данных всех рейсов { cout << "plane " << i+1 << endl; a.settrip(); //Ввод данных рейса } //Поиск подходящих рейсов по типу самолета cout << endl << "mode: "; cin >> pl; cout << endl; //Ввод типа самолета for (int i=0; i<=6; i++) //Просмотр всех рейсов if (a.Omode()==pl) //Если тип самолета совпадает с заданным { cout << "target " << a.Otarget() << endl; //Вывод пункта назначения cout << "number " << a.Onumber() << endl; //Вывод номера рейса cout << endl; c++; } if (c==0) cout << "no such plane! " << endl; //Рейсов с заданным типом самолета нет return 0; } Изменено 13 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alancor Опубликовано 13 января, 2008 Жалоба Поделиться Опубликовано 13 января, 2008 (изменено) Тролль: Не думаю, чтобы они обращали большое внимание на комментарии. Так уж получается, руководство института решило, что нам нужно именно начать с высшего пилотажа, а не с малого, более доступного. И преподаватель с самой первой программы всегда твердила, чтобы мы ставили комментарии и всегда делала на этом упор мотивируя тем, что любой другой взяв в руки нашу программу с лёгкостью поймёт о чём идёт речь. С одной стороны она конечно права, в том плане, что порой неопытному, начинающему первые шаги в программировании человеку даётся возможгность разобраться, что есть что... Да и она видать при проверке наших работ видит, как и что мы делали и из чего исходили. Обычно предполагается, что читающий комментарии человек знает язык, Согласен! Очень опытному программисту комментарии не нужны. Но в том году на практ. занятии нам сказали поменяться своими написанными прогами и попробовать в них разобраться... Мдааммссс..., это было что-то... :blink: :1eye: Хороший способ написать программу - написать сначала комментарии, а потом вставлять между ними операторы. Огооо..??? А если моя программа выливается в тысячу листингов??? Ну и хороший стиль требовал бы еще описания в комментариях в начале программы, что она должна делать, так называемые вводные комментарии. Но у вас всё это не должно быть важным. Точно! Именно заголовок программы, который компилятор всё равно, как и комментарии не воспринимает, и повествует о многом!!! И на это тоже идёт строгий упор. Ладно, Тролль:, огромное спасибо тебе за помощь!!! Выручил очень!!! :rolleyes: :) Изменено 14 января, 2008 пользователем alancor Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Trueman Опубликовано 16 января, 2008 Жалоба Поделиться Опубликовано 16 января, 2008 Друзья помогите написать такую програмку: :bye1: Есть N количество островов у каждого острова есть свои кординаты (x,y), есть туземец у которого есть лодка которая проплывает не больше чем L указанное растояние. Нужно чтоб прогамма находила до скольких островов может доплыть туземец. Число N вводиться при чем остров както обозначаеться Кординаты островов тоже нужно вводить Число L вводиться Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 16 января, 2008 Жалоба Поделиться Опубликовано 16 января, 2008 (изменено) Trueman: Действительно так? Уж больно просто, да и задача слишком идиотская. Такие задачи, вообще-то, и сам бы мог решать. А то, если так пойдет, скоро вопросы по таблице умножения появятся... Если нужно, конечно, иогу набросать текст, это меньше, чем этот ответ... P.S. Или имеется в виду - "лодка проплывает за один раз"? То есть найти все острова, которые отделены от исходного цепочкой переходов не более чем L км каждый? Изменено 16 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Trueman Опубликовано 16 января, 2008 Жалоба Поделиться Опубликовано 16 января, 2008 Ну мне конечно стыдно :blushing: :blush2: но плиз выложи текст програмки если не хочеш сюда писать кинь на мыло blackward@mail.ru И на счет програмки: нужно не от одного острова куда сможет доплыть чувак а так что если он доплыл то он и дальше может плыть отталкиваясь от того острова до которго он добрался какбы постепенно рисуеться путь до куда может добраться чувак но в выводе должно быть какое количество островов обьехал туземец и путь через какие острова он плыл? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 16 января, 2008 Жалоба Поделиться Опубликовано 16 января, 2008 (изменено) Trueman: Как всегда, в условии остаются неясности, например, я не знаю, где живет этот туземец. Принял, что он сидит в лодке посреди океана или живет на базовом острове, название которого не вводится. Если нет, пусть жалуется. Решение несложно. Вводим количество, координаты и имена всех островов-соседей. Каждый, до которого можно доплыть за один переход, помечаем как доступный. Для каждого из этих островов находим множество островов, до которых можно доплыть за один переход. Для каждого из этих островов... и так далее, цикл, не более N этапов (худший случай - острова вытянулись в цепочку). Уже найденные доступные острова из проверки их доступности можно, естественно, исключить. Можно было бы исключить их и из перебора, но нет смысла в оптимизации. Если бы было хотя бы тысяч пять островов... Также можно было бы заранее вычислить расстояния между всеми островами, но они считаются очень легко, и опять же нет смысла в ненужных оптимизациях. Всё, размышления закончены, можно писать программу. Вводимые данные для каждого острова разделяются пробелами, например, 5 3.7 Гренландия Сначала вариант программы по первому условию, когда нужен был только список доступных островов (его я сделал сначала) program Islands;var i,j,k,N:integer; L,L2:real;O:array[0..100]of record Name:string[20];X,Y:real;B:boolean end;beginWrite('Number of islands: ');ReadLn(N); Write('L: ');ReadLn(L); L2:=sqr(L);for i:=1 to N do begin Write('Island ',i:2,': X Y Name? ');ReadLn(O[i].X,O[i].Y,O[i].Name) end;O[0].B:=true; for i:=1 to N do O[i].B:=false; for i:=1 to N do for j:=0 to N do if O[j].B then for k:=0 to N do if not O[k].B then O[k].B:=sqr(O[j].X-O[k].X)+sqr(O[j].Y-O[k].Y)<=L2;WriteLn('Accessible islands:'); for i:=1 to N do if O[i].B then WriteLn(O[i].Name);ReadLnend. Еще и пути к доступным островам и счет их количества? Тогда можно ввести в данные каждого острова место для пути к нему и как только доберемся до этого острова, заполнять его путем острова, с которого пришли, плюс имя острова, куда пришли. Соответственно программа немножко растолстеет: program IslandsRoots;var i,j,k,N:integer; L,L2:real; O:array[0..100] of record Name:string[20]; X,Y:real; B:boolean; Root:string end;beginWrite('Number of islands: ');ReadLn(N); Write('L: ');ReadLn(L); L2:=sqr(L);for i:=1 to N do begin Write('Island ',i:2,': X Y Name? ');ReadLn(O[i].X,O[i].Y,O[i].Name) end;O[0].B:=true; for i:=1 to N do begin O[i].B:=false;O[i].Root:=' ' end;for i:=1 to N do for j:=0 to N do if O[j].B then for k:=0 to N do if not O[k].B then if sqr(O[j].X-O[k].X)+sqr(O[j].Y-O[k].Y)<=L2 then begin O[k].B:=true; O[k].Root:=O[j].Root+' >'+O[k].Name end;WriteLn('Accessible islands:'); k:=0; for i:=1 to N do if O[i].B then begin Inc(k); WriteLn(O[i].Root) end; if k=0 then WriteLn('None') else WriteLn('Total ',k,' accessible islands'); ReadLnend. Изменено 16 января, 2008 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ane4ka Опубликовано 17 января, 2008 Жалоба Поделиться Опубликовано 17 января, 2008 Помогите, пожалуста, с задачками по С++, тема ФУНКЦИИ. Вот первая Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число должно переводится (системы счисления от 2 до 36). Например, при переводе числа 27 в систему счисления 16 должно получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H. Вот вторая Игра «кубики». Условие: имеется два игральных кубика со значениями от 1 до 6. Игра происходит с компьютером, кубики бросаются поочередно. Побеждает тот, у кого сумма выпавших очков по итогам пяти бросков больше. Предусмотрите возможность получения первого хода человеком или компьютером. Кубики отображаются с помощью символов. В конце игры необходимо выводить среднюю сумму по броскам для обоих участников. Вот третья Написать функцию, которая принимает в качестве параметров вещественное число и количество знаков после десятичной точки, которые должны остаться. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью. Заранее спасибо за помощь. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.