Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Pryklad_rozvyaz_variantu_pres

.pdf
Скачиваний:
3
Добавлен:
12.02.2016
Размер:
154.9 Кб
Скачать

Модульний контроль №1

з курсу ПОП

ВАРІАНТ ХХ

1. Вказати, для яких моделей пам’яті за замовчанням використовується «дальній» виклик функцій.

1.TINY, COMPACT, SMALL

2.TINY, SMALL, MEDIUM

3.COMPACT, SMALL, MEDIUM

4.COMPACT, LARGE, HUGE

5.MEDIUM, LARGE, HUGE

Правильна відповідь - 5

2. Вказати, в якому рядку опису функції є помилка.

int power(int base,int n); Тут: не потрібно ставити ;

{

int i,p=1;

for (i=1;i=n;i++) p=base;

return p;

}

1

3. Нехай прототип функції має вигляд:

 

 

int sum(int, int, int);

 

 

 

Вибрати правильне звертання до цієї функції.

5. int a,b,c;

1. int a,b,c;

2. int a,b,c;

3. int a,b,c;

4. int a,b,c;

…………

…………

…………

…………

…………

int sum(a,b,c);

c=&sum(a,b);

sum(a,b,c);

c=sum(a,b);

int *sum(a,b);

Правильна відповідь – Варіант 3.

4.

Приклад 1.

У головній функції ввести число n, що задає кількість рядків, які вводяться, а також, скільки рядків буде оброблено у функції. У функцію зі змінним числом параметрів надходять рядки, кінець списку - вказівник NULL. Рядки необхідно вивести на екран. Програма завершує роботу при введенні числа 0.

#include

<iostream.h>

 

#include

<conio.h>

 

void prnstr(char *s,...)

 

{

= &s;

 

char **p

/* Vstanovluyemo vkaz. na adresu */

2

while(*p)

 

/* pershogo elementa u steku. */

cout << ( *p++ );

/* Vyvodymo ryadok i zsuvayemo */

cout << "\n";

 

/* vkazivnyk po steku */

/* Nedolik programy - vsi ryadky vyvodyat'sya pidryad */

 

}

()

 

 

 

void main

 

 

 

{char s1[20], s2[20], s3[20], s4[20], s5[20];

 

int n;

 

 

 

 

clrscr ();

 

 

 

 

while (1)

<< "

Skil'ky ryadkiv (n)- ? ";

cin >> n ;

{cout

switch(n)

 

 

 

 

{

 

<< "Vvedit' ryadok \n";

 

case 1: cout

 

cin >> s1;

prnstr (s1,NULL); break;

 

case 2: cout << "Vvedit' ryadok \n";

 

cin >> s2;

 

 

 

cout << "Vvedit' ryadok \n";

break;

 

cin >> s3; prnstr (s2,s3,NULL);

 

case 3: cout << "Vvedit' ryadok \n"; cin >> s1;

cout << "Vvedit' ryadok \n"; cin >> s4;

3

cout << "Vvedit' ryadok \n";

cin >> s5; prnstr (s1,s4,s5,NULL); break;

case 0: return;

break;

default: cout << "error";

}

 

}

 

}

Результати

 

Skil'ky ryadkiv (n)- ? 1 Vvedit' ryadok

asdsf asdsf

Skil'ky ryadkiv (n)- ? 2 Vvedit' ryadok

12345 Vvedit' ryadok rter 12345rter

Skil'ky ryadkiv (n)- ? 3 Vvedit' ryadok

assa

Vvedit' ryadok

4

bassa

Vvedit' ryadok cassa assabassacassa

Skil'ky ryadkiv (n)- ? 0

5. Змістовно сформулюйте результат дії складного оголошення double far* *pt; int (*zmi)[2][100];

1. pt - дальній вказівник на вказівник (вказівник на масив вказівників) на змінну типу double;

2. zmi – вказівник на двовимірний масив елементів типу int.

6. Написати фрагмент програми (головної функції main), де передбачається динамічне виділення додаткової пам’яті функцією realloc для вектора цілих чисел початкової довжини n - пам'ять виділялась функцією calloc. Обсяг виділеної пам’яті збільшити у сім разів. Вивести на друк повідомлення у випадку успішного і неуспішного виділення пам’яті.

#include <stdio.h> #include <stdlib.h>

5

#include <conio.h> void main()

{ int n, *ptr, *tmp; clrscr ();

printf("Vvedit' n - rozmirnist' masyvu \n"); scanf("%d",&n);

if(!(ptr=(int*)calloc(n, sizeof(int)))) /* ptr vkazuye na */

/* masyv z n elementiv, / /* zapovnenyj nulaymy */

{ puts("Not enough memory 1"); getch (); return;

}

if (!(tmp==realloc(ptr,7*n*sizeof(int)))) {ptr = tmp; /* ptr vkazuye na masyv z 7*n elementiv */ puts("Memory is allocated successfully");

getch (); } else

{ puts("Not enough memory 2"); getch ();

return; }

}

Результат

6

Vvedit' n - rozmirnist' masyvu 122

Memory is allocated successfuly

7. Написати фрагмент програми визначення довжини файлу з допомогою функції filelength (використовується команда fileno для одержання дескриптора файлу).

/* Визначення розміру файлу */

#include <stdio.h> #include <io.h> Int main ()

{

FILE *fp; long fsize;

. . . /* відкриття файлу функцією fopen () */

Fsize = filelength( fileno (fp) ); printf(“Dovzhyna faylu %d \n”, Fsize); return 0;

}

7

Можна також скористатись функцією

/* Визначення розміру заданого файлу */ long FileSize (FILE * fz )

{

 

long fsize, fpos;

 

fgetpos (fz, &fpos);

/* збереження поточної позиції файлу */

fseek (fz, 0L, SEEK_END);

/* перехід у кінець файлу */

fsize=ftell(fz);

/* розмір відповідає зміщенню */

fsetpos (fz, &fpos);

/* повернення вказівника на попередню */

return fsize;

/* позицію */

 

}

 

8. Використовуючи функцію перескерування потоку вводу даних stdin у заданий файл, прочитати з вказаного файлу стрічки символів (довжина стрічки <=20), кількість стрічок записана другим параметром у функції main. Використовуючи команду форматного виводу fprintf, записати введені стрічки у інший вказаний файл.

#include <stdio.h>

8

#include <conio.h> #define len 20

/* int len=20; */ int argc=2;

char argv[]="2";

int main (int argc, char *argv[])

{

FILE *fp; FILE *fp1; char *s; int ii; char buf[len]; clrscr ();

printf("argc= %d \n",argc); if(argc == 0)

{printf("Ne vkazano kil'kist' ryadkiv \n"); getch ();

return 0; } else

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

/*{ argv[1]=s; ii=(int)*argv; printf("kil'kist' ryadkiv= %d \n",ii); */

{s=argv[1]; ii=(int)*s; printf("kil'kist' ryadkiv= %d \n",ii); getch ();

}

9

ii=2;

char fname1[]="out1.txt"; fp1=fopen(fname1,"w");

char

fname[]="report.txt";

/* File name */

fp

=

fopen(fname, "rt");

stdin);

/* Vkazivnyk potoku */

/*

freopen (fname, "rt",

/* potik pereskerovano u file */

if (fp==NULL)

/* POTIK VIDKRYTY NE VDALOS' */

{ printf ("file %s not found \n",

fname);

getch (); return 0;

}

else

printf("File is open \n"); getch (); while (fgets(buf,len,fp)!=NULL)

{

printf("buf= %s \n",buf); getch ();

fputs(buf,fp1);

*/ TUT Vykorystano fputs zamist’ fprintf !!! */

}

/* Diji z file */

return 1;

 

 

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]