Для студентов МГУ им. Ломоносова по предмету Системное программное обеспечение (СПО)Задачи с экзаменаЗадачи с экзамена 2019-05-08СтудИзба

Ответы: Задачи с экзамена

Описание

Описание файла отсутствует

Характеристики ответов (шпаргалок)

Учебное заведение
Семестр
Просмотров
53
Скачиваний
0
Размер
5,09 Kb

Список файлов

PRAK_KOM

От: --------

Кому: <kuvalda@aport.ru>

Тема: Может помогу кому.

Дата: 6 января 2001 г. 21:01

Привет. Побывав на двух комиссиях по праку (3 семестр) спешу помочь тем, кто может оказаться в такой же ситуации...Присылаю варианты комиссий, хотя они могут у тебя уже быть.

Ком.1

1) Написать на Си прогу, реализующую конвеер (Name1 | Name2). Вызов из ком-ной строки PROGRAM Name1 Name2. Предусмотреть обработку ошибок (отсутствие файлов, кол-во параметров) .

2)Написать на Си прогу, обрабатывающую каждое четное возникновение сигнала SIGTRAP форматированием двух сыновьих процессов, связанных каналом.

Ком.2

1) Дан текстовый файл с именем Name. Написать прогу, инвертирующую (запись наоборот) данный файл без использования доп. рабочих файлов..

2) Написать прогу, которая свяжет каналом процесс-внук с правнуком, при этом, процесс-внук имеет доступ к файлу Name2. Процесс внук должен передать через канал процессу правнуку содержание файла Name2. Правнук должен изменить (создать) файл Name3, чтобы тот содержал инвертированную копию Name2.

Рабочие файлы не использовать.

prak_kom_solution

Типовые задачи прака (не с комиссии, но стоит уметь их решать)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

1 Написать программу tail , печатающую n последних строк файла. Число n и

Имя файла задается с помощью аргументов командной стоки. Обращение вида tail

n filename, печатает n последних строк файла с именем filename. Если строк

в файле меньше n, тогда печатаются все строки файла.

#include <stdio.h>

main(int argc, char **argv) {

int n=10;

int fd1;

char e;

FILE *f;

if( argc!=2 ) {

printf( "\n\nUsage: tail1 <filename>" );

return 1;

}

if( (fd1=open( argv[1], _F_READ ))==-1 ) {

printf( "Error opening '%s' for reading.\n", argv[1] );

return 2;

}

lseek( fd1, 0, SEEK_END );

while( n && lseek( fd1, 0, SEEK_CUR ) ) {

read(fd1, &e, 1 );

if( e=='\n' ) n--;

lseek( fd1, -2, SEEK_CUR );

}

if( e=='\n' ) lseek( fd1, +2, SEEK_CUR );

while( (read(fd1, &e, 1)==1 ) printf( "%c", e );

close( fd1 );

return 0;

}

2 Написать программу head, печатающую n первых строк файла. Число n и

имя файла задается с помощью аргументов командной стоки. Обращение вида head

n filename, печатает n первых строк файла с именем filename. Если строк в

файле меньше n, тогда печатаются все строки файла.

# include <stdio.h>

# include <fcntl.h>

char name[50];

char e;

main () {

sscanf( "%s", name );

f=open( name, O_RDONLY );

for( i=0; i<10; ) {

if( !read( f, &e, 1 ) ) break;

if( e=='\n' ) i++;

printf( "%c", e );

}

}

3 Написать программу, реализующую следующую схему: процесс 2 считывает строку

с

клавиатуры и посылает ее через канал процессу 4, который выводит строку на

экран.

//task with a sophisticated process hierarchy

#include <stdio.h>

#include <fcntl.h>

char s;

int fd[2];

main() {

pipe( fd );

if( !fork() ) while( (s=getchar())!='\n' ) write( fd[1], &s, 1 );

if( !fork() ) if( !fork() )

while( (read( fd[0], &s, 1 )==1 ) printf( "%c", s );

return 0;

}

4 Написать ф-ю strindex(s,t), кот. Выдает позицию самого правого вхождения t в

s или 1, если вхождение не обнаружено.

# include <stdio.h>

# include <string.h>

int strindex (char*s, char t) {

int i, len=-1;

for (i=1,i<strlen(s),i++) {

if (t==*(s+i)) len i;

}

if (len!=-1) return len;

else return 1;

}

5 В файле задана последовательность слов, разделенных запятой.

Написать программу, которая выводит на экран количество символов

в самом длинном из всех встречающихся в файле слове. Максимально

возможная длина слова в файле неограниченна.

#include <stdio.h>

#include <fcntl.h>

main() {

char mas[50],c;

int fd, sh=o,max=0;

scanf ("%s",mas);

fd=open(mas,O_RONLY);

while (read(fd,&c,1)!=0) {

if (c!=',') sh++;

else {

if (max<sh) max=sh;

sh=0;}

} printf ("%d", max);

}

6 Написать функцию strend(s, t), которая выдает 1, если строка t

является окончанием строки s, и 0 в противном случае.

# include <stdio.h>

# include <string.h>

int strend (char*s, char *t) {

int i;

char *d;

d=t+strlen(t);

s=s+strlen(s);

for (i=0, i<strlen(t) i++) {

if (*s=*d) return 0;

s--;

d--;

}

return 1;

}

7 Написать функцию replace(s1, s2), которая формирует строку s2

из строки s1, заменой всех подпоследовательностей "ab" на "cd".

# include <stdio.h>

# include <string.h>

void replace(char *s1,char *s2) {

int i, flag=0;

for (i=0,i<strlen(s1),i++){

switch (*(s1+i)) {

case 'a': if (flag==1) *s2++='a';

*s2++='a';

flag=1;

break;

case 'b': if (flag==1) *--s2='c';

*(++s2++)='d';}

else *s2++='b';

break;

default: flag=0, *s2++=(s1+i);

break;

}

}

return;

}

Задания комиссий по практикуму 2001/2002, зимняя сессия

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~

1.1 Написать на Си прогу, реализующую конвеер (Name1 | Name2). Вызов из ком-

ной строки PROGRAM Name1 Name2. Предусмотреть обработку ошибок

(отсутствие файлов, кол-во параметров) .

#include <stdio.h>

main( int argc, int **argv ) {

int fd[2];

if( argc<3 ){ printf( "Go and learn C!! \n" ); return 1; }

pipe(fd);

if( !fork() ) {

dup2( fd[1], 1 );

execvp( argv[1], argv[1], 0 );

printf( "%s not found\n", argv[1] );

return 1;

}

if( !fork() ) {

dup2( fd[0], 0 );

execvp( argv[2], argv[2], 0 );

printf( "%s not found\n", argv[2]);

return 1;

}

return 0;

}

1.2 Написать на Си прогу, обрабатывающую каждое четное возникновение сигнала

SIGTRAP форматированием двух сыновьих процессов, связанных каналом.

/* Предполагается: в условии задачи имеется в виду,

что при каждом четном получении сигнала SIGTRAP

отец ФОРМИРУЕТ НОВУЮ пару сыновей,

связанных каналом. */

#include <stdio.h>

#include <signal.h>

int fd[2];

// флаг четности поступившего сигнала

int flg;

void hand( int sig ) {

// восстановим перехват сигнала

signal( SIGTRAP, hand );

if( flg ) {

pipe(fd);

flg=0;

if( !fork() ) {

.... // здесь работает первый сын

}

if( !fork() ) {

.... // здесь работает второй сын

}

}

else flg=1;

}

main() {

flg=1;

signal( SIGTRAP, hand );

while( 1 );

return 0;

}

2.1 Дан текстовый файл с именем Name. Написать прогу, инвертирующую (запись

наоборот) данный файл без использования доп. рабочих файлов..

#include <stdio.h>

#include <fcntl.h>

int fd1, fd2;

char a, b;

long int p1, p2;

char *Name;

main() {

.... // будем считать, что здесь Name некоторым образом задается

fd1=open( Name, O_RDWR );

p1=0;

fd2=open( Name, O_RDWR );

p2=lseek( fd2, 0, SEEK_END );

while( p2-p1>0 ) {

read( fd1, &a, 1 );

read( fd2, &b, 1 );

lseek( fd1, -1, SEEK_CUR );

lseek( fd2, -1, SEEK_CUR );

write( fd1, &b, 1 );

write( fd2, &a, 1 );

lseek( fd2, -2, SEEK_CUR );

}

close( f1 ); close( f2 );

}

2.2 Написать прогу, которая свяжет каналом процесс-внук с правнуком, при

этом, процесс-внук имеет доступ к файлу Name2. Процесс внук должен

передать через канал процессу правнуку содержание файла Name2. Правнук

должен изменить (создать) файл Name3, чтобы тот содержал инвертированную

копию Name2. Рабочие файлы не использовать.

#include <stdio.h>

#include <fcntl.h>

int pp[2];

int fd1, fd2;

Прочти меня!!!

Файл скачан с сайта StudIzba.com

При копировании или цитировании материалов на других сайтах обязательно используйте ссылку на источник

Картинка-подпись
Хочешь зарабатывать на СтудИзбе больше 10к рублей в месяц? Научу бесплатно!
Начать зарабатывать

Комментарии

Поделитесь ссылкой:
Бесплатно
Рейтинг-
0
0
0
0
0
Поделитесь ссылкой:
Сопутствующие материалы
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
427
Средний доход
с одного платного файла
Обучение Подробнее