|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Потоковый ввод и ввод с клавиатуры. Рекурсия |
|
|
C/C++ - Потоковый ввод и ввод с клавиатуры. Рекурсия
|
Новый участник Сообщения: 10 |
Профиль | Отправить PM | Цитировать Программа должна по выбору пользователя осуществлять ввод исходной матрицы с клавиатуры или из файла. Для этого программа должна содержать две соответствующие функции, указатель на одну из которых необходимо передавать в функцию для вычисления элементов массива Х. Данная функция должна вызывать через указатель одну из функций ввода элементов матрицы, производить вычисление элементов массива X в соответствии с заданием и возвращать указатель на этот массив. Кроме того, программа должна содержать функцию для вывода на экран и в файл исходной матрицы и результирующего массива, а также рекурсивную функцию определения в соответствии с заданием величины Y.
В программе не должно быть глобальных переменных. Вот моя задача: Дана матрица А(5х5). Определить массив Х из 5 элементов, каждый из которых равен 1, если сумма модулей элементов соответствующего столбца больше наибольшего по модулю элемента матрицы и –1 в противном случае. Определить величину Y, как сумму положительных элементов первой строки матрицы, расположенных после первого нулевого элемента. я попыталась с этими потоками разобраться вот что получилось, правда до конца дописать так и не смогла там ошибка #include<stdio.h> #include <conio.h> #include<locale.h> #include <math.h> #define n 3 void input_keyboard(int a[n][n])//Ввод с клавиатуры { int i,j; printf("Введите элементы матрицы А: \n"); for (int i=0; i<n; i++) for (int j=0; j<n; j++) scanf ("%d", &a[i][j]); } void input_file(int(*a)[n])//Ввод из файла { FILE *fp; fp=fopen("lab3.txt","r"); if (fp) { for (int i=0;i<n; i++) for(int j=0; j<n; j++) fscanf(fp, "%d",&a[i][j]); fclose(fp); } } int form_x(int a[n][n], void (*pf)(int [n][n]))//формирую массив х(нахожу максимум сумму столбцов, и сравнить!!!!) { int sum[n], max,i,j; static int x[n]; pf(a); max=abs(a[0][0]);//нахождение максимального элемента матрицы for ( i=0; i<n; i++) for ( j=0; j<n; j++) if (abs(a[i][j]) > max) max=abs(a[i][j]); for ( j=0; j<n; j++)//сумма элеменов столбцов { sum[j]=0; for ( i=0; i<n; i++) sum[j]=sum[j]+a[i][j]; sum[j]=abs(sum[j]); } for ( j=0; j<n; j++) if (sum[j]>max) x[j]=1; else x[j]=-1; return *x; } void output(const int x[], const int a[][n] ) { int i,j; printf("Матрица А:\n"); for (i=0;i<n;i++) { for (j=0;j<n;j++) printf("%5d",a[i][j]); printf("\n"); } printf("Массив Х:\n"); for (j=0;j<n;j++) printf("%5d",x[j]); printf("\n"); } int main() { setlocale(LC_CTYPE,""); int a[n][n], x[n], c; void (*pfunc)(int [n][n]); do { printf("Ввод матрицы:\n1 - с клавиатуры\n2 - \ из файла\n"); scanf("%d",&c); } while (c!=1 && c!=2); // Присваивание указателю адреса одной из функций: switch (c) { case 1: pfunc=&input_keyboard; break; case 2: pfunc=&input_file; } output(form_x(a,x,pfunc),a); _getch(); } |
|
Отправлено: 20:49, 09-05-2013 |
Пользователь Сообщения: 123
|
Профиль | Отправить PM | Цитировать lerenia, на то, что код писали не Вы, указывают два факта:
Цитата lerenia:
Цитата lerenia:
Сформулируйте вопрос\проблему. |
||
Отправлено: 09:42, 10-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать deviance, код писала я, и дефайн (а не константу, константа будет нечто другое) я ввела 3 что бы тестировать не 25 элементов а 9, согласитесь это легче, даже я там ошибки некоторые нашла, мой код теперь выглядит таким образом
Программа должна по выбору пользователя осуществлять ввод исходной матрицы с клавиатуры или из файла. Для этого программа должна содержать две соответствующие функции, указатель на одну из которых необходимо передавать в функцию для вычисления элементов массива Х. Данная функция должна вызывать через указатель одну из функций ввода элементов матрицы, производить вычисление элементов массива X в соответствии с заданием и возвращать указатель на этот массив. Кроме того, программа должна содержать функцию для вывода на экран и в файл исходной матрицы и результирующего массива, а также рекурсивную функцию определения в соответствии с заданием величины Y. В программе не должно быть глобальных переменных. Дана матрица А(5х5). Определить массив Х из 5 элементов, каждый из которых равен 1, если сумма модулей элементов соответствующего столбца больше наибольшего по модулю элемента матрицы и –1 в противном случае. Определить величину Y, как сумму положительных элементов первой строки матрицы, расположенных после первого нулевого элемента. #include<stdio.h> #include <conio.h> #include<locale.h> #include <math.h> #define n 3 //Функция вода элементов матрицы с клавиатуры void input_matr(int a[n][n]) { int i,j; printf("Введите элементы матрицы А: \n"); for (i=0; i<n; i++) for (j=0; j<n; j++) scanf("%d", &a[i][j]); } //Функция заполнения матрицы void input_file (int (*a)[n]) { int i,j; FILE*file; file=fopen("c:\\matr.txt", "r"); if (file) { for (i=0;i<n; i++) for(j=0;j<n;j++) fscanf(file,"%d",&a[i][j]); fclose(file); } } //функция вычисления элементов мссива х int *mas_x(int(*a)[n],int *x, void (*pfunc)(int [n][n])) { pfunc(a); int sum[n], max,i,j; static int x[n]; pfunc(a); max=abs(a[0][0]);//нахождение максимального элемента матрицы for ( i=0; i<n; i++) for ( j=0; j<n; j++) if (abs(a[i][j]) > max) max=abs(a[i][j]); for ( j=0; j<n; j++)//сумма элеменов столбцов { sum[j]=0; for ( i=0; i<n; i++) sum[j]=sum[j]+a[i][j]; sum[j]=abs(sum[j]); } for ( j=0; j<n; j++) if (sum[j]>max) x[j]=1; else x[j]=-1; return *a; } //функция вывода матрицы а и х void output(const int x[], const int a[][N] ) { int i,j; printf("Матрица А:\n"); for (i=0;i<N;i++) { for (j=0;j<N;j++) printf("%5d",a[i][j]); printf("\n"); } printf("Массив Х:\n"); for (i=0;i<N;i++) printf("%5d",x[i]); printf("\n"); } int main() { setlocale(LC_CTYPE,""); int a[N][N], x[N], c; void (*pfunc)(int [N][N]); do { printf("Ввод матрицы:\n1 - с клавиатуры\n2 - \ из файла\n"); scanf("%d",&c); } while (c!=1 && c!=2); // Присваивание указателю адреса одной из функций: switch (c) { case 1: pfunc=&input_matr; break; case 2: pfunc=&input_file; } output(mas_x(a,x,pfunc),a); _getch(); int recurs(int p*, t, &sum) { if (t==0) return 0; else sum=sum+recurs(p+1, t-1, sum); } } |
Отправлено: 23:03, 10-05-2013 | #3 |
Пользователь Сообщения: 123
|
Профиль | Отправить PM | Цитировать lerenia, приведенный Вами код не компилируется ( компилятор из поставки VS сообщает о 75 ошибках ).
Прикрепите такой код, который компилируется, текстовым файлом. |
Отправлено: 00:01, 11-05-2013 | #4 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать deviance, поэтому я и написал, здесь синтаксические ошибки, которые я не понимаю, я делала с примера одномерного массива, и другой рекурсии, поэтому ошибок куча, какие могу исправляю остальные просто не понимаю что означают(
|
|
Отправлено: 00:03, 11-05-2013 | #5 |
Пользователь Сообщения: 123
|
Профиль | Отправить PM | Цитировать lerenia, чтобы исправить этот код, Вам придется сделать его читаемым. В частности:
|
Последний раз редактировалось deviance, 11-05-2013 в 02:52. Отправлено: 00:55, 11-05-2013 | #6 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать Внес изменения чтобы программа хотя бы компилировалась
#include<stdio.h> #include <conio.h> #include<locale.h> #include <math.h> #define n 3 //Функция вода элементов матрицы с клавиатуры void input_matr(int a[n][n]) { int i,j; printf("Введите элементы матрицы А: \n"); for (i=0; i<n; i++) for (j=0; j<n; j++) scanf("%d", &a[i][j]); } //Функция заполнения матрицы void input_file (int (*a)[n]) { int i,j; FILE*file; file=fopen("c:\\matr.txt", "r"); if (file) { for (i=0;i<n; i++) for(j=0;j<n;j++) fscanf(file,"%d",&a[i][j]); fclose(file); } } //функция вычисления элементов мссива х int *mas_x(int(*a)[n],int *x, void (*pfunc)(int [n][n])) { pfunc(a); int sum[n], max,i,j; // static int x[n]; pfunc(a); max=abs(a[0][0]);//нахождение максимального элемента матрицы for ( i=0; i<n; i++) for ( j=0; j<n; j++) if (abs(a[i][j]) > max) max=abs(a[i][j]); for ( j=0; j<n; j++)//сумма элеменов столбцов { sum[j]=0; for ( i=0; i<n; i++) sum[j]=sum[j]+a[i][j]; sum[j]=abs(sum[j]); } for ( j=0; j<n; j++) if (sum[j]>max) x[j]=1; else x[j]=-1; return *a; } //функция вывода матрицы а и х void output(int x[], int a[][n] ) { int i,j; printf("Матрица А:\n"); for (i=0;i<n;i++) { for (j=0;j<n;j++) printf("%5d",a[i][j]); printf("\n"); } printf("Массив Х:\n"); for (i=0;i<n;i++) printf("%5d",x[i]); printf("\n"); } int main() { setlocale(LC_CTYPE,""); int a[n][n], x[n], c; void (*pfunc)(int [n][n]); do { printf("Ввод матрицы:\n1 - с клавиатуры\n2 - \ из файла\n"); scanf("%d",&c); } while (c!=1 && c!=2); // Присваивание указателю адреса одной из функций: switch (c) { case 1: pfunc=&input_matr; break; case 2: pfunc=&input_file; } output(mas_x(a,x,pfunc),a); _getch(); int recurs(int *p, int t, int *sum) { if (t==0) return 0; else sum=sum+recurs(p+1, t-1, sum); } } |
------- Последний раз редактировалось AMDBulldozer, 11-05-2013 в 02:50. Отправлено: 02:39, 11-05-2013 | #7 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:49, 11-05-2013 | #8 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать Цитата lerenia:
Вообще-то, до сего момента я наивно полагал, что смысл подпрограммы должен быть понятен из исходного текста. И только теперь до меня дошло, что бывают подпрограммы для понимания которых необходимо знать условия задачи! Цитата lerenia:
P.S. В этой теме Вы сами жаловались, что не можете исправить ошибки компиляции. Я Вам их исправил. Благо на это потребовалось меньше времени, чем на прочтение условий Вашей задачи. После этого мне тут же сообщили, что я не разбираюсь в C. Если подобный вид помощи Вам не нужен - не вопрос. Торжественно клянусь никогда больше не писть в Ваших темах! |
||
------- Последний раз редактировалось AMDBulldozer, 11-05-2013 в 18:06. Отправлено: 17:19, 11-05-2013 | #9 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата AMDBulldozer:
Цитата AMDBulldozer:
Цитата AMDBulldozer:
А мистер deviance, вообще назвал мою работу плагиатом и вообще не увидел ошибок сказал что там все правильно, каждый раз когда пишу на это форуме либо указывают на тупость либо хамят, это местная фишка этого форума? |
|||
Отправлено: 18:06, 11-05-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Ввод с клавиатуры значения в переменную | river123 | Скриптовые языки администрирования Windows | 8 | 28-05-2018 00:17 | |
Разное - [решено] Массивы. Ввод параметра для строк и столбцов с клавиатуры,а заполнение матрицы random | lenaustkz84 | Программирование и базы данных | 13 | 19-01-2012 09:03 | |
C/C++ - [решено] Потоковый ввод/вывод | котвася | Программирование и базы данных | 4 | 06-08-2010 10:39 | |
C/C++ - Ввод формул | Doom77 | Программирование и базы данных | 7 | 05-11-2009 00:49 | |
Ввод строки с клавиатуры | DJ@XON | Программирование в *nix | 1 | 06-07-2009 22:25 |
|