Форум программистов, компьютерный форум CyberForum.ru

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

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

[c++]struct C++
C++ Struct{...}
Struct{...} C++
C++ МАССИВЫ:Что такое приведённый индекс?
C++ struct (с++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.04.2011, 14:22     Массивы,struct и всякое такое #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;
}
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
30.04.2011, 14:39     Массивы,struct и всякое такое #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;
    }
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
30.04.2011, 16:13  [ТС]     Массивы,struct и всякое такое #4
вау....супер код....а он на "C for DOS" пойдёт?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.04.2011, 16:52     Массивы,struct и всякое такое #5
Getron, нет. Вам ничего не намекает, что сейчас уже Windows 7 и времена ДОС-а прошли очень давно?
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
30.04.2011, 17:41  [ТС]     Массивы,struct и всякое такое #6
я понимаю,но у нас колледж походу ещё в прошлом веке живёт....у нас на втором курсе был Free Pascal и Lazarus(Delphi), а на третьем уже (C for DOS), тут уж ничего неподелаешь....мы все недовольны этой шнягой
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.04.2011, 19:35     Массивы,struct и всякое такое #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;
}
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
30.04.2011, 19:52  [ТС]     Массивы,struct и всякое такое #8
Ну ребята, если эти коды попрут на C for DOS, то для меня это будет большая удача))) кстати задача #3 тоже не можете понять? я и препода спрашивал и толку ноль...хз как её сделать

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

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

Добавлено через 14 минут
Протестил все коды, все идут, но С for DOS, настаивает на том что "Этого просто не может быть!!"
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.04.2011, 20:04     Массивы,struct и всякое такое #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 Посмотреть сообщение
грузанёт вопросами
Читайте книги, конспекты лекций, википедию, в конце-концов.
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
01.05.2011, 05:29  [ТС]     Массивы,struct и всякое такое #10
Прочитать не проблема, у нас в колледже ПС старое...а то что вы пишете это на "С" и на "С++"...
Но всё равно спасибо.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.05.2011, 10:05     Массивы,struct и всякое такое #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?
Турбо С?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 18:17     Массивы,struct и всякое такое #12
ValeryLaptev, Не сказал бы я что это ужас, ага. Плюс
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
return sqrt((x1+x2)*(x1+x2) + (y1+y2)*(y1+y2));
Вот так уж точно не стоит. pow не просто так существует.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
01.05.2011, 23:33     Массивы,struct и всякое такое #13
Цитата Сообщение от Getron Посмотреть сообщение
Прочитать не проблема, у нас в колледже ПС старое...
Дык, вперед за книги.

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

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

Не по теме:

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

ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
02.05.2011, 00:14     Массивы,struct и всякое такое #15
Цитата Сообщение от lemegeton Посмотреть сообщение
Про sqrt согласен. Оно, например, быстрее pow(, .5) и по смыслу подходит лучше. Про умножение не согласен. Оно, например, может быть медленней pow(, 2) и по смыслу подходит меньше.
1. pow(x,2) - это вызов стандартной функции (с передачей параметров в стек, и получением результата, с прологом и эпилогом - пара десятков команд), а умножение - ОДНА команда процессора...
2. Я непосредственно по формуле эвклидова расстояния написал - как в учебнике. Так что яснее - некуда...
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
02.05.2011, 00:21     Массивы,struct и всякое такое #16
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
это вызов стандартной функции (с передачей параметров в стек, и получением результата, с прологом и эпилогом - пара десятков команд
не забываем, что компилятор часто прекрасно инлайнит функции стандартной библиотеки
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
02.05.2011, 00:38     Массивы,struct и всякое такое #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
}
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.05.2011, 01:25     Массивы,struct и всякое такое #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?
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
02.05.2011, 02:26     Массивы,struct и всякое такое #19
lemegeton,
Код
1.012000 
0.629000
MSVS, без оптимизации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2011, 16:29     Массивы,struct и всякое такое
Еще ссылки по теме:

объясните пожалуйста. что такое struct STUDENT? C++
C++ struct
C++ Заменить всякое вхождение слова "это" на слово "то"

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

Или воспользуйтесь поиском по форуму:
Getron
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 16
08.05.2011, 16:29  [ТС]     Массивы,struct и всякое такое #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?
Турбо С?
ну насчёт того что, то говно что стоит у нас в шараге...наврятле турбо С, хотя вообще незнаю чё там за древнятина
Yandex
Объявления
08.05.2011, 16:29     Массивы,struct и всякое такое
Ответ Создать тему
Опции темы

Текущее время: 23:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru