![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
InFuz |
![]()
Сообщение
#1
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
В общем закончили 1 семестр и во втором начался C++ (был и остался Pascal)
Посоветуйте какую нибудь книжку или самоучитель по C++. Пока читаю Г. Шилд "Самоучитель С++" И помогите разобраться с 1 лабой. Мало того, что в С++ пока не рублю так еще и задача... я ее даже на листке не решу не то что уж прогу по ней писать. Известны координаты вершин треугольника ABC: A(x1,y1), B(x2,y2) и C(x3,y3). Найти его площадь и периметр. Нашел в инете пару формул, хотя точно не уверен что те. Вот, что пока смог накорябать. # include <iostream.h> # include <stdio.h> # include <math.h> int main() { int x1,x2,x3,y1,y2,y3; double s,p,a,b,c; cout<<"\n Лабораторная работа №1"; cout<<"\n x1="; cin>>x1; cout<<"\n x2="; cin>>x2; cout<<"\n x3="; cin>>x3; cout<<"\n y1="; cin>>y1; cout<<"\n y2="; cin>>y2; cout<<"\n y3="; cin>>y3; a = sqrt((x1-x2)^2+(y1-y2)^2); b = sqrt((x1-x3)^2+(y1-y3)^2); c = sqrt((x2-x3)^2+(y2-y3)^2); p = a+b+c; cout<<"\n p=" <<p; /* cout<<"p="<<p; s=(x1-x3)*(y2-y3)*(x2-x3)*(y1-y3)/2; cout<<"s="<<s; */ } |
![]() ![]() |
Vahappaday |
![]()
Сообщение
#2
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
На мой взгляд, вновь неверно... Теоретически функцию можно описывать внутри другой функции, но я не видел, чтоб к этому прибегали.
У Вас же Chislo описана внутри main. Также советую разобраться в синтаксисе определения функции. Код [тип возвращаемого значения] [имя функции]([список параметров]) { [код] } Никакой переменной с именем функции по умолчанию не создаётся. Все возвраты осуществляются оператором return. Захотели вернуть 0, пишем return 0; Захотели вернуть 1, пишем return 1; Захотели вернуть x, пишем return x; После выполнения оператора return выполнение функции прекращается и управление передаётся вызывающей функции. Объявлять все локальные переменные нужно уже в теле функции, там, где у меня написано [код]. То есть, если вы всё вот этот осознаете, то поймёте, что функция описана неверно. Остальные комментарии: 1. опять main ничего не возвращает - чего вы её так обижаете, такая же функция) Обещает отдавать int, значит, должна отдавать int)) 2. Зачем int yk[99]? Зачем Вы выделили память в стеке? Вы же её не используете... 3. Цитата как х присвоить yk[i]? А никак) Просто пишете Код Chislo(yk[i]); и всёВот небольшой примерчик с оформлением функций. У меня массив статический, но Вам так нельзя, не подходит по условию статический. Код int IsSimple(int x) { int i; if (x<2) return 0; //если меньше двух, дальше функция не будет выполняться for(i=2;i<x;i++) { if(!(x%i)) { return 0; //есть делитель больший или равный двойке, но меньше числа, опять же прекращаем } } return 1; //делителей не нашлось, число простое } int main() { int i; int x[50]; for(i=0;i<50;i++) { cin >> x[i]; if(IsSimple(x[i])) cout << "Prostoe\n"; else cout << "Sostavnoe\n"; } return 0; //заметьте, обещал вернуть int и вернул int } |
InFuz |
![]()
Сообщение
#3
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
(i=2;i<x;i++)?
Разве может быть делителем x число которое >1/2x (например числа >5 не могут быть делителями 10) можно сократитть количество проверок в цикле почти в 2 раза. С функциями вроде разобрались, терь надо с дин. массивом разобраться. yk[99] - получается статический *(yk) - тоже не верно а как тогда? Код # include <iostream.h> # include <stdio.h> # include <math.h> # include <conio.h> # include <alloc.h> //---------------------------------------------------------------- int Chislo(int x) { int j; if (x<4) return 1; else { for (j=2; j<floor(x/2)+1; j++) if (x%j==0) return 0; } return 1; } //----------------------------------------------------------------- int mani() { clrscr(); int w,i,j,n,s,g,yk; cout<<"n="; cin>>n; yk=new int[n]; cout<<"El-ma \n"; for (i=0; i<n; i++) { cin>>yk[i]; s=yk[i]; cout<<"\n s="<<s; if (Chislo(yk[i])) cout<<"Prostoe\n"; else cout<<"Sostavnoe\n"; } delete []yk; getch(); return 0; } |
Vahappaday |
![]()
Сообщение
#4
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
(i=2;i<x;i++)? Разве может быть делителем x число которое >1/2x (например числа >5 не могут быть делителями 10) можно сократитть количество проверок в цикле почти в 2 раза. Тогда уж не до x/2 а до sqrt(x), обычно делается так, не стал писать, чтоб не усложнять. yk[99] - получается статический *(yk) - тоже не верно а как тогда? Объявлять и выделять память так: Код int* yk = new int[n] Обращаться же по индексу Код cin>>yk[i]; s=yk[i]; Пробуйте сортировать. Для сортировки сделайте функцию, которая в качестве параметра принимает указатель на начало массива. Можно конечно qsort, но так неинтересно. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 23:49 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru