#include <stdio.h>
#include <math.h>
int main(void)
{
int n;
scanf("%d", &n);
float a[n] [n];
printf("Введите масив\n");
vvod(a,n);
printf("\nВведенный масив\n");
pecat(a,n);
return 0;
}
int vvod(float **a, const int n) {
for(i=0; i<n;>[j]);
}
int pecat(const float **a, int n) {
int i,j;
for(i=0; i<n;>[j]);
printf("\n");
}
}
На вводе массива пишет Ошибка сегментирования (core dumped)
мне надо сделать с указателями
Другие языки программирования и технологии
С Указатели двухмерный масив
> int n;
> scanf("%d", &n);
> float a[n][n];
Компилятор GCC? В MS VC такое не прокатит.
#include <stdio.h>
#include <stdlib.h>
int vvod(float *a, const int n) {
int c;
for (c = 0; c < n * n; ++c) scanf("%f", a + c);
}
int pecat(const float *a, const int n) {
int r, c;
for(r = 0; r < n; ++r) {
for (c = 0; c < n; ++c) printf("%""5.1f", *(a + r * n + c));
putchar('\n');
}
}
int cmp(const void *x, const void *y) {
return *(float *)x < *(float *)y ? -1 : *(float *)x > *(float *)y? 1 : 0;
}
main() {
int n;
scanf("%d", &n);
float a[n][n];
printf("Введите масив\n");
vvod(&a[0][0], n);
printf("\nВведенный масив\n");
pecat(&a[0][0], n);
qsort(&a[0][0], n * n, sizeof(a[0][0]), cmp);
printf("\nОтсортированный массив\n");
pecat(&a[0][0], n);
return 0;
}
> scanf("%d", &n);
> float a[n][n];
Компилятор GCC? В MS VC такое не прокатит.
#include <stdio.h>
#include <stdlib.h>
int vvod(float *a, const int n) {
int c;
for (c = 0; c < n * n; ++c) scanf("%f", a + c);
}
int pecat(const float *a, const int n) {
int r, c;
for(r = 0; r < n; ++r) {
for (c = 0; c < n; ++c) printf("%""5.1f", *(a + r * n + c));
putchar('\n');
}
}
int cmp(const void *x, const void *y) {
return *(float *)x < *(float *)y ? -1 : *(float *)x > *(float *)y? 1 : 0;
}
main() {
int n;
scanf("%d", &n);
float a[n][n];
printf("Введите масив\n");
vvod(&a[0][0], n);
printf("\nВведенный масив\n");
pecat(&a[0][0], n);
qsort(&a[0][0], n * n, sizeof(a[0][0]), cmp);
printf("\nОтсортированный массив\n");
pecat(&a[0][0], n);
return 0;
}
код лучше на http://pastebin.com/
удивительно что у вас вообще собралось с такими то конcтрукциями типа "float a[n] [n]; "
а так у вас должно быть float *a (а не float **a) и понимание того, что такое указатель
как то так должно быть, короче. разверните двумерный массив в одномерный при передаче в функцию
Он и так у вас сейчас передается -- vvod(a,n);
получаете указатель на float (т. е. на начало массива)
int vvod(float *a, const int n)
и читаете пишете данные как a(i*n+j)
удивительно что у вас вообще собралось с такими то конcтрукциями типа "float a[n] [n]; "
а так у вас должно быть float *a (а не float **a) и понимание того, что такое указатель
как то так должно быть, короче. разверните двумерный массив в одномерный при передаче в функцию
Он и так у вас сейчас передается -- vvod(a,n);
получаете указатель на float (т. е. на начало массива)
int vvod(float *a, const int n)
и читаете пишете данные как a(i*n+j)
Похожие вопросы
- Список с использованием указателей на Си
- Два вопроса про указатели в С++ внутри.
- Вопрос про указатели в С++ внутри
- СЛОЖНА! С++ Начал читать про указатели. Скопилось куча вопросов. Помогите!
- С++.Обработка строк при помощи указателей.
- масивы. может ли реальное количество элеентов в масиве быть меньше, чем указано при описании? больше? почему?
- Помогите с одномерным масивом. Программа нужна на С или C++.
- как павельно обявить двухмерныи масив в си?
- суму елементів масиву з парними індексами та добуток елементів з непарними індексами. Масив вводиться з клавіатури c++
- Инициализация массива. Указатели.