Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
1

Массивы,struct и всякое такое

30.04.2011, 13:19. Просмотров 1201. Ответов 19
Метки нет (Все метки)

Народ спасайте задали 11 задач по С++, 8 сделал а остальные 3 не получаются....помогите пожалуйста.
1.Вычислить длины окружностей, площади кругов и объемы шаров для ряда заданных радиусов. Признаком окончания счета является нулевое значение радиуса.(принцип понял,реализовать не получилось)
2.Дана матрица A:array[1..6,1..2] вещественных чисел. Рассматривая A[I,1] и A[I,2] как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки.
3.Вывести список сотрудников, имеющих высшее образование и 2 и более ребенка.( это ваще хз как сделать... вроде просили struct использовать)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2011, 13:19
Ответы с готовыми решениями:

объясните пожалуйста. что такое struct STUDENT?
include <conio.h> #include <iostream> struct STUDENT { char fio; /*...

МАССИВЫ:Что такое приведённый индекс?
Что такое приведённый индекс? ну подскажите пожалуйста(

Заменить всякое вхождение слова "это" на слово "то"
Заменить каждое вхождение слова "это" на слово "то". Прошу помощи! ...

Struct{...}
Задача № 1 (динамические структуры) Написать программу создания динамической...

struct (с++)
Кто может написать полный синтаксис структуры. Чем отличается структура от...

19
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
30.04.2011, 14:22 2
№2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
 
float Distance(float x1, float y1, float x2, float y2) {
  return pow(pow(x1 + x2, 2.) + pow(y1 + y2, 2.), .5);
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  float Points[6][2];
 
  for (int i = 0; i < 6; ++i)
    printf("(%.1f, %.1f) ", Points[i][0] = (rand() % 1001 - 500) / 10.,
                        Points[i][1] = (rand() % 1001 - 500) / 10.);
  printf("\n");
 
  float max_radius = 0;
  for (int i = 0; i < 6; ++i) {
    float this_distance = Distance(0, 0, Points[i][0], Points[i][1]);
    if (max_radius < this_distance)
      max_radius = this_distance;
  }
 
  printf("Radius = %f\n", max_radius);
  return 0;
}
1
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
30.04.2011, 14:39 3
№1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <cmath>
 
#define PI 3.1415926535
 
int main()
    {
    setlocale(LC_ALL,"rus");
 
    std::vector<double> lengths, areas, volumes;
 
    double radius;
 
    while(std::cin >> radius && radius != 0)
        {
        lengths.push_back(2.0 * PI * radius);
        areas.push_back(PI * pow(radius,2));
        volumes.push_back(4.0 / 3.0 * PI * pow(radius,3));
        }
 
    for(size_t i = 0, len = lengths.size(); i < len; ++i)
        {
        std::cout << "Радиус №" << i + 1 << ".\nДлина окружности = " << lengths[i]
            << "\nПлощадь круга = " << areas[i]
            << "\nОбъем шара = " << volumes[i] << std::endl;
        }
 
    return 0;
    }
1
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
30.04.2011, 16:13  [ТС] 4
вау....супер код....а он на "C for DOS" пойдёт?
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
30.04.2011, 16:52 5
Getron, нет. Вам ничего не намекает, что сейчас уже Windows 7 и времена ДОС-а прошли очень давно?
0
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
30.04.2011, 17:41  [ТС] 6
я понимаю,но у нас колледж походу ещё в прошлом веке живёт....у нас на втором курсе был Free Pascal и Lazarus(Delphi), а на третьем уже (C for DOS), тут уж ничего неподелаешь....мы все недовольны этой шнягой
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
30.04.2011, 19:35 7
№2 for ansi C
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  size_t i;
  float points[6][2];
  float radius, distance;
 
  for (i = 0; i < 6; ++i)
    printf("(%.2f, %.2f) ", points[i][0] = (rand() % 1001 - 500) / 100.,
                            points[i][0] = (rand() % 1001 - 500) / 100.);
  printf("\n");
 
  for (i = 0; i < 6; ++i)
    if (radius < (distance = pow(pow(points[i][0], 2.) +
                                 pow(points[i][1], 2.), 0.5)))
      radius = distance;
 
  printf("Radius = %f\n", radius);
 
  return 0;
}
Добавлено через 1 час 22 минуты
№3 for C
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
enum Education { base, high, higher };
 
struct Stuff {
  size_t id;
  enum Education education;
  size_t children;
};
 
void PrintStuff(struct Stuff *stuff) {
  printf("Id: %d, education: ", stuff->id);
  switch (stuff->education) {
    case 0: printf("base, "); break;
    case 1: printf("high, "); break;
    case 2: printf("higher, "); break;
  }
  printf("children: %d.\n", stuff->children);
}
 
struct Stuff *RandomStuff(size_t id, struct Stuff *stuff) {
  stuff->id = id;
  stuff->education = rand() % 3;
  stuff->children = rand() % 3;
  return stuff;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  size_t i;
 
  struct Stuff stuff[20];
  for (i = 0; i < 20; ++i)
    PrintStuff(RandomStuff(i, &stuff[i]));
 
  printf("Higher education with two children:\n");
 
  for (i = 0; i < 20; ++i)
    if (stuff[i].education == higher && stuff[i].children == 2)
      PrintStuff(&stuff[i]);
 
  return 0;
}
1
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
30.04.2011, 19:52  [ТС] 8
Ну ребята, если эти коды попрут на C for DOS, то для меня это будет большая удача))) кстати задача #3 тоже не можете понять? я и препода спрашивал и толку ноль...хз как её сделать

Добавлено через 1 минуту
последний код конечно вызывает доверие,но как это приподнести....я даже незнаю что stuff вполняет

Добавлено через 26 секунд
грузанёт вопросами

Добавлено через 14 минут
Протестил все коды, все идут, но С for DOS, настаивает на том что "Этого просто не может быть!!"
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
30.04.2011, 20:04 9
№1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
 
  const float k_PI = 3.1415926535;
  int radius;
 
  do {
    printf("Enter radius, 0 for last: ");
    scanf("%d", &radius);
    printf("Circle curve length: %f.\n", 2.0 * k_PI * radius);
    printf("Circle area: %f.\n", k_PI * radius * radius);
    printf("Sphere volume: %f.\n", 4.0 / 3.0 * k_PI * radius * radius * radius);
  } while (radius != 0);
 
  return 0;
}
Добавлено через 9 минут
Цитата Сообщение от Getron Посмотреть сообщение
Протестил все коды, все идут, но С for DOS, настаивает на том что "Этого просто не может быть!!"
Ну и в чем заключается смысл этого предложения!?

Цитата Сообщение от Getron Посмотреть сообщение
последний код конечно вызывает доверие,но как это приподнести....я даже незнаю что stuff вполняет
Цитата Сообщение от Getron Посмотреть сообщение
грузанёт вопросами
Читайте книги, конспекты лекций, википедию, в конце-концов.
1
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
01.05.2011, 05:29  [ТС] 10
Прочитать не проблема, у нас в колледже ПС старое...а то что вы пишете это на "С" и на "С++"...
Но всё равно спасибо.
0
ValeryLaptev
Эксперт С++
1050 / 829 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 10:05 11
Вот за такой ужас:
Код
float Distance(float x1, float y1, float x2, float y2) {
  return pow(pow(x1 + x2, 2.) + pow(y1 + y2, 2.), .5);
}
Я сразу пару ставлю...
Вот так надо:
Код
float Distance(float x1, float y1, float x2, float y2) {
  return sqrt((x1+x2)*(x1+x2) + (y1+y2)*(y1+y2));
}
С for DOS - какая у вас IDE?
Турбо С?
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.05.2011, 18:17 12
ValeryLaptev, Не сказал бы я что это ужас, ага. Плюс
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
return sqrt((x1+x2)*(x1+x2) + (y1+y2)*(y1+y2));
Вот так уж точно не стоит. pow не просто так существует.
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
01.05.2011, 23:33 13
Цитата Сообщение от Getron Посмотреть сообщение
Прочитать не проблема, у нас в колледже ПС старое...
Дык, вперед за книги.

Цитата Сообщение от Getron Посмотреть сообщение
а то что вы пишете это на "С" и на "С++"...
Начать можно с отличий просто "C" от "C для DOS". Узнаете много нового.

Добавлено через 35 минут
Про sqrt согласен. Оно, например, быстрее pow(, .5) и по смыслу подходит лучше. Про умножение не согласен. Оно, например, может быть медленней pow(, 2) и по смыслу подходит меньше.
0
alex_x_x
01.05.2011, 23:47
  #14

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение
Про умножение не согласен. Оно, например, может быть медленней pow(, 2)
с трудом однако верится

0
ValeryLaptev
Эксперт С++
1050 / 829 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
02.05.2011, 00:14 15
Цитата Сообщение от lemegeton Посмотреть сообщение
Про sqrt согласен. Оно, например, быстрее pow(, .5) и по смыслу подходит лучше. Про умножение не согласен. Оно, например, может быть медленней pow(, 2) и по смыслу подходит меньше.
1. pow(x,2) - это вызов стандартной функции (с передачей параметров в стек, и получением результата, с прологом и эпилогом - пара десятков команд), а умножение - ОДНА команда процессора...
2. Я непосредственно по формуле эвклидова расстояния написал - как в учебнике. Так что яснее - некуда...
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
02.05.2011, 00:21 16
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
это вызов стандартной функции (с передачей параметров в стек, и получением результата, с прологом и эпилогом - пара десятков команд
не забываем, что компилятор часто прекрасно инлайнит функции стандартной библиотеки
0
ValeryLaptev
Эксперт С++
1050 / 829 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
02.05.2011, 00:38 17
Цитата Сообщение от alex_x_x Посмотреть сообщение
не забываем, что компилятор часто прекрасно инлайнит функции стандартной библиотеки
B все равно это длиннее ОДНОЙ команды...

Добавлено через 6 минут
Ассемблерная вставка - вычисление формулы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
asm
{ fld x1
   fsub x2
   fld st(0)
   fmul
   fld y1
   fsub y2
   fld st(0)
   fmul
   fsqrt
   fst res
}
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
02.05.2011, 01:25 18
Цитата Сообщение от alex_x_x Посмотреть сообщение
с трудом однако верится
Код
gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Код
gcc -O0 -Wall -lm temp.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
float Distance1(float x1, float y1, float x2, float y2) {
  return sqrt(pow(x1 + x2, 2.) + pow(y1 + y2, 2.));
}
 
float Distance2(float x1, float y1, float x2, float y2) {
  return sqrt((x1 + x2) * (x1 + x2) + (y1 + y2) * (y1 + y2));
}
 
clock_t TestDistanceFunction(float (*function)(float, float, float, float),
                             size_t iterations) {
  size_t i;
  clock_t start_time = clock();
  for (i = 0; i < iterations; ++i) {
    float result = function((rand() % 10000) / 100., (rand() % 10000) / 100.,
                            (rand() % 10000) / 100., (rand() % 10000) / 100.);
    result += 1.;
  }
  return clock() - start_time;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  size_t operation_count = 1500000;
 
  printf("%f\n", TestDistanceFunction(Distance1, operation_count) /
                 (float)CLOCKS_PER_SEC);
  printf("%f\n", TestDistanceFunction(Distance2, operation_count) /
                 (float)CLOCKS_PER_SEC);
 
  return 0;
}
Код
1.110000
1.180000
То бишь где-то 6% разницы. Разумеется, на моей машине, с моей архитектурой, с глибц, без оптимизаций, и пример притянут за уши.

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Ассемблерная вставка - вычисление формулы:
Процессоров без FPU, конечно, не существует и архитектур, кроме 8086, конечно же тоже не существует.
Гениальный, кстати, компилятор. GCC генерит гораздо больше команд. Что это? MS? Borland? Intel?
1
prazuber
110 / 110 / 13
Регистрация: 29.04.2010
Сообщений: 240
02.05.2011, 02:26 19
lemegeton,
Код
1.012000 
0.629000
MSVS, без оптимизации.
0
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
08.05.2011, 16:29  [ТС] 20
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Вот за такой ужас:
Код
float Distance(float x1, float y1, float x2, float y2) {
  return pow(pow(x1 + x2, 2.) + pow(y1 + y2, 2.), .5);
}
Я сразу пару ставлю...
Вот так надо:
Код
float Distance(float x1, float y1, float x2, float y2) {
  return sqrt((x1+x2)*(x1+x2) + (y1+y2)*(y1+y2));
}
С for DOS - какая у вас IDE?
Турбо С?
ну насчёт того что, то говно что стоит у нас в шараге...наврятле турбо С, хотя вообще незнаю чё там за древнятина
0
08.05.2011, 16:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2011, 16:29

struct
Привествую ) Такой вопрос назрел ) Хочу создать переменную типа структуры: ...

Struct
У мя есть структура: указатель на предыдущий, следующий и значение......

Struct{...}
Драсьте мне нужна помощь. Написать программу ввода и вывода студентов группы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru