Как создать массив через указатель и отдельную функцию?
На вход подается длина массива и элементы массива. Нужно найти квадраты элементов массива. Ввод, возведение и вывод реализовать отдельными функциями при помощи указателей.
3
1 45 26
Обращаться к значениям массива нужно через адрес
int input(int *n, int data[]);
//void output(int *n, int *data);
//void squaring(int *n, int *data);
int main() {
int n, data[n];
input(&n, &data);
//squaring(&n, &data);
//output(&n, &data);
return 0;
}
int input(int n, int data[]) {
scanf("%d", n);
for (int *pd=data[]; pd<data[n]; pd++){
scanf("%d", *pd);
}
//или так
scanf("%d", &n);
for (int *pd=data; pd<(pd+n); pd++) {
scanf("%d", *pd);
}
}
Конечно нужно отдельной во второй функции реализовать возведение в квадрат. а третьей вывести Будет здорово если поможете разобраться хотябы с первой
Ответы (1 шт):
Ну, что-то типа (если не прибегать к не везде реализованному VLA)
void input(int* data, int n)
{
for(int i = 0; i < n; ++i) scanf("%d",data+i);
}
void calc(int* data, int n)
{
for(int i = 0; i < n; ++i) *(data+i) *= *(data+i);
}
void output(int* data, int n)
{
for(int i = 0; i < n; ++i) printf("%d ",*(data+i));
puts("");
}
int main()
{
int n;
scanf("%d",&n);
int * data = malloc(n*sizeof(int));
input(data, n);
calc(data,n);
output(data,n);
free(data);
}
P.S. Вводил прямо тут, не компилируя (это если где-то выпрыгнут очепятки).
Поскольку написанный вариант кажется ТС недостаточно через указатели, вот еще один. Если опять не понравится — устрою ему трехзвездочную жизнь...
#include <stdio.h>
#include <stdlib.h>
void input(int* data, int n)
{
for(int * end = data + n; data < end; ++data) scanf("%d",data);
}
void calc(int* data, int n)
{
for(int * end = data + n; data < end; ++data) *data *= *data;
}
void output(int* data, int n)
{
for(int * end = data + n; data < end; ++data) printf("%d ",*data);
puts("");
}
int main()
{
int n;
scanf("%d",&n);
int * data = malloc(n*sizeof(int));
input(data, n);
calc(data,n);
output(data,n);
free(data);
}
Решение, в котором нет ничего, кроме указателей:
#include <stdio.h>
#include <stdlib.h>
void input(int** data, int** n)
{
for(int *p = *data, * end = p + **n; p < end; ++p) scanf("%d",p);
}
void calc(int** data, int **n)
{
for(int *p = *data, * end = p + **n; p < end; ++p) *p *= *p;
}
void output(int** data, int **n)
{
for(int *p = *data, * end = p + **n; p < end; ++p) printf("%d ",*p);
puts("");
}
int main()
{
int * n = malloc(sizeof(int));
scanf("%d",n);
int * data = malloc((*n)*sizeof(int));
input (&data,&n);
calc (&data,&n);
output(&data,&n);
free(data);
free(n);
}