Программа возводит в степень сумму двух матриц,одна из которых единичная(на главной диагонали стоят единицы) Code: #include <stdio.h> #include <conio.h> #include <locale.h> #include<stdlib.h> int main () { setlocale(LC_ALL,"Rus");//русский язык int i, j, n;//переменные char nameInput[30];//имя файла(длина) char nameOutput[30];//имя файла(длина) FILE *f1,*f2;//используем 2 файла printf("Введите имя файла: "); scanf("%s",&nameInput); f1=fopen(nameInput,"w");//открываем файл1 printf("Введите порядок матриц:\n"); printf("n = "); scanf("%u", &n); int E[n][n];//единичная матрица int A[n][n]; //квадратичная матрица int resultat[n][n];//сумма 2ух матриц в квадрате for (i=0; i<n; i++)//цикл заполнения единичной матрицы for (j=0; j<n; j++) { if (i==j) E[i][j]=1; else E[i][j]=0; } for (i = 0; i < n ; i++)//цикл ввода массива { for (j = 0; j < n ; j++) { printf("A[%d][%d] = ", i, j); //На экран выводится 'X[i][j] = ' scanf("%d", &A[i][j]);//вводим с клавиатуры целые числа } } printf("\nВведите имя файла с результатом: "); scanf("%s",&nameOutput); f2=fopen(nameOutput,"w");//открываем файл2 for (i=0; i<n; i++) //цикл вычесления результативной матрицы { for (j=0; j<n; j++) { A[i][j]*=A[i][j]; resultat[i][j]=(E[i][j]+A[i][j]);//получение резудьтативной матрицы fprintf(f2,"%d ",resultat[i][j]);//сохранение данных результата } fprintf(f2,"\n"); } printf("\n"); //Переход на следующую строку printf("\tОперация выполнена(результат)\n"); for (i = 0; i < n ; i++) //цикл вывода результата на экран монитора { printf("\n\n"); //Переход на следующую строку for (j = 0; j < n ; j++) { printf(" %i", resultat[i][j]); //На экран выводится результат нашего ввода } } fclose(f1);//закрытие файла1 fclose(f2);//закрытие файла2 getch(); //Экран не закрывается, пока не нажата любая клавиша } Не могу понять следующее: 1)нужно чтобы массив заполнялся с клавиатуры 2)и в то же время реализовать считывание из файла f1 и запись в файл f2(запись сделал) Как это сделать? сейчас в программе массив заполняется с клавиатуры выводит результат на экран и в файл f2 имя которого введешь с клавиатуры
не я знаю как работать с файлами,просто надо и вручную вводить и из файла,выходит надо какое то меню делать "Нажмите 1 ручной ввод нажмите 2 из файла" или как иначе
как сделать чтобы программа сама определяла размерность матрицы из файла(используется динамический массив)?????
Вот этот: http://tinyurl.com/5tlsnoc Немного вот этого: http://tinyurl.com/5w76jct И обязательно вот этот: http://tinyurl.com/68fmlas Уж извини, но для того, чтобы писать программы нужно хотя бы примерно представлять себе алгоритм работы будущей программы, а ты кажется и слова такого не знаешь... Не ленись, почитай литературу, набросай на бумажечке блок-схемку или алгоритм, потихоньку реализуй его. Code: например твою задачу можно разбить изначально на 3: определение размерности чтение из файла массива запись массива в файл Определение размерности можно разбить на 2 части (тут еще важно в каком виде ты массив сохраняешь в текстовом или еще в каком?) определить количество столбцов (если в текстовом, то считай количество разделителей между числами) определить количество строк (если в текстовом то просто считай строки в файле) Потом устанавливаешь размерность и читаешь из файла. По ходу дела задавай вопросы, никто же не против. Но писать программу за тебя никто не будет!
мы перешли на личные оскорбления? Но мы ведем разговор не обо мне, а о тебе, я ведь пытался тебе помочь в другой теме, но что я могу сделать, если ты даже не знаешь синтаксиса языка и его операторов? Ты хочешь, чтобы тебе под твою задачу дали операторы, потом объяснили как с ними работать, потом нашли ошибки в твоей или написали за тебя программу. P.S. поверь, знаю. не в С, потому как давно с ним не работал, но ты должен понимать, что знает все. Знает ответ на любой вопрос, а тем более такие примитивные. P.P.S. Внимательно перечитай мое предыдущее сообщение, пока ты тут пытался меня обидеть я тебе там алгоритм накидал, может поможет...
Лично я вообще не вижу связи между словами "динамический массив" и "определить размерность". Динамический массив - это всего лишь память, выделенная с помощью malloc в случае Си.
я не кого не оскорблял(или не хотел если получилось),но лучше ничего не писать чем в такой форме. мне бы просто имя оператора,дальше я бы сам нашел,в гугле полно проблем как у меня и нигде не дано четкого ответа
Ты скажи, какой именно оператор тебе нужен? Что ты хочешь сделать? "Определить размерность динамического массива" - это бред в контексте программирования на Си.
Да оператор то тут ни при чем, вот в чем вопрос. а) Тут нужно понимать последовательность действий б) Формат, в котором хранится массив в файле вот для случая а) ты думаешь мне нужно: а.1) считать строку из файла а.2) посчитать количество значений в нем а.3) установить размерность массива (не знаю как в С, в Delphi это нужно делать) Допустим а.1) и а.3) ты знаешь как сделать, но не знаешь как а.2) ты думаешь а.2.1) (допустим) у меня значения разделены пробелом и перед первым значением и после последнего пробелов нет, значит чтобы посчитать количество значений мне нужно узнать количество пробелов в строке и добавить 2 делаешь запрос в гугл: "посчитать количество символов в строке" и ищешь при помощи каких операторов это делается и узнаешь количество столбцов. Т.е. научись сложную задачу делить на набор простых!
Сколько много текста. А что мешает для решения задачи считывания просто записывать в файл первые два DWORD'а - размеры матрицы, а дальше все остальные DWORD'ы - непосредственно данные матрицы. Читать-писать сразу в двоичном виде и не трахаться с преобразованиями и просчетами.