Pryklad_rozvyaz_variantu_pres
.pdfМодульний контроль №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