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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
#1

Заполнение трехмерного массива - C++

18.05.2012, 20:02. Просмотров 1333. Ответов 20
Метки нет (Все метки)

Есть программа которая считает расстояние скоростного пути.. и если машина находится близко к впереди идущей машине, то программа нам об этом сообщает.. так же как и о том что можно подъехать поближе к этой машине.. задается скорость автомобиля в м/с и расстояние до впереди идущего автомобиля в метрах. Программа продолжает работать до того пока скорость не будет равна 0 м/с.

нужна помощь..
что нужно добавить, и куда, в этой программе, чтобы десять последних запросов на расчет тормозного пути записывался в трехмерный массив, к которому надо обратиться через указатель. И этот массив с расчетами записать на диск в текстовом виде.. ( хотя последнее и так думаю догадаюсь как сделать)
просто не могу понять как заполнять массив, а тем более трехмерный запросами.


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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//#include <stdio>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <clocale>
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
    double v=0, s=0, k=0;
    do
    {
    printf("Введите скорость автомобиля, м/с: ");
    cin>>v; //считываем скорость, введённую пользователем
    printf("Введите расстояние между автомобилями, м: ");
    cin>>s; //считываем расстояние между машинами
    printf("Введите коэффициент трения:\n1. Гололед.\n2. Снег.\n3. Мокрый асфальт.\n4. Сухой асфальт.\n");
 
    char a;
    int i=0;
    while(i == 0)
    {
        a=getch();
        switch(a)
        {
            case '1': k=0.1; printf("\nВыбран гололед. Коэффициент трения=%.1f", k); i=1; break;        
            case '2': k=0.2; printf("\nВыбран снег. Коэффициент трения=%.1f", k); i=1; break;       
            case '3': k=0.4; printf("\nВыбран мокрый асфальт. Коэффициент трения=%.1f", k); i=1; break;     
            case '4': k=0.7; printf("\nВыбран сухой асфальт. Коэффициент трения=%.1f", k); i=1; break;      
            default: printf("\nНеправельный выбор. Пожалуйста попробуйте еще раз."); break;     
        }
    }
    //cin>>k; //считываем коэффициент дороги
    double resd=v*v/(2*k*9.81); //высчитываем тормозной путь
    printf("\n");
    if ( v == 0)
    {
        printf("Вы стоите. Ваша скорость 0 м/с.\n");
    }
    else
    {
    if (abs(resd-s) < 0.01) //если расстояния почти равны, то советуем оставить всё как есть
    {
        printf("Вам нужно сохранять скорость на этом уровне. Не едьте быстрее или медленнее.\n");
    }
    else
    {
        if (resd < s) //если дистанция больше, чем тормозной путь, то можно ускориться
        {
            printf("Вы можете ехать быстрее. Расстояние достаточное между автомобилями.\n");
        }
        if (resd > s) //если дистанция меньше тормозного пути, то стоит замедлиться
        {
            printf("Вы должны замедлиться. Ваше расстояние слишком маленькое между автомобилями.\n");
        }
    }
    }
    }while(v != 0); // диалог с пользователем бесконечным до ввода скорости 0 м/с
    getch();
    getch();
}
Добавлено через 1 час 9 минут
апаимся)

Добавлено через 1 час 0 минут
апаемся

Добавлено через 8 часов 57 минут
апаемся

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

Добавлено через 1 час 33 минуты
апчхи

Добавлено через 4 часа 33 минуты
и еще раз

Добавлено через 56 минут
пурум
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 20:26     Заполнение трехмерного массива #2
А что собственно в этом массиве хранится? Да зачем его вообще использовать?
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
18.05.2012, 20:31  [ТС]     Заполнение трехмерного массива #3
сам не пойму.. чего храниться вообще не представляю.. надо просто туда записать 10 последних запросов. я так понял в виде запроса можно сделать скорость м/с которую вначале вводим v
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 20:35     Заполнение трехмерного массива #4
сам не пойму..
Ну когда разберетесь пишите...

А вообще лучше организовать массив структур, а не трехмерный массив( как я предпологаю )
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
18.05.2012, 20:50  [ТС]     Заполнение трехмерного массива #5
Цитата Сообщение от Avazart Посмотреть сообщение
Ну когда разберетесь пишите...

А вообще лучше организовать массив структур, а не трехмерный массив( как я предпологаю )
надо в массив записать 10 последних введенных скоростей которые вводим.
а массив структур может быть трехмерным?
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 20:52     Заполнение трехмерного массива #6
а массив структур может быть трехмерным?
Может, но зачем?
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
18.05.2012, 21:01  [ТС]     Заполнение трехмерного массива #7
В задание так сказано.
А вообще и одномерный сойдет, главное чтобы с указателями был. Думаю в 3х мерный смогу переделать.
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 21:33     Заполнение трехмерного массива #8
Ну как то так:
C++
1
2
3
4
5
6
7
8
9
10
double V[10];
int index=0;
//...
printf("Введите скорость автомобиля, м/с: ");
cin>>v; //считываем скорость, введённую пользователем
   V[index]=v;
   index++;
printf("Введите расстояние между автомобилями, м: ");
cin>>s; //считываем расстояние между машинами
//...
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
18.05.2012, 22:51  [ТС]     Заполнение трехмерного массива #9
Спасибо. А как его теперь вывести?
Пробую так, но он выводит не введенный v, а 0-ли может быть пустые ячейки памяти.
C++
1
2
3
4
5
    for (int i = 0; i < index; i++)
{
printf("Скорость %d м/с",v);
printf("\n");
}
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 22:58     Заполнение трехмерного массива #10
C++
1
for (int i=0; i<index; i++)  printf("Скорость %d м/с\n",&V[i]);
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
18.05.2012, 23:06  [ТС]     Заполнение трехмерного массива #11
выводит большие числа и после каждого повтора прибавляет по 8
Скорость 1439880 м/с
Скорость 1439888 м/с
Скорость 1439896 м/с
Скорость 1439904 м/с
Скорость 1439912 м/с
Скорость 1439920 м/с
Скорость 1439928 м/с
Скорость 1439936 м/с
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 23:08     Заполнение трехмерного массива #12
А так
C++
1
for (int i=0; i<index; i++) std::cout<<"Скорость " <<V[i]<<std::endl;
Наверное без &
C++
1
for (int i=0; i<index; i++)  printf("Скорость %d м/с\n",V[i]);
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
18.05.2012, 23:20  [ТС]     Заполнение трехмерного массива #13
Да, супер. А как вывести только последние 10 записей? а то так выводит, там где 0.4 это вводится что-то не тою
Скорость 3
Скорость 4
Скорость 4
Скорость 4
Скорость 34
Скорость 4
Скорость 4
Скорость 3
Скорость 4
Скорость 34
Скорость 4
Скорость 0.4
Скорость 4
Скорость 30
Скорость 4

Добавлено через 2 минуты
вот этот так работает,
C++
1
for (int i=0; i<index; i++) std::cout<<"Скорость " <<V[i]<<std::endl;
а это нули выдает
C++
1
for (int i=0; i<index; i++)  printf("Скорость %d м/с\n",V[i]);
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
18.05.2012, 23:40     Заполнение трехмерного массива #14
Ну посути он выводит первые 10 элементов, и если введено больше выводит мусор

По этому надо сделать что то вроде
C++
1
2
3
4
5
6
7
8
9
10
11
int size=0;
//....
cout<<"Введите скорость автомобиля, м/с: "<<endl;
cin>>v; //считываем скорость, введённую пользователем
if(index<10){ V[index]=v; index++;}
else (index=0; V[index]=v; index++;}
size=(size>index)?size:index;
cout<<"Введите расстояние между автомобилями, м: "<<endl;
cin>>s; //считываем расстояние между машинами
//....
for (int i=0; i<size; i++) std::cout<<"Скорость " <<V[i]<<std::endl;
Либо использовать std::list или std::deque вместо массива что бы сохранять относительный порядок
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
19.05.2012, 00:46  [ТС]     Заполнение трехмерного массива #15
Все работает, спасибо) теперь еще один вопрос)
вот мы вводим первые 10 запросов, получаем
Скорость 1
Скорость 2
Скорость 3
Скорость 4
Скорость 5
Скорость 6
Скорость 7
Скорость 8
Скорость 9
Скорость 10

потом вводим 11й и 12й он начинает с начала
Скорость 11
Скорость 12
Скорость 3
Скорость 4
Скорость 5
Скорость 6
Скорость 7
Скорость 8
Скорость 9
Скорость 10

как его организовать чтобы вывести 10 последних.. я так понял правильно чтобы вывилось он после 10 введенных должен смещать массив на 1


Скорость 3
Скорость 4
Скорость 5
Скорость 6
Скорость 7
Скорость 8
Скорость 9
Скорость 10
Скорость 11
Скорость 12
чтобы вот такой результат получался
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
19.05.2012, 01:00     Заполнение трехмерного массива #16
после 10 введенных должен смещать массив на 1
Да
Либо использовать std::list или std::deque вместо массива что бы сохранять относительный порядок
.....
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
19.05.2012, 01:14  [ТС]     Заполнение трехмерного массива #17
А это действие с массивом можно сделать? Чтобы не убирать его?
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,070
Записей в блоге: 17
19.05.2012, 01:22     Заполнение трехмерного массива #18
Можно, копируя элементы
4uLABEK
2 / 2 / 0
Регистрация: 30.09.2011
Сообщений: 37
19.05.2012, 01:36  [ТС]     Заполнение трехмерного массива #19
Если бы я знал как это делается(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 02:32     Заполнение трехмерного массива
Еще ссылки по теме:

C++ Выделить память для трехмерного массива и изменить индексы начального элемента массива
C++ Ошибка нарушения прав доступа при чтении по адресу, возникающая при инициализации трехмерного массива
C++ Посчитать среднегеометрическое главной диагонали трехмерного массива (NxNxN)
Создать двумерный массив из трехмерного массива по условию C++
C++ Заполнить срез трехмерного массива

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
6676 / 3857 / 511
Регистрация: 29.11.2010
Сообщений: 10,217
19.05.2012, 02:32     Заполнение трехмерного массива #20
Я бы все организовал в виде стека, ну или вектора, если порядок важен. Можно списка, по вкусу. А заморачиваться со сдивгом элементов массива - не просто непроизводительно, а еще и геморно.
Yandex
Объявления
19.05.2012, 02:32     Заполнение трехмерного массива
Ответ Создать тему
Опции темы

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