Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Рушится программа


Автор: Garcian 23.12.2008, 22:28
Здравствуйте! У Меня была задача урорядочить елементы 2х массивов в порядке: первый эл-т к последнему, втрой к предпоследнему. Я это реализовал:
Код

#include <fstream.h>
#include <iostream.h>
#include <math.h>
#include <conio.h>
int Mas ( int *A, int *B, int *C, int n){
    for (int i = 0; i<n; i++){ 
    if (i==0) {*(C+i) = *(A+i); *(C+1) = *(B+n-1); 
    }
    else {*(C + 2*i ) = *(A + i);
    *(C +2*i+1 ) = *(B + n - i-1);}
    } 
}

int Inp (int *A, int *B,  int n/*, ifstream *R*/){
    ifstream f;
    f.open("C:\\Dev-Cpp\\LB5vhod.txt", ios::in);
    /*if(f){
          if(f.eof()){
                      cout << "Net el-v!";
                      getch();
                      exit(1);
                      }
          int m1;
          f >> m1;
          n = m1;
          if (f.eof())  //åñëè êîíåö ôàéëà - òî âûâîä ñîîáùåíèÿ îá îøèáêå è çàâåðøåíèå ïðîãðàììû
                {
                        cout << "Ne hvataet elementov!" << endl;  //âûâîä ñîîáùåíèÿ îá îøèáêå
                        getch();  //ïàóçà, ÷òîáû ìîæíî áûëî ïðî÷èòàòü ñîîáùåíèå îá îøèáêå
                        exit(1);   //çàâåðøåíèå îñíîâíîé ôóíêöèè main
                }
          }            
     */         
    
    for (int i = 0; i<n; i++) {f >> *(A+i);}
    for (int i = 0; i<n; i++) {f >> *(B+i);}
    f.close();
}

int File (int *A, int *B, int *C, int n, ofstream *R){
   
    *R << "Por9doK: "<<endl;
    for (int i = 0; i<2*n; i++) {
   
    *R<< *(C+i) << ' '<<endl; }          }

int main () {
int n = 5;
int A[5], B[5], C[10];
int i;

ofstream R;
R.open ("C:\\Dev-Cpp\\Lab5.txt", ios::out);
Inp (&A[0], &B[0], n);
Mas (&A[0], &B[0], &C[0], n);
File ( &A[0], &B[0], &C[0], n, &R);

}
              

собственно, проблема возникла, когда попросили сделать проверку (вводили в программу меньше 9 элементов или вообще ничего не вводили - программа рушалась). Я пробовал выполнить проверку, сумел только на 0 (и то при нормальном вводе прога перестала работать). Помогите с выводом в файл, пожалуйста smile !

Модератор: Пожалуйста, один топик - один вопрос.

Автор: Garcian 24.12.2008, 21:03
Есть идеи??? smile  smile 

Автор: Garcian 24.12.2008, 21:32
 smile , я же не случайно добавлял фстрим) Но только не выходит ничего smile . Всего раз бы посмотреть как это профессионально делается
........
ой, ответ даже не мне адресован был  smile 

Автор: bsa 25.12.2008, 12:47
Garcian, как твоя программа узнает, сколько данных она загрузила? Функция Inp() теряет эту информацию. Как ты можешь сортировать что-то дальше, когда не знаешь сколько сортировать?

Более того, ты написал какое-то странное условие задачи. Первый элемент чего, к последнему чему?

Автор: Снежанна 25.12.2008, 18:06
Напишу подробнее (видимо он забыл дописать). Даны два массива А и В размерностью N. Сформировать массив С размерностью 2*N так, чтобы элементы массивов А и В выводились в следующем порядке:
А1, Вn, А2, Bn-1, ..., An, B1. 

Автор: Rififi 25.12.2008, 18:33
Снежанна, 
Даны два массива А и В размерностью N. Сформировать массив С размерностью 2*N так, чтобы элементы массивов А и В выводились в следующем порядке:
А1, Вn, А2, Bn-1, ..., An, B1.  


Код
template <typename T, const size_t N>
void merge(const T (&arr1)[N], const T (&arr2)[N], T (&arr3)[N*2])
{
    for (size_t i=0; i<N; i++)
    {
        arr3[i*2 + 0] = arr1[i];
        arr3[i*2 + 1] = arr2[N-i-1];
    }
}

int main()
{
    const size_t N = 4;
    int A[N] = {1, 2, 3, 4};
    int B[N] = {5, 6, 7, 8};
    int C[2*N] = {0};

    merge(A, B, C);
    return (0);
}

Автор: Снежанна 25.12.2008, 21:32
Rififi, 
его проблема заключалась не в этом!) С программой у него все хорошо, только на пустой файл не проверяется и на меньшее число элементов!

Автор: Garcian 25.12.2008, 21:34
Снежанна, спасибо, конечно, но я мог бы и сам свою проблему описать smile 

Автор: bsa 29.12.2008, 12:16
Цитата(Garcian @ 25.12.2008,  21:34)
Снежанна, спасибо, конечно, но я мог бы и сам свою проблему описать smile

А почему ты сразу этого не сделал?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)