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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2015, 13:24   #1
spike_1
Новичок
Джуниор
 
Регистрация: 28.02.2015
Сообщений: 2
По умолчанию В командной строке задается имя входного файла и целое число N. Распечатать последние N строк указанного файла.

Переведите, пожалуйста, программу с С++ на Паскаль
Код:
#include<iostream>
#include<string>
#include<fstream>
#include<assert.h>
 
int main(int argc, char* argv[]){
    //перехватываем аргументы командной строки:
    assert(argc == 3); 
    char file_name[255];        
    int N;                      
    std::strcpy(file_name,*(argv+1));
    N = atoi(*(argv+2));
    assert(N>0);
    
    //подсчитываем количество строк в фаиле, возможно есть специальная функция,
    //но я её не знаю:
    std::ifstream fin(file_name);
    assert(fin != 0);
    char fline[256];
    int lcounter = 0;
    while(fin.getline(fline,256))   lcounter++;
    std::cout<<"Количество строк: "<<lcounter<<std::endl;
    
    //вывод последних строк:
    assert(N<=lcounter);
    std::cout<<"Последние "<<N<<" строк(и) из фаила "
            <<file_name<<':'<<std::endl;
    
    //для этого сбрасываем флаги и возвращаемся в начало:
    fin.clear();
    fin.seekg (0, std::ios::beg);
    
    // и выводим на экран фаил скрывая первые couner-N сток:
    lcounter -=N;
    while(fin.getline(fline,256)){  
        if(lcounter<=0) std::cout<<fline<<std::endl;
        lcounter--;
    }
    
    fin.close();
 
return 0;
}

Последний раз редактировалось Stilet; 28.02.2015 в 14:38.
spike_1 вне форума Ответить с цитированием
Старый 28.02.2015, 17:49   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

это не та программа, она не соответствует заданию.
да и всегда проще написать с нуля, нежели переводить.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.02.2015, 23:14   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Пример открытия файла через параметр, заданный в командной строке:
Код:
...

  if (ParamCount = 2) then begin
     param1 := paramstr(1);             {имя файла с указанием пути к нему}
     Val(paramstr(2), param2, errcode); {Число выводимых строк}
     if errcode <> 0 then
         writeln('Неверно задано число!');
  end
  else
       writeln('Недостаточно или много параметров!')
...
    assign(finp, param1);
{$-I}
     reset(finp);   { Открытие файла для чтения }
     if IOResult <> 0 then
         writeln('Err! Файл ', param1, '  не обнаружен!');
{$+I}
...
Таким способом можно ввести через командную строку нужные параметры и проверить их действительность.
Для вывода N последних строк файл следует перечитать и подсчитать число строк в нем (пусть их Mstr).
Затем вернуться в начало файла - reset(finp);
Если это число не более N (Mstr <= N), то вывести все строки, иначе пропустить Mstr-N и остальные выводить до конца файла.
PS: Обработку ошибок следует облагородить для нормального завершения программы.

Как-то так,...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В командной строке задается параметр,состоящий из букв и цифр,удалить все буквы dosha1302 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.12.2012 15:01
Имя файла теста надо указать в командной строке запуска программы. ДениC Общие вопросы Delphi 28 03.04.2011 12:25
Как указать в командной строке запуска программы имя файла xmaksimca Общие вопросы Delphi 2 27.12.2009 20:43