Одномерный и двумерный массивы, функции в C
Есть задача: Заполнить одномерный массив из 20 элементов из файла input.txt и вывести его на экран. Изменить элементы массива, разделив каждый элемент массива на произведение последних цифр предыдущего и следующего элемента. Вывести измененный массив на экран на новой строке. Я написал код так, как я его понимаю, но он, к сожалению не работает. Я перебираю элементы с 1 по N, с каждым элементом провожу действия промежуточные, ВРОДЕ БЫ, правильно. Программа завершается с ошибкой, но не пишет, какой. Я учел ошибки из предыдущего вопроса, поэтому старался сам решить проблему:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main() {
FILE *output, *input;
int array[N], i, pred, posl, proizv;
output = fopen("input.txt", "w");
for (i = 0; i < N; i++) {
array[i] = -100 + rand() % (100 + 100 + 1);
fprintf(output, "%d ", array[i]);
}
for (i = 0; i < N; i++) {
pred = array[i - 1] % 10;
posl = array[i + 1] % 10;
proizv = pred * posl;
array[i] /= proizv;
}
fclose(output);
return 0;
}
Есть идея разбить главный цикл на 2 цикла, чтоб считать отдельно все, потом из них составлять массивы, складывать элементы массивов, получать сумму. В чем ошибки?
Как решил:
#include <stdio.h>
#include <stdlib.h>
#define N 20
int main(void) {
FILE *output;
int i, array[N], pred, posl, proizv;
output = fopen("output.txt", "w+r");
for (i = 0; i < N; i++) {
array[i] = -100 + rand() % (100 + 100 + 1);
fprintf(output, "%d ", array[i]);
}
for (i = 0; i < N; i++) {
fscanf(output, "%d ", &array[i]);
printf("%d ", array[i]);
}
fclose(output);
printf("\n\n");
for (i = 1; i < N - 1; i++) {
pred = array[i - 1] % 10;
posl = array[i + 1] % 10;
proizv = pred * posl;
printf("%d *%d =%d\n", pred, posl, proizv);
}
printf("\n\n");
return 0;
}
Ответы (1 шт):
@Harry, может быть, еще что-нибудь подскажете?
Да в принципе, все сказано. Вот готовая программа, которая делает то, что написано в условии. Крайние значения не трогая. Читая ввод из файла, и выводя в файл.
Деление выполняю с плавающей точкой.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define N 20
int main()
{
FILE *output, *input;
input = fopen("input.txt", "rt");
assert(input != NULL);
output = fopen("output.txt", "wt");
assert(output != NULL);
int pred, curr, next;
fscanf(input," %d %d",&pred,&curr);
fprintf(output,"%d ", pred);
for(int i = 1; i < N-1; i++)
{
fscanf(input," %d",&next);
fprintf(output,"%lf ",((double)curr)/(pred%10)/(next%10));
pred = curr, curr = next;
}
fprintf(output,"%d\n",next);
fclose(input);
fclose(output);
}