powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Много ли новых проектов пишется на C
25 сообщений из 101, страница 3 из 5
Много ли новых проектов пишется на C
    #35995667
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkПопробуйте на С написать библиотечную подпрограмму, которая находит произведение ... нет, пусть просто сумму двух матриц A(m,n,p) + b(m,n,p) = с(m,n,p) - и далее разговор более предметный пойдет.
Обращение к подпрограмме предполагается что-то в роде
sum_matr(m,n,p,a,b,c).

Зачем писать то, что давно написано ?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995697
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
библиотечную п/п нельзя компилировать в том же модуле, что и вызывающая, поскольку она создается другими программистами для общего применения. Её необходимо компилить в виде отдельного .obj и затем прилинковывать.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995700
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo,
библиотечную п/п нельзя компилировать в том же модуле, что и вызывающая, поскольку она создается другими программистами для общего применения. Её необходимо компилить в виде отдельного .obj и затем прилинковывать.
В простейшем тестовом случае - пофигу, не находите?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995702
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
нет, не пофигу. Потому что и простейший случай не выйдет. Щас скопировал текст и попробую у себя покомпилить.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995724
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo,
нет, не пофигу. Потому что и простейший случай не выйдет. Щас скопировал текст и попробую у себя покомпилить.
Пофигу, в итоге получится то же самое. Зато с листингами возни меньше.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995842
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
попробуй всё-таки для начала - если получится, для меня это будет открытие.
Привожу свой вариант основной программы:
Код: plaintext
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.
#include <stdio.h>
#define  DIM1   2 
#define  DIM2   3 
#define  DIM3   4 
void sum_matr(int ,int, int, double*,double*,double*);
int main()
{
    int i,j,k;
    double a[DIM1][DIM2][DIM3];
    double b[DIM1][DIM2][DIM3];
    double c[DIM1][DIM2][DIM3];
    for (i= 0 ; i < DIM1; i++) 
        for(j= 0 ;j<DIM2; j++) 
            for (k= 0 ; k < DIM3; k++) 
    {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
    }
    
    sum_matr(DIM1,DIM2,DIM3,a[ 0 ][ 0 ],b[ 0 ][ 0 ],c[ 0 ][ 0 ]);
	for (i= 0 ; i < DIM1; i++) 
		for (j= 0 ; j < DIM2; j++)
			for (k= 0 ; k < DIM3; k++)
				if (a[i][j][k] + b[i][j][k] != c[i][j][k]) {
					printf("%s","\nСумма вычислена неверно");
					goto exit;
				}
    printf("%s","\nOk");
exit:    
    return  0 ;
};
И "бибиотечной подпрограммы"
Код: plaintext
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.
#include <stdio.h>
#define  DIM1   2 
#define  DIM2   3 
#define  DIM3   4 
void sum_matr(int ,int, int, double*,double*,double*);
int main()
{
    int i,j,k;
    double a[DIM1][DIM2][DIM3];
    double b[DIM1][DIM2][DIM3];
    double c[DIM1][DIM2][DIM3];
    for (i= 0 ; i < DIM1; i++) 
        for(j= 0 ;j<DIM2; j++) 
            for (k= 0 ; k < DIM3; k++) 
    {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
    }
    
    sum_matr(DIM1,DIM2,DIM3,a[ 0 ][ 0 ],b[ 0 ][ 0 ],c[ 0 ][ 0 ]);
	for (i= 0 ; i < DIM1; i++) 
		for (j= 0 ; j < DIM2; j++)
			for (k= 0 ; k < DIM3; k++)
				if (a[i][j][k] + b[i][j][k] != c[i][j][k]) {
					printf("%s","\nСумма вычислена неверно");
					goto exit;
				}
    printf("%s","\nOk");
exit:    
    return  0 ;
};
Вроде только так можно. Приверить не могу - не находит какую-то библиотеку
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995850
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, не тот файл взял:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void sum_matr( DIM1, DIM2, DIM3, a, b, c)
int DIM1, DIM2, DIM3;
double *a, *b, *c;

{
   int i,j,k, ind;
   for (i= 0 ; i < DIM1; i++)
      for(j= 0 ; j < DIM2; j++)
	     for(k =  0 ; k < DIM3; k++) {
		    ind = i * DIM1 * DIM2 + j * DIM2 + k;
			c[ind] = a[ind] + b[ind];    
		 }
		    
   
}
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995884
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже вижу ошибку - индекс надо вычислять вроде так:
Код: plaintext
1.
  ind = i*DIM2*DIM3 + j * DIM3 + k 
Короче говоря, можно только через пересчет многомерных индексов в одномерный массив - а это многократно усложняет программы и богатая почва для ошибок (очень простой пример - и уже можно неправильно сделать).
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995944
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo,
попробуй всё-таки для начала - если получится, для меня это будет открытие.

Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995952
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Зачем писать то, что давно написано?
Поинтересовался ссылкой, но при попытке скачать Downoad Master прождал минуту и выдал error.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995962
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
Ну, библиотек никогда не создавал - у каждого свой стиль :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996006
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkУже вижу ошибку - индекс надо вычислять вроде так:
Код: plaintext
1.
  ind = i*DIM2*DIM3 + j * DIM3 + k 
Короче говоря, можно только через пересчет многомерных индексов в одномерный массив - а это многократно усложняет программы и богатая почва для ошибок (очень простой пример - и уже можно неправильно сделать).Размер матриц у Вас не динамический, Вы задаёте его при компиляции, тогда почему Вы этого не делаете для аргументов функции sum_matr, а приводите их к одномерному массиву ?
что Вам мешает использовать такую сигнатуру функции:
Код: plaintext
1.
2.
void sum_matr(int DIM1,int DIM2, int DIM3,
    double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])
и обращаться к массиву стандартным способом:
Код: plaintext
c[i][j][k] = a[i][j][k] + b[i][j][k];
?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996035
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkGluk (Kazan)
Зачем писать то, что давно написано?
Поинтересовался ссылкой, но при попытке скачать Downoad Master прождал минуту и выдал error.

Найти где скачать не проблема, вещь известная
Мне правда нафих не нужная, так что ищите сами
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996048
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш
что Вам мешает использовать такую сигнатуру функции:
Код: plaintext
1.
2.
void sum_matr(int DIM1,int DIM2, int DIM3,
    double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])
и обращаться к массиву стандартным способом:
Код: plaintext
c[i][j][k] = a[i][j][k] + b[i][j][k];
?
Это так, что ли?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void sum_matr(int DIM1,int DIM2, int DIM3,
    double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])

{
   int i,j,k;
   for (i= 0 ; i < DIM1; i++)
      for(j= 0 ; j < DIM2; j++)
	     for(k =  0 ; k < DIM3; k++) {

                        c[i][j][k] = a[i][j][k] + b[i][j][k];
		 }


}
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996059
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ Убедительная просьба проверять тексты программ на работоспособность перед тем, как постить.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996067
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk wrote:

> массивов используется повсюду, я привел лишь очень упрощенный вариант
> для объяснения *почти принципиальной* невозможности перевести библиотеки
> Ф. по численным методам на С, а не то, что там у кого-то нехватило

во-первых, есть f2c -- компилятор с фортрана-77 на С. Так что о принципиальной
невозможности говорить не приходится. Во-вторых, даже руками можно
сделать эмуляцию многомерных массивов на С, вычисляя смещения от начала
массива в зависимости от индексов, на ассемблере же это делается,
почему на С-то нельзя ? Да, может будет неудобно, менее читаемо и т.д.,
но принципиально это возможно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996073
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk+ Убедительная просьба проверять тексты программ на работоспособность перед тем, как постить.не у всех есть микрософтовский компилятор :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996085
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшне у всех есть микрософтовский компилятор :)
А какой еще пробовать? У меня Borland где-то на полке, и Watcom еще есть.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996098
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так попробуйте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <stdio.h>
#define DIM1  2 
#define DIM2  3 
#define DIM3  4 
void sum_matr(double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])
{

. . .
    };
    sum_matr(a,b,c);
    for (i= 0 ; i < DIM1; i++)
    {
. . .
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996127
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёштак попробуйте:

Здесь делается попытка создать пусть и очень простую, но библиотечную подпрограмму, которая должна работать не только для одного-единственного случая, когда
DIM1= 2, DIM2 = 3, DIM3 = 4, а для всех нормальных случаев, которые будут ей подавать на вход.
Чтобы было более понятно, представьте вариант, когда надо одной и той же п/п надо один раз сложить массивы DIM1=2, DIM2 = 3, DIM3 = 4, а второй раз - скажем, DIM1 = 10, DIM2 = 15, DIM3 = 20.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996158
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkЁштак попробуйте:

Здесь делается попытка создать пусть и очень простую, но библиотечную подпрограмму, которая должна работать не только для одного-единственного случая, когда
DIM1= 2, DIM2 = 3, DIM3 = 4, а для всех нормальных случаев, которые будут ей подавать на вход.
Чтобы было более понятно, представьте вариант, когда надо одной и той же п/п надо один раз сложить массивы DIM1=2, DIM2 = 3, DIM3 = 4, а второй раз - скажем, DIM1 = 10, DIM2 = 15, DIM3 = 20.тогда этот способ не будет работать :)
но если размер известен при компиляции - его можно точно так же передавать при компиляции библиотеки в библиотеку.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996245
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo
Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
Ну, библиотек никогда не создавал - у каждого свой стиль :)
Почему не создавал? Просто в случае "простейшего примера", не вижу смысла. Не занудствуй, запарил.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996252
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшVowk+ Убедительная просьба проверять тексты программ на работоспособность перед тем, как постить.не у всех есть микрософтовский компилятор :)
У меня тоже его нету, но я в MinGW проверял :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996262
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoVowkXDiaBLo,
попробуй всё-таки для начала - если получится, для меня это будет открытие.

Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
Ключевой момент тут, если непонятно, я говорю об отдельном файле на каждую функцию. Типа как на каждый публичный класс в Яве.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997539
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабочий вариант на чистом Си (ну закроем глаза на cout)

Код: plaintext
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.
66.
67.
68.
69.
70.
71.
72.
#include <iostream.h>
#include <malloc.h>

void sum_matr(const int, const int, const int, double ***, double ***, double ***);

const int DIM1 =  10 ;
const int DIM2 =  15 ;
const int DIM3 =  20 ;

int main()
{
	double*** A = (double***)malloc(sizeof(double**)*DIM1);
	double*** B = (double***)malloc(sizeof(double**)*DIM1);
	double*** C = (double***)malloc(sizeof(double**)*DIM1);

	int i,j,k;

	for(i =  0 ; i < DIM1; i++)
	{
		A[i] = (double**)malloc(sizeof(double*)*DIM2);
		B[i] = (double**)malloc(sizeof(double*)*DIM2);
		C[i] = (double**)malloc(sizeof(double*)*DIM2);

		for(j=  0 ; j < DIM2; j++)
		{
			A[i][j] = (double*)malloc(sizeof(double)*DIM3);
			B[i][j] = (double*)malloc(sizeof(double)*DIM3);
			C[i][j] = (double*)malloc(sizeof(double)*DIM3);

			for(k= 0 ; k < DIM3; k++)
			{
				A[i][j][k] =  1 . 0 ;
				B[i][j][k] =  2 . 0 ;
				C[i][j][k] =  0 . 0 ;
			}
		}
	}

	sum_matr(DIM1, DIM2, DIM3, A, B, C);

	for(i =  0 ; i < DIM1; i++)
		for(j=  0 ; j < DIM2; j++)
			for(k =  0 ; k < DIM3; k++)
				cout << "C[" << i << "][" << j << "][" << k << "] = " << C[i][j][k] << endl;

	for(i =  0 ; i < DIM1; i++)
	{
		for(j=  0 ; j < DIM2; j++)
		{
			free(A[i][j]);
			free(B[i][j]);
			free(C[i][j]);
		}

		free(A[i]);
		free(B[i]);
		free(C[i]);
	}

	free(A);
	free(B);
	free(C);

	return  0 ;
}

void sum_matr(const int DIM1, const int DIM2, const int DIM3, double ***a, double ***b, double ***c)
{
         for(int i =  0 ; i < DIM1; i++)
              for(int j=  0 ; j < DIM2; j++)
                   for(int k= 0 ; k < DIM3; k++)
                        c[i][j][k] = a[i][j][k] + b[i][j][k];
}
...
Рейтинг: 0 / 0
25 сообщений из 101, страница 3 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Много ли новых проектов пишется на C
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]