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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 16:25   #1
KamBall
 
Регистрация: 23.05.2009
Сообщений: 5
По умолчанию Как работает?!

Ребят, можете рассказать как работает вот эта программа, и если есть ошибки, то подправить, очень прошу...

PHP код:
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов
Переставляя столбцы заданной матрицырасположить их в соответствии с ростом характеристик.
Найти сумму элементов в тех столбцахкоторые содержат хотя бы один отрицательный элемент.*/
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//#include <time.h>
int _tmain(int argc_TCHARargv[])
{
//{time_t t;time(&t);
FILE *f_in, *f_out;
unsigned rows,cols,i,j;
int temp1,temp2,temp3,summa=0;
f_in=fopen("kz9_in.txt","r");
f_out=fopen("kz9_out.txt","w");
//fprintf(f_out,"             %s", ctime(&t));
fscanf(f_in,"%i%i",&rows,&cols);
fprintf(f_out,"rows %i cols %i\n",rows,cols);
unsigned **pm=new unsigned*[cols];
for (
i=0;i<cols;i++)
{
    
pm[i]=new unsigned[rows];
}
for (
i=0;i<rows;i++)
{
    for (
j=0;j<cols;j++)
    {
        
fscanf(f_in,"%i",&pm[i][j]);
    }
}
fprintf(f_out,"m[][]\n");
for (
i=0;i<rows;i++)
{
    for (
j=0;j<cols;j++)
    
printf("%4d",pm[i][j]); //-----------
    
printf("\n");
}
for (
i=0;i<rows;i++)
{
    for (
j=0;j<cols;j++)
    
fprintf(f_out,"%4d",pm[i][j]); //-----------
    
fprintf(f_out,"\n"); 
}
long *sum=new long[cols];
getch();
for (
i=0;i<rows;i++)
{
    
    for (
j=0j<cols;j++) 
    {
        
sum[j]=0;
        if (
abs(pm[i][j])!=pm[i][j])
        {
            
printf("sum[j]=%4d",sum[j]);
            
printf("\n");
            if ((
pm[i][j]%2)!=0)
            
//if (div(pm[j][i],2)!=0)
            
{
                
sum[j]+=abs(pm[i][j]);
                
printf("sum2[j]=%4d",sum[j]);
                
printf("\n");
            }
        }
    }
}
for(
i=0;i<cols;i++)
{
    
fprintf(f_out,"result sum=%4d\n",sum[i]);
    for(
j=0;j<rows;j++)
        
fprintf(f_out,"%4d",pm[j][i]); //------
        
fprintf(f_out,"\n");
}
getch();
long temp_s;
int nmintemp_pm;
for (
i=0;i<(cols-1);i++)
{
    
nmin=i;
    for (
j=(i+1);j<cols;j++)
        if (
sum[j]<sum[nmin]) nmin=j;
    
temp_s=sum[i];
    
temp1=pm[0][i];
    
temp2=pm[1][i];
    
temp3=pm[2][i];
    
pm[0][i]=pm[0][nmin];
    
pm[1][i]=pm[1][nmin];
    
pm[2][i]=pm[2][nmin];
    
sum[i]=sum[nmin];
    
sum[nmin]=temp_s;
    
pm[0][nmin]=temp1;
    
pm[1][nmin]=temp2;
    
pm[2][nmin]=temp3;

    for (
j=0;j<8;j++)
        
fprintf(f_out,"sum[j]=%4d\n",sum[j]);
/*    for (j=0;j<cols;j++)
    {
        temp_pm=pm[i][j];
        pm[i][j]=pm[nmin][j];
        pm[nmin][j]=temp_pm;
    }*/
}
fprintf(f_out,"out result\n");
for(
i=0;i<rows;i++)
{
for(
j=0;j<cols;j++)
fprintf(f_out,"%4d",pm[i][j]); //------
fprintf(f_out,"\n"); //------
}
for (
i=0;i<cols;i++)
    
    for(
j=0;j<rows;j++)
        if(
pm[i][j]<0)
            for(
int k=0;k<rows;k++){
                
summa+=pm[i][k];
                
k=rows;        
            }
fprintf(f_out,"summa=%6i\n",summa);
fclose(f_in);
fclose(f_out);
//time(NULL);
for(i=0;i<cols;i++)
delete [] pm[i];
delete [] pm;
delete sum;
return 
0;

KamBall вне форума Ответить с цитированием
Старый 01.06.2009, 18:34   #2
KamBall
 
Регистрация: 23.05.2009
Сообщений: 5
По умолчанию

Содержание файла kz9_in.txt :
Цитата:
3 8
-44 55 -12 42 94 -18 06 67
54 12 46 94 18 06 67 44
-11 66 -13 -27 -33 -99 -23 -49
Вот тут ошибку выдает, уже в конце...
Цитата:
//time(NULL);
for(i=0;i<cols;i++)
delete [] pm[i];
delete [] pm;
delete sum;
Подскажите пожалуйста. Я так понимаю, что прога и без этого работает, но для чего последние строчки?

Последний раз редактировалось KamBall; 01.06.2009 в 18:47.
KamBall вне форума Ответить с цитированием
Старый 01.06.2009, 19:23   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

У вас rows - количество строк, cols - количество столбцов.
Вы выделяете память под матрицу cols x rows:
Код:
unsigned **pm=new unsigned*[cols]; 
for (i=0;i<cols;i++) 
{ 
    pm[i]=new unsigned[rows]; 
}
А используете как матрицу rows x cols:
Код:
for (i=0;i<rows;i++) 
{ 
    for (j=0;j<cols;j++) 
    { 
        fscanf(f_in,"%i",&pm[i][j]); 
    }
Отсюда следует: подкорректируйте во всех циклах (где надо) границы и индексы.

Последние строчки - для освобождения памяти.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает процессор? Иллидан Компьютерное железо 13 17.07.2011 14:04
Как работает CMS? PSix1_73 WordPress и другие CMS 1 17.05.2009 14:52
Как работает железо ПК +Sergey+ Компьютерное железо 11 09.03.2009 08:02
Как работает Include ToxaRUS Паскаль, Turbo Pascal, PascalABC.NET 2 20.01.2009 16:04
Как работает win rar? Altera Свободное общение 2 30.03.2008 08:05