неправильно работает программа

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Respected
Сообщения: 15
Зарегистрирован: 08 мар 2013, 07:09

посмотрите кому не лень код, что я сделал неправильно?) записываю в первый файл размерность матрицы, и из второго файла хочу в начале просмотреть исходную матрицу, затем результатирующую матрицу (в данной случае транспонированную). исходную матрицу из второго файла вроде выводит, а результат не выводит почему то!

Код: Выделить всё

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
 
//------------GLOBAL PARAMETRI-----------------------------
 
FILE *f,*f1,*f2;
int k;
int a[30][30], i, j, r;
 
//------------------FUNCTIONS------------------------------
void menu();
void create();
void view();
void read();
//------------------------------------------------
void main()
{
    menu();
}
 
//------------------MENU-----------------------------------
 
void menu()
{
     int c;
     clrscr();
     cout<<"||==============================||"<<endl;
     cout<<"||            MENU              ||"<<endl;
     cout<<"||==============================||"<<endl;
     cout<<"|| 1.Create file                ||"<<endl;
     cout<<"|| 2.Read                       ||"<<endl;
     cout<<"|| 3.Prosmotr                   ||"<<endl;
     cout<<"|| 4.Exit                       ||"<<endl;
     cout<<"||==============================||"<<endl;
 
     cout<<"\nViberite deistvie: ";
     do
     {
        c=getch();
        switch(c)
        {
            case 49: create();
            case 50: read();
            case 51: view();
            case 52: exit(0);
        }
     }
     while((c<49)||(c>52));
}
 
//--------------------READING-----------------------------
 
void read()
{
      char fname1[10], fname2[10];
      clrscr();
      cout<<"Vvedite imya faila dlya read: ";
      gets(fname1);
      f1=fopen(fname1, "r");
      cout<<"Vvedite imya faila dlya zapisi: ";
      gets(fname2);
      f2=fopen(fname2, "w");
      fscanf(f1, "%d", &k);
      for(i=0; i<k; i++)
            for(j=0; j<k; j++)
                 fscanf(f1, "%d", &a[i][j]);
      for(j=0; j<k; j++)
          {
             r=a[i][j];
             a[i][j]=a[j][i];
             a[j][i]=r;
          }
      cout<<"\nTransponirovannaya matrica:\n\n";
      for(i=0; i<k; i++)
            for(j=0; j<k; j++)
                      fprintf(f2, "%d", a[j][i]);
      cout<<"\nKONEC";
      fclose(f1);
      fclose(f2);
      getch();
      menu();
}
 
//----------------ZAPIS----------------------------
 
void create()
{
     char fname1[10];
     clrscr();
     cout<<"Vvedite imya faila: ";
     gets(fname1);
     f1=fopen(fname1, "w");
     randomize();
     cout<<"Razmernost matrici: k=";
     cin>>k;
     fprintf(f1, "%d ", k);
     for(i=0; i<k; i++)
          for(j=0; j<k; j++)
                {
                      a[i][j]=random(30);
                      fprintf(f1, "%d ", a[i][j]);
                }
     cout<<endl<<"Zapisano v fail!";
     fclose(f1);
     getch();
     menu();
}
//-----------------------------------------------
void view()
{
      char fname[10];
      clrscr();
      cout<<"Vvedite imya faila dlya read: ";
      gets(fname);
      f=fopen(fname, "r");
      fscanf(f, "%d", &k);
      cout << "k=" << k << endl;
      for(i=0; i<k; i++)
            for(j=0; j<k; j++)
                 fscanf(f, "%d", &a[i][j]);
      fclose(f);
      cout<<" matrica:"<<endl;
     for(i=0; i<k; i++)
         {
            for(j=0; j<k; j++)
                cout << a[i][j] << "   ";
            cout << endl;
         }
      cout<<"\nKONEC";
      getch();
      menu();
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

По той причине, что на момент выполнения вот этого цикла i равно k, то этот цикл шерстит данные вне матрицы, что чревато нехорошими вещами:

Код: Выделить всё

      for(j=0; j<k; j++)
          {
             r=a[i][j];
             a[i][j]=a[j][i];
             a[j][i]=r;
          }
Предлагаю убрать его, так матрица всё равно транспонируется за счёт смены индексов при выводе (а).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
MarishafealaSoke
Сообщения: 90
Зарегистрирован: 03 май 2013, 22:15
Откуда: Россия
Контактная информация:

Скоро лето!
День добрый пользователи форума forum.developing.ru, сегодня пользователь под ником Karolino4kaCer просила меня сообщить последние новинки Джемпер Replay в 2013 году, а так же брюк бренда Replay, так вот наконец то нашла время для этого, админы прошу не удалять, а перенести в соответствующий раздел, если я ошиблась например Мужская одежда/Джемперы и свитеры
))) всех обнимаю


Джемпер Replay стоимость 4900 РУБ..
Если Вам понравились Джемпер Replay, нажмите кнопку "GO!" ниже чтоб узнать где выгодней всего купить Джемпер Replay бренда Replay

Изображение Изображение


посмотрите другую модную одежду

Категория: Мужская одежда/Джемперы и свитеры
купить
Бренд: купить Джемпер Replay Replay

А вот еще ключевые слова по которым люди ищут Джемпер Replay Replay:
- купить Джемпер Replay Replay
- заказать Джемпер Replay Replay
- цена Джемпер Replay Replay
- интернет магазин Мужская одежда/Джемперы и свитеры
Джемпер Replay Replay

- фото Джемпер Replay Replay
- Джемпер Replay 2012
- интернет магазин Джемпер Replay Москва
- новинки Джемпер Replay 2013
- модные Джемпер Replay 2013
- Джемпер Replay для свадьбы
- купить Джемпер Replay Москва

- купить Джемпер Replay Киев
- купить Джемпер Replay Санкт-петербург
- интернет магазин Джемпер Replay Москва


купить одежду
заказать одежду
купить обувь
заказать обувь
купить женскую одежду
купить мужскую одежду
заказать мужскую одежду
заказать женскую одежду
купить сумку
заказать сумку
купить одежду через интернет
заказать одежду через интернет
купить одежду дешево
где дешево купить одежду




#$#
MarishafealaSoke
Сообщения: 90
Зарегистрирован: 03 май 2013, 22:15
Откуда: Россия
Контактная информация:

Скоро лето!
Hello пользователи форума forum.developing.ru, сегодня пользователь под ником Karolino4kaCer просила меня сообщить супермодные новинки Джемпер Replay в 2013 году, а так же брюк бренда Replay, так вот наконец то нашла время для этого, админы прошу не удалять, а перенести в соответствующий раздел, если я ошиблась например Мужская одежда/Джемперы и свитеры
))) всех целую


Джемпер Replay стоимость 4900 РУБ..
Если Вам нравится Джемпер Replay, нажмите кнопку "GO!" ниже чтоб узнать где выгодней всего купить Джемпер Replay бренда Replay

Изображение Изображение


посмотрите другую красивую одежду

Категория: Мужская одежда/Джемперы и свитеры
купить
Бренд: купить Джемпер Replay Replay

А вот еще ключевые слова по которым люди ищут Джемпер Replay Replay:
- купить Джемпер Replay Replay
- заказать Джемпер Replay Replay
- цена Джемпер Replay Replay
- интернет магазин Мужская одежда/Джемперы и свитеры
Джемпер Replay Replay

- фото Джемпер Replay Replay
- Джемпер Replay 2012
- интернет магазин Джемпер Replay Москва
- новинки Джемпер Replay 2013
- модные Джемпер Replay 2013
- Джемпер Replay для свадьбы
- купить Джемпер Replay Москва

- купить Джемпер Replay Киев
- купить Джемпер Replay Санкт-петербург
- интернет магазин Джемпер Replay Москва


купить одежду
заказать одежду
купить обувь
заказать обувь
купить женскую одежду
купить мужскую одежду
заказать мужскую одежду
заказать женскую одежду
купить сумку
заказать сумку
купить одежду через интернет
заказать одежду через интернет
купить одежду дешево
где дешево купить одежду




#$#
MarishafealaSoke
Сообщения: 90
Зарегистрирован: 03 май 2013, 22:15
Откуда: Россия
Контактная информация:

Вот разговор будет об этом Эта поза считается одной из непредсказуемо? А так ли друзья желали? начавшийся лет десять назад по этому поводу
которые помогут вам на такой
Ответить