Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > как исправить ошибку?(работа с файлом)


Автор: logoritm 24.12.2011, 21:04
дано задание: Создать файл целых чисел. Поменять местами первую и последнюю компоненты файла. Распечатать файл до и после преобразования. файл последовательного доступа.
я записываю числа в массив и в файл:
Код

Введите числа:
1
2
3
4
5
 
вывожу содержимое массива и файла на экран, - все здорово, все правильно
 
Код

проверка - массив:
           1           2           3           4           5
 Файл до обработки:
           1
           2
           3
           4
           5

но  после этого проверяю содержимое исходного массива:
Код

проверка - массив:
           2           3           4           5           5

подскажите, как исправить smile  вот код программы:
Код

      program FINOUT
    integer N, i, UNIT, temp
    parameter (UNIT = 1, N = 5)
    integer, dimension(N) :: mas
    
    open(UNIT, file='Lab3.txt', access = 'sequential')
    print*,'Введите числа:'
    do i = 1, N
        read*, mas(i)
        write(UNIT,*)(mas(i))
    end do
    close(UNIT)

    print*,'проверка - массив:'
    write (*,*)(mas(i),i = 1,N)
    
    print*,'Файл до обработки:'
    i = 0
    open(UNIT, file='Lab3.txt',status = 'old',access = 'sequential')
       do 
           read(UNIT, *, iostat = IOS) mas(i)
           if(IOS .ne. 0) exit ! попытка чтения за "концом файла"
            print *,mas(i)    
           i = i + 1
    enddo
    rewind UNIT
    close(UNIT)

    print*,'проверка - массив:'
    write (*,*)(mas(i),i = 1,N)

c    обмен первой и последней компоненты:
    print*,'mas(1)= ',mas(1)
    temp = mas(1)
    mas(1) = mas(N)
    mas(N) = temp

c    запись в файл измененного массива:
    open(UNIT, file='Lab3.txt', access = 'sequential')
    do i = 1, N
        write(UNIT,*)(mas(i))
    end do
    close(UNIT)

c    вывод файла после обработки
    print*,'Файл после обработки:'
    i = 0
    open(UNIT, file='Lab3.txt')
       do 
           read(UNIT, *, iostat = IOS) mas(i)
           if(IOS .ne. 0) exit ! попытка чтения за "концом файла"
            print *,mas(i)    
           i = i + 1
    enddo
    close(UNIT)
    
    
      end

Автор: FCM 25.12.2011, 14:19
Перед некоторыми циклами стоит i=0, а затем в первой итерации обращение к mas(i) ...

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