Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2011, 01:46   #31
Вечно грустная...
Пользователь
 
Аватар для Вечно грустная...
 
Регистрация: 04.02.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от 0479 Посмотреть сообщение
Да и вправду компилит ток alloc над stdio.h заменить убрать clrscr и исправить printf там что т типа pritnf написано.И ещё в ошибке с константой там над заменить ' ' на " ".Ещё в lab2.c исправить chcoord на ch_coord.Ток всё равно написано криво.
clrscr() совсем убрать? и так оставить?
Хочу жить... а не существовать...
Вечно грустная... вне форума Ответить с цитированием
Старый 05.02.2011, 01:47   #32
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Ну держи )

Главная программа:

Код:
#include "lab2.h"
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
#include <conio.h>
void main(){
int R; /* размерность */
int i, j; /* номера строки и столбца */
int m; /* значения элемента */
int op; /* операция */
setlocale(LC_ALL,"Russian");
printf("Введите размерность матрицы >"); scanf("%d",&R);
/* создание матрицы */
if ( creat_matr (R) ) {
printf("Ошибка создания матрицы\n");
exit(0);
}
/* заполнение матрицы */
for ( m=j=0; j<R; j++)
for ( i=0; i<=j; i++)
write_matr(j,i,++m);
while(1) {
/* вывод матрицы на экран */
for (j=0; j<R; j++) {
for (i=0; i<R; i++)
printf("%3d ",read_matr(j,i));
printf("\n");
}
printf("0 - выход\n1 - чтение\n2 - запись\n>");
scanf("%d",&op);
switch(op) {
case 0:
if (close_matr()) printf("Ошибка при уничтожении\n");
else printf("Матрица уничтожена\n");
exit(0);
case 1: case 2:
printf("Введите номер строки >");
scanf("%d",&j);
printf("Введите номер столбца >");
scanf("%d",&i);
if (op==2) {
printf("Введите значение элемента >");
scanf("%d",&m);
write_matr(j,i,m);
if (L2_RESULT<0) printf("Ошибка записи\n");
}
else {
m=read_matr(j,i);
if (L2_RESULT<0) printf("Ошибка считывания\n");
else printf("Считано: %d\n",m);
}
printf("Нажмите клавишу\n"); getch();
break;
}
}
}

lab2.c:

Код:
#include <stdlib.h>
static int NN;
static int SIZE;
static int *m_addr=NULL;
static int lin(int, int);
static char ch_coord(int, int);
int L2_RESULT;

/* Выделение памяти под сжатую матрицу */
int creat_matr ( int N ) {
/* N - размер матрицы */
NN=N;
SIZE=N*(N-1)/2+N;
if ((m_addr=(int *)malloc(SIZE*sizeof(int))) == NULL )
return L2_RESULT=-1;
else
return L2_RESULT=0;
/* Возвращает 0, если выделение прошло успешно, иначе -1 */
}

/* Уничтожение матрицы (освобождение памяти) */
int close_matr(void) {
if ( m_addr!=NULL ) {
free(m_addr);
m_addr=NULL;
return L2_RESULT=0;
}
else return L2_RESULT=-1;
/* Возвращает 0, если освобождение пршло успешно, иначе - -1 */
}
/*********************************** ************************/
/* Чтение элемента матрицы по заданным координатам */
int read_matr(int x, int y) {
/* x, y -координати (строка, столбец) */
if ( ch_coord(x,y) ) return 0;
/* Если координаты попадают в нулевой участок - возвращается
0, иначе - применяется функция линеаризации */
return (x < y) ? 0 : m_addr[lin(x,y)];
/* Проверка успешности чтения - по переменной
L2_RESULT: 0 - без ошибок, -1 - была ошибка */
}

/*********************************** **************************/
/* Запись элемента матрицы по заданным координатам */
int write_matr(int x, int y, int value) {
/* x, y -координати, value - записываемое значение */
if ( ch_coord(x,y) ) return 0;
/* Если координаты попадают в нулевой участок - записи нет,
иначе - применяется функция линеаризации */
if ( x < y ) return 0;
else return m_addr[lin(x,y)]=value;
/* Проверка успешности записи - по L2_RESULT */
}

/*********************************** *************************/
/* Преобразование 2-мерних координат в линейную */
/* (вариант 3) */
static int lin(int x, int y) {
int i, n;
n=0;
for (i=0; i<x; i++) 
n+=(i+1);
return (n+y);
}

/*********************************** ****************************/
/* Проверка корректности обращения */
static char ch_coord(int x, int y) {
if ( ( m_addr==NULL ) ||
( x>=SIZE ) || ( y>=SIZE ) || ( x<0 ) || ( y<0 ) || (x<y))
/* Если матрица не размещена в памяти, или заданные
координаты выходят за пределы матрицы */
return L2_RESULT=-1;
return L2_RESULT=0;
}
Son Of Pain вне форума Ответить с цитированием
Старый 05.02.2011, 01:49   #33
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от 0479 Посмотреть сообщение
Да и вправду компилит ток alloc над stdio.h заменить убрать clrscr и исправить printf там что т типа pritnf написано.И ещё в ошибке с константой там над заменить ' ' на " ".Ещё в lab2.c исправить chcoord на ch_coord.Ток всё равно написано криво.

А еще, внезапно - кроме синтаксических ошибок, выявляемых компилятором, существуют логические, которые он не обнаруживает. И их там тоже весьма много )
Son Of Pain вне форума Ответить с цитированием
Старый 05.02.2011, 01:50   #34
Вечно грустная...
Пользователь
 
Аватар для Вечно грустная...
 
Регистрация: 04.02.2011
Сообщений: 34
По умолчанию

0479, Там у меня просит ввести размерность массива дальше не пашет (((( Почему?

Son Of Pain оооо спасибо вам большое!!! Я уж думала что это никогда не закончится)))))))) Как же тяжело прогером быть
Спасибо еще раз всем кто пытался помочь)!
Хочу жить... а не существовать...

Последний раз редактировалось Stilet; 05.02.2011 в 14:06.
Вечно грустная... вне форума Ответить с цитированием
Старый 05.02.2011, 10:51   #35
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Son Of Pain
lab2.c:
Код:
...
/*********************************** *************************/
/* Преобразование 2-мерних координат в линейную */
/* (вариант 3) */
static int lin(int x, int y) {
   int i, n;
   n=0;
   for (i=0; i<x; i++) 
      n+=(i+1);
   return (n+y);
}
...
Дело Гаусса живёт и процветает! :D

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Код:
...
/*********************************** ****************************/
/* Проверка корректности обращения */
static char ch_coord(int x, int y) {
   if ( ( m_addr==NULL ) ||
      ( x>=SIZE ) || ( y>=SIZE ) || ( x<0 ) || ( y<0 ) || (x<y))
/* Если матрица не размещена в памяти, или заданные
координаты выходят за пределы матрицы */
      return L2_RESULT=-1;
   return L2_RESULT=0;
}
...
NN
Vago вне форума Ответить с цитированием
Старый 05.02.2011, 12:31   #36
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А, да, точно, там же nn
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в сглаженой матрице найти сумму модулей элементов расположенных ниже главной диагонали Sergeo_89 Паскаль, Turbo Pascal, PascalABC.NET 8 07.12.2010 00:02
Массив, нахождение макс элемента ниже главной диагонали L3zh1Y Помощь студентам 2 15.05.2010 13:36
Вычисление сумм элементов матрицы А размера n x n, лежащих выше, ниже и на главной диагонали Tomoa Microsoft Office Word 8 04.04.2010 20:18
Маx элемент ниже главной диагонали Отчаявшаяся Помощь студентам 2 16.11.2009 18:19
Найти сумму парных элементов матрицы v[4][4].Расположенных ниже главной диагонали. Black_Angel91 Помощь студентам 11 21.04.2009 20:51