Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 18:06   #1
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
Восклицание

В общем не вижу свою ошибку(не знаю как исправить)

1. сначала вводишь размеры матрицы(строки, столбцы)
2. затем выделяешь память под них
3. потом вызываешь функцию ввода (vvod)
4. потом выводишь исходную матрицу на экран (vivod)

^вот что должна делать программа,

вот собственно исходный код
Код:
#include <stdlib.h> 
#include <conio.h>
#include <stdio.h>
using namespace std;
void vvod(int p, int t1, int t2)
{
printf ("\n\nVvedite elementi massiva:\n\n");
for (int i=0; i<t1; i++)
for (int j=0; j<t2; j++)
{
printf(" stroka %d, chislo %d = ", i+1, j+1);
scanf("%d", &p[i][j]);
} 
}

void vivod(int p, int t1, int t2)
{
int i,j;
for (i=0; i<t1; i++)
{
for (j=0; j<t2; j++) printf("%5d",p[i][j]); 
printf("\n"); 
} 
}

int main()
{
int x;
int na, nb, p, t1, t2;
printf("Razner 1 matrici:\n");
printf("stroki = ");
scanf("%d", &na);
printf("stolbci = ");
scanf("%d", &nb);
p=(int*)calloc((na*nb),sizeof(int*));
printf("Vvedite razmer matrici 1:\n");
vvod(p,t1,t2);
printf("Ishodnaya matrica 1:\n");
vivod(p,t1,t2);
getch();
return 0;
}
как я понял - не правильно передаю массив в функцию и похоже не нравится строчка:
Код:
p=(int*)calloc((na*nb),sizeof(int*));
Я думал, что этой строчкой под указателем p - выделю пустое место на na*nb элементов типа int

пожалуйста распишите конкретно мои ошибки! чтобы больше их не делал!
Спасибо

Ещё очень важное примечание - нужно сделать на языке СИ!

Код:
p=(int*)calloc((na*nb),sizeof(int));
даже так, наверное так правильнее

Последний раз редактировалось Stilet; 31.01.2012 в 22:31.
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 18:11   #2
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Может все же функция malloc, а не calloc?
malloc выделяет память. c помощью realloc можно ее увеличить

+ в объявлении ошибка
ты должен объявить указатель, то есть
Код:
int *p;
p = (int*)malloc((na*nb),sizeof(int)) ;
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL

Последний раз редактировалось Stilet; 31.01.2012 в 22:36.
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:20   #3
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

при компилировании стал писать ошибку
346 C:\Dev-Cpp\include\stdlib.h too many arguments to function `void* malloc(size_t)'

и так же появилась куча ошибок



вот код который сейчас имеется

Код:
#include <stdlib.h> 
#include <conio.h>
#include <stdio.h>
using namespace std;
void vvod(int p, int t1, int t2)
{
printf ("\n\nVvedite elementi massiva:\n\n");
for (int i=0; i<t1; i++)
for (int j=0; j<t2; j++)
{
printf(" stroka %d, chislo %d = ", i+1, j+1);
scanf("%d", &p[i][j]);
} 
}

void vivod(int p, int t1, int t2)
{
int i,j;
for (i=0; i<t1; i++)
{
for (j=0; j<t2; j++) printf("%5d",p[i][j]); 
printf("\n"); 
} 
}

int main()
{
int *p;
int na, nb, t1, t2;
printf("Razner 1 matrici:\n");
printf("stroki = ");
scanf("%d", &na);
printf("stolbci = ");
scanf("%d", &nb);
p=(int*)malloc((na*nb),sizeof(int));
printf("Vvedite razmer matrici 1:\n");
vvod(p,t1,t2);
printf("Ishodnaya matrica 1:\n");
vivod(p,t1,t2);
getch();
return 0;
}
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 18:23   #4
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

А разве malloc не из библиотеки <Windows.h> ?
Подключи ее и будет счастье.
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:25   #5
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

+ Аргументы в подпрограммах,надо
Код:
void vvod(int *p, int t1, int t2)
и во второй процедуре также

P.S. Ты же в ПП передаешь указатель, а по программе принимаешь целое число
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:27   #6
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Inv1s Посмотреть сообщение
А разве malloc не из библиотеки <Windows.h> ?
Подключи ее и будет счастье.
Подключил, тоже самое(

он придирается ко всем принтфам, сканфам
и вызову функции (vvod, vivod), я хз что такое(

Вот что пишет для vvod vivod - invalid conversion from `int*' to `int'
Вот что для принтф, сканф - invalid types `int[int]' for array subscript
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 18:27   #7
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Выше пост на эту тему
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:28   #8
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Inv1s Посмотреть сообщение
+ Аргументы в подпрограммах,надо
Код:
void vvod(int *p, int t1, int t2)
и во второй процедуре также

P.S. Ты же в ПП передаешь указатель, а по программе принимаешь целое число
а вот, теперь лучше стало, только к:

1) scanf("%d", &p[i][j]); - функция vvod
invalid types `int[int]' for array subscript

2) printf("%5d",p[i][j]); - функция vivod
такая же ошибка "invalid types `int[int]' for array subscript"

Последний раз редактировалось Андрей!; 31.01.2012 в 18:32.
Андрей! вне форума Ответить с цитированием
Старый 31.01.2012, 18:31   #9
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Если не хочешь заморачиваться по поводы вывода, пользуйся потоковым.
Библиотека <iostream>, в гугле найдешь, там без заморочек с типом
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 31.01.2012, 18:34   #10
Андрей!
Пользователь
 
Регистрация: 04.11.2011
Сообщений: 45
По умолчанию

Как я понял - проблема в том, что я передаю его в функцию как одномерный массив, а у меня двумерный.

Я не знаю как это исправить.
Андрей! вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение динамической памяти под правый треугольник квадратной матрицы Assasin92 Общие вопросы C/C++ 0 30.10.2010 23:14
Динамическое выделение памяти под массив объектов со специализированным конструктором capta1n Общие вопросы C/C++ 6 07.03.2010 16:01
Задача на массивы.Язык С.Динамическое распределение памяти Bella Помощь студентам 1 22.10.2009 17:45
динамическое выделение памяти под верхний треугольник квадратной матрицы juventine Помощь студентам 2 12.04.2009 13:02
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52