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

Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) - C++

Восстановить пароль Регистрация
 
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 14:57     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #1
Помогите решить эти задачи => http://s51.***********/i134/1111/53/cf71bfc67680.jpg
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2011, 14:57     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ)
Посмотрите здесь:

C++ помогите написать программу для ограничения скорости инета
Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) C++
C++ Помогите написать программу на C++ для Универа ($ЗАПЛАЧУ!$)
Написать программу для решения системы уравнений с пом. матрицы C++
Написать программу для решения системы двух уравнений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 17:28     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #2
3.11. Программа читает векторы x, y и выводит их скалярное произведение. Используйте оператор while и простые переменные (без индексов).
Странное задание. Почему нужно использовать while, если переменные без индексов. В голову пришёл только такой вариант с указателями.

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
#include <stdio.h>
 
main() {
        int x[5];
        int y[5];
        int n = 0, xy = 0;
        printf("Enter vectors X, Y: ");
        while (n < 5) {
                scanf("%d", x+n);
                n++;
        }
        n = 0;
        while (n < 5) {
                scanf("%d", y+n);
                n++;
        }
        n = 0;
        while (n < 5) {
                xy += *(x+n) * *(y+n);
                n++;
        }
        
        printf("x * y = %d\n", xy);
}
Задать различные параметры и посмотреть вывод можно здесь.
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 17:52  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #3
ну это наш учитель такое задание придумал можешь ещё пару решить плиз мне до понедельника нужно все сдать
p.s. большое спс за решение задачи

Добавлено через 5 минут
а что значит 12 строчка где написано два раза умножить? "* *"
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 18:01     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #4
Цитата Сообщение от generation472 Посмотреть сообщение
ну это наш учитель такое задание придумал можешь ещё пару решить плиз мне до понедельника нужно все сдать
p.s. большое спс за решение задачи

Добавлено через 5 минут
а что значит 12 строчка где написано два раза умножить? "* *"
умножение там одно. А вот *(x+n) значит получить хранимое значение по указанному адресу. Аналогично *(y+n).

Строчку *(x+n) * *(y+n) можно записать по-другому как x[n] * y[n]. Так как сказано
(без индексов)
был применен способ через указатели.
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 18:12  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #5
а понял это поинтер не сообразил сразу , а зачем тогда вот в этом "xy +" + та же строчка

Добавлено через 3 минуты
и последний вопрос для этой задачи))) почему когда я ввожу векторы получается что я ввожу 11 а не 10 , там же объявлено вроде как 10 переменных а не 11?
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 18:18     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #6
Цитата Сообщение от generation472 Посмотреть сообщение
а понял это поинтер не сообразил сразу , а зачем тогда вот в этом "xy +" + та же строчка
сокращенная запись a += b значит a = a + b

В строчке 12 вычисляется скалярное произведение.

Добавлено через 3 минуты
Цитата Сообщение от generation472 Посмотреть сообщение
Добавлено через 3 минуты
и последний вопрос для этой задачи))) почему когда я ввожу векторы получается что я ввожу 11 а не 10 , там же объявлено вроде как 10 переменных а не 11?
В стандартный поток ввода можно уместить 100 чисел и больше (на сколько хватит буфера). А программа считывает только 10 значений.

Это вполне нормально при вводе через пробел.

Пример
ввод:

1 1 1 1 1 2 2 2 2 2 3

вывод:

Enter vectors X, Y: x * y = 10
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 18:24  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #7
ясно спс. можешь ещё решить пару?
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 18:28     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #8
Цитата Сообщение от generation472 Посмотреть сообщение
ясно спс. можешь ещё решить пару?
Как будет время и желание. Ничего обещать не могу.
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 18:31  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #9
да я тебя понимаю спс, если сможешь решить до понедельника выкладываю сюда
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 19:06     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #10
Задание 3.13.
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
#include <stdio.h>
#include <math.h>
 
main() {
        int x[5];
        int n = 0;
        
        while (n < 5) {
                scanf("%d", &x[n]);
                n++;
        }
        
        // среднее арифметическое
        double m = 0;
        n = 0;
        while (n < 5) {
                m += x[n];
                n++;
        }
        m /= n;
        
        // среднее геометрическое
        n = 0;
        double g = 1;
        while (n < 5) {
                g *= x[n];
                n++;
        }
        g = pow(g, 1.0/n);
        
        // квадратическое отклонение
        n = 0;
        double s = 0;
        while (n < 5) {
                s += pow(x[n] - m, 2);
                n++;
        }
        s = sqrt(s/n); // или s = pow(s/n, 1.0/2.0);
        
        printf("1) %f\n", m);
        printf("2) %f\n", g);
        printf("3) %f\n", s);
}
Функции из math.h:
pow -- возведение в степень
sqrt -- квадратный корень
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 19:19  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #11
Цитата Сообщение от Xind Посмотреть сообщение
m += x[n]
а можно расписать это как то по другому а то не очень понятно
m += x[n] это равно m=m+x[n] правильно ?
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
05.11.2011, 19:46     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #12
Вот мой "быдлокод"... )) На 3.14 задачу. Требуется "конвертация" под комп, т.к. проверял только на PSP, не уверен, что будет работать без соответствующей правки с данными, выдаваемыми из под scanf, хотя в задаче не указано, что именно вводится слово не более 70 символов, поэтому это тоже объективное решение.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char word[9/*Здесь число не более 70, которое равно кол-ву символов массива что после равно -->>*/] = "123456789abcdefg";
    
printf("prefixes...\n");
 
int i, p;
for(i = 1; i < sizeof(word); i++)
{
    printf("prefix N%d: ", i);
    for(p = 0; p < i; p++)
        printf("%c", word[p]);
    printf("\n");
}
    
printf("\nsuffixes...\n");
 
for(i = sizeof(word) - 1; i > 0; i--)
{
    printf("suffix N%d: ", sizeof(word) - i);
    for(p = sizeof(word) - i; p < sizeof(word); p++)
        printf("%c", word[p]);
    printf("\n");
}
Если мне будет не лень, ещё и 3.16 решу.. но завтра.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 19:48     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #13
Цитата Сообщение от generation472 Посмотреть сообщение
а можно расписать это как то по другому а то не очень понятно
m += x[n] это равно m=m+x[n] правильно ?
Все верно. Такая запись очень удобна. На таких задачах можно и разворачивать. Но в будущем лучше использовать короткую запись (особенно при работе со структурами).
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
#include <stdio.h>
#include <math.h>
 
main() {
        int x[5];
        int n = 0;
        
        while (n < 5) {
                scanf("%d", &x[n]);
                n++;
        }
        
        // среднее арифметическое
        double m = 0;
        n = 0;
        while (n < 5) {
                m = m + x[n];
                n++;
        }
        m = m / n;
        
        // среднее геометрическое
        n = 0;
        double g = 1;
        while (n < 5) {
                g = g * x[n];
                n++;
        }
        g = pow(g, 1.0/n);
        
        // квадратическое отклонение
        n = 0;
        double s = 0;
        while (n < 5) {
                s = s + pow(x[n] - m, 2);
                n++;
        }
        s = sqrt(s/n); // или s = pow(s/n, 1.0/2.0);
        
        printf("1) %f\n", m);
        printf("2) %f\n", g);
        printf("3) %f\n", s);
}
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 20:09  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #14
просто я когда буду показывать эти задачи и меня спросит что это значит (а он может спросит так как не показывал нам такой способ) чтобы я мог ответить))) огромное спс всем за помощь

Добавлено через 5 минут
Frostegater спс буду ждать! я не очень понял 2 строчку а именно почему в массиве число 9 и почему он равен "123456789abcdefg"
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 20:17     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #15
3.15

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
main() {
        float a, eps = 1E-10; // то же самое, что esp = 0.0000000001
        scanf("%f", &a);
        
        float xi = 1.0, xn;
        do {
                xn = xi;
                xi = 0.5 * (xn + a / xn);
        } while (fabs(xi - xn) > eps);
        
        printf("sqrt(%f) = %f\n", a, xn);
}
запись 1E-10 значит 1 * 10 в степени -10
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 20:21  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #16
что значит это?
Цитата Сообщение от Xind Посмотреть сообщение
fabs
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 20:42     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #17
Цитата Сообщение от generation472 Посмотреть сообщение
что значит это?
fabs(x) = |x| -- Абсолютная величина или модуль. По заданию |xn+1 -xn|

в заголовке math.h есть просто abs() - он для целочисленных значений, а fabs для чисел с плавающей точкой float
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 20:48  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #18
ясно спс
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
05.11.2011, 21:20     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #19
3.12
Borlanda у меня нет так что по памяти
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <conio.h>
 
main() {
        int c = 0;
        while (c < 256) {
                printf("%u ", c);
                putch(c);
                putch('\n');
                c++;
        }
}
все дело в функции putch, которая лежит в conio.h из набора Borlanda. Я бы не стал так делать. Лучше воспользоваться из stdio.h функцией putchar()

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
main() {
        int c = 0;
        while (c < 256) {
                printf("%u ", c);
                putchar(c);
                putchar('\n');
                c++;
        }
}
Проверял, работает, выводит столбик ASCII)))

а ещё лучше сделать все в printf()
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
main() {
        int c = 0;
        while (c < 256) {
                printf("%u %c \n", c, c);
                c++;
        }
}
Пара замечаний: В коде используется тип int для избежания зацикливания в случае применения unsigned char, который принимает от 0 до 255 (проверка while (c < 256) всегда будет проскакивать ), а int больше и безопаснее.

%u - значит преобразовать значение переменной в unsigned char в целочисленном виде
%c - значит выводить в символьном виде

Уф! Все.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2011, 21:38     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ)
Еще ссылки по теме:

Написать программу, выводящую таблицу умножения для n-ной системы счисления (n<=16) C++
C++ Перевод числа из 10-ной системы счисления в троичную
C++ Написать программу для решения системы уравнений методом Гаусса (c++)

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

Или воспользуйтесь поиском по форуму:
generation472
 Аватар для generation472
19 / 19 / 2
Регистрация: 04.11.2011
Сообщений: 543
Записей в блоге: 1
05.11.2011, 21:38  [ТС]     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ) #20
спс тебе огромное сделал доброе дело)))
Yandex
Объявления
05.11.2011, 21:38     Помогите написать программу в Вorland С31 (для 16-ной СИСТЕМЫ)
Ответ Создать тему
Опции темы

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