Перейти до вмісту

Розвязання завдань з програмування


Повідомлень в темі: 191

#41 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 03.10.2007 – 15:11

Такі задачі робляться за 2 хв.:
1)
var n, sum : integer;
begin
   read(n);
   while (n > 0) do
   begin
	  sum := sum + n mod 10;
	  n := n div 10;
   end;
   write(sum);
end.

2)
const n = 10;
var a : array[0..n] of integer;
   b : array[0..10] of boolean;
   i, count : integer;
begin
   for i := 0 to n do
	  read(a[i]);
   for i := 0 to n do
	  if (not b[a[i]])
	  begin
		 b[a[i]] = true;
		 inc(count);
	  end;
   write(count);
end.

Програми писав тут, так що можуть бути граматичні помилки, але суть думаю зрозуміла.
  • 0

#42 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 03.10.2007 – 15:32

паскаль не юзав вже зо два роки

program a1;
var a,b,c:integer;
Begin
b:=0;
c:=10;
read(a);
while a<>0 do
begin
b:=b+(a mod c);
a:=a div c;
end;
write(:);
read(a);
end.

А другу перевір чи правильно працює бо в мене немає часу...
program a1;
var a:array [1..10] of integer;
res,i,j,temp : integer;

Begin
res:=0;
for i:=1 to 10 do
read(a[i]);
for i:=1 to 10 do
for j:=i to 10 do
if a[i]>a[j] then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
end;
for i:=1 to 10 do
if a[i]<>a[i-1] then inc(res);
write(res);
end.
  • 0

#43 Руля ван Метал

    Писар

  • Користувачі
  • PipPipPipPipPipPipPipPip
  • 434 повідомлень
  • Стать:Чоловік
  • Місто:Івано-франківська

Відправлено 03.10.2007 – 17:01

Дякую за допомогу, але перша задача щось не виходить(((((. Люди знайдіть хтось помилку :)
  • 0

#44 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 03.10.2007 – 22:48

Цитата

var n, sum : integer;
begin
read(n);
while (n > 0) do
begin
sum := sum + n mod 10;
n := n div 10;
end;
write(sum);
end.
Змінні треба зануляти.
А моя ніби працює...
  • 0

#45 ллириК

    Лямурчик

  • Користувачі
  • PipPipPipPipPipPip
  • 200 повідомлень
  • Стать:Чоловік
  • Місто:Житомир

Відправлено 04.10.2007 – 21:10

На наступній неділі треба здати лабораторну в якій 50 задач! Я не встигаю....допоможіть зробити трохи задач :)

1. Напишіть програму, що друкує у напрямку зростання усі дільники введеного числа.
2. Знайдіть найменше спільне кратне одночасно не рівних нулю цілих чисел a та b, таких що a>=b>=0
3. Одержати роздруковку усіх чисел, що закінчуються на цифру 5, з проміжку від 1 до 100
4. Одержати роздруківку усіх чисел, що закінчуються на цифру 2, з проміжку від 1 до N
5. Відшукайте мінімальне та максимальне з десяти чисел, що вводяться з клавіатури ( в задачі використовуйте мінімальну кількість простих змінних)
6. Напишіть програму, що підраховує пробіли, символи табуляції та нового рядка у вхідній послідовності символів, що вводяться з клавіатури.
7. Напишіть програму, що перетворює літери, які вводяться з клавіатури, із заголовних у прописні.

аська 212-168-142

БУДЬ ЛАСКА.
  • 0

#46 Сварус

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3815 повідомлень
  • Стать:Чоловік
  • Місто:Вінниця

Відправлено 05.10.2007 – 16:15

Всі теми з проханнями об`єднав. Надалі всі свої прохання озвучувати в даній темі а не створювати кожного разу нову.
  • 0

#47 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 05.10.2007 – 17:28

пишу не відкомпільовані(вчора міняв віндовс). Хоча б мову написав... Хай буде С++
1. Напишіть програму, що друкує у напрямку зростання усі дільники введеного числа.
#include <iostream>
using namespace std;
void main()
{
int n,t=2;   cin>>n;
while (t<n){  if (n%t==0) cout<<t<<" ";   t++;}
}

2. Знайдіть найменше спільне кратне одночасно не рівних нулю цілих чисел a та b, таких що a>=b>=0
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
	int a,b;
	cin>>a>>b;
	if( a==0||b==0 )
	 {cout<<a+b; exit(0);}
	a = abs(a);
	b = abs(b);
	while(a!=b)
	{
		if( a>b ){a = a-b;}
		else b=b-a;
	}
	cout<<b;
}



3. Одержати роздруковку усіх чисел, що закінчуються на цифру 5, з проміжку від 1 до 100
#include <iostream>
using namespace std;
void main()
{
cout<<"5 ";
for (int i=1;i<=9;i++) cout<<i<<"5 ";
}
4. Одержати роздруківку усіх чисел, що закінчуються на цифру 2, з проміжку від 1 до N
#include <iostream>
using namespace std;
void main()
{
int n;
cin>>n;
for (int i=2;i<=n;i+=10) cout<<i<<" ";
}
5. Відшукайте мінімальне та максимальне з десяти чисел, що вводяться з клавіатури ( в задачі використовуйте мінімальну кількість простих змінних)
#include <iostream>
using namespace std;
void main()
{
int n,min,max;
cin>>n;
max=n;
min=n;
for (int i=1;i<10;i++)
{
cin>>n;
if (n>max) max=n;
if (n<min) min=n;
}
cout<<min<<"   "<<max;
}



6. Напишіть програму, що підраховує пробіли, символи табуляції та нового рядка у вхідній послідовності символів, що вводяться з клавіатури.
#include <iostream>
using namespace std;
void main()
{
char c;
int a=0;
while(cin>>c)
if ((c==32)||(c==13))a++;
cout<<a;
}

7. Напишіть програму, що перетворює літери, які вводяться з клавіатури, із заголовних у прописні.
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
char c;
int a=0;
while(c=getch())
if ((c<90)&&(c>65))cout<<(char)(c+32);
}
  • 0

#48 Сварус

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3815 повідомлень
  • Стать:Чоловік
  • Місто:Вінниця

Відправлено 05.10.2007 – 17:38

Ivan Metal! мова програмування - С, то моя вина...адже при з`єднанні тем назва втратилась.
  • 0

#49 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 05.10.2007 – 17:44

Цитата

Ivan Metal! мова програмування - С, то моя вина...адже при з`єднанні тем назва втратилась.
Я вже переробляти не буду. Хоча то небагато роботи.
Мля а якби я написав на Сшарп або паскаль (маскаль:D) то би було шо переробляти
  • 0

#50 ллириК

    Лямурчик

  • Користувачі
  • PipPipPipPipPipPip
  • 200 повідомлень
  • Стать:Чоловік
  • Місто:Житомир

Відправлено 05.10.2007 – 22:07

Дякую Ivan Metal!.....дійсно виручив....ти в якому місті живеш , зустрілись б тобі пива купив :D
  • 0

#51 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 05.10.2007 – 22:23

Цитата

Дякую Ivan Metal!.....дійсно виручив....ти в якому місті живеш , зустрілись б тобі пива купив
Нема за що:D Можна обмежитися звичайним дякую.
  • -14

#52 Володя (vs wladlen)

    Абориген

  • Користувачі
  • PipPipPipPip
  • 80 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 09.10.2007 – 23:20

Задали в Політесі мені прогу скласти: додавання двох римських чисел. Ну дістало :D , ніяк не можу придумати алгоритму - другий день думаю, ще такої ... не було (мова прогр не важливо).

Правила такі:
I=1 V=5 X=10 L=50 C=100 D=500 M=1000

Зліва від цифр що більші їх самих можуть стояти І Х С
І зліва тільки від V i X
X - L i C
C - D i M

Підряд можуть іти тільки 3 одинакові цифри. Підряд можуть іти ІХСМ. VLD можуть зустр. тільки один раз.

ІХС зліва можуть зустр. один раз.

Цифра справа не може стояти зліва.

Поможіть хто може.
  • -9

#53 Володя (vs wladlen)

    Абориген

  • Користувачі
  • PipPipPipPip
  • 80 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 10.10.2007 – 19:32

а іще забув перевід в арабську а потім навпаки теж не можна
  • 0

#54 moonskin

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 142 повідомлень

Відправлено 25.10.2007 – 22:37

виникло таке питаннячко
є прога (С++ Builder), яка вводить текст з файлу, обробляє його і виводить результат у вигляді масиву. я поставила прапорець (CheckBox), якшо він ввімкнений, то результат виводиться у відсортованому вигляді. якшо запускаю ехе-шку, і один раз вмикаю той прапорець і натискаю «Обчислити» (отримую відсортоване), то потім навіть якшо його зняти, все одно результат після нового обчислення сортується. щоб перейти в звичайний режим (коли не сортується), тре закрити прогу і знов її запустити.
по моєму, це тупо. хтось в курсі, як цього позбутися?
сподіваюсь, не дуже закручено пояснила ;)
  • 0

#55 Сварус

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3815 повідомлень
  • Стать:Чоловік
  • Місто:Вінниця

Відправлено 25.10.2007 – 23:51

хм..а яким чином Ви перевіряєте чи потрібно Вам сортувати? Ви контролюєте якусь булеву змінну(boolean)? Тоді не забувайте інвертувати її значення при зніманні CheckBox`а. А ще краще - контролювати напряму, типу if (CheckBox1.Checked) тра-ля-ля.
  • 0

#56 moonskin

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 142 повідомлень

Відправлено 27.10.2007 – 18:28

Перегляд дописуСварус (26.10.2007 00:51) писав:

А ще краще - контролювати напряму, типу if (CheckBox1.Checked) тра-ля-ля.
ну в мене так і зроблено ;)
ось код (прохання не ржать):
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  float statistic[33];
  char *alf="абвгдеєжзиіїйклмнопрстуфхцчшщьюя ";
  int iFileHandle;
  int iFileLength;
  int iBytesRead;
  char *pszBuffer;
  int ch;
  char letter;
  Memo1->Clear();
  Memo2->Clear();
  Memo3->Clear();
  Memo4->Clear();
  AnsiString FileName = InputBox("Відкриття файлу","Введіть ім'я файлу","d:\\lab1.txt");
  if (FileName != "")
  {
	try
	{
	  iFileHandle = FileOpen(FileName, fmOpenRead);
	  iFileLength = FileSeek(iFileHandle,0,2);
	  FileSeek(iFileHandle,0,0);
	  pszBuffer = new char[iFileLength+1];
	  FileRead(iFileHandle, pszBuffer, iFileLength);
	  FileClose(iFileHandle);
	  Memo1->Text=pszBuffer;
	  int len=0;
	  for(int i=0;i<33;i++)
	  {statistic[i]=0;}
	  for(int i=0; i<iFileLength; i++)
	  {
		for(int j=0; j<33; j++)
		{
				if(pszBuffer[i]==alf[j])
				{
				statistic[j]++;
				len++;
				}
		}
	  }
	  delete [] pszBuffer;
	  if(CheckBox1->Checked)
	  {
		  for(int k=32; k>=1; k--)
			 for(int i=0; i<=(k-1); i++)
				if(statistic[i]<statistic[i+1])
				{
				ch=statistic[i];
				statistic[i]=statistic[i+1];
				statistic[i+1]=ch;
				letter=alf[i];
				alf[i]=alf[i+1];
				alf[i+1]=letter;
				}
	  }
	  for(int k=0; k<33; k++)
	  {
	  Memo2->Lines->Add(alf[k]);
	  Memo3->Lines->Add(FloatToStr(statistic[k]/len));
	  Memo4->Lines->Add(FloatToStr(statistic[k]/iFileLength));
	  }
	}
	catch(...)
	{
	  Application->MessageBox("Неправильне ім'я або шлях до файлу.", "Помилка", IDOK);
	}
  }
}
тут можна глянуть саму ехе-шку
  • 0

#57 Сварус

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3815 повідомлень
  • Стать:Чоловік
  • Місто:Вінниця

Відправлено 27.10.2007 – 20:17

moonskin, а як же інакше? Ви ж відстортували масив, а невідсортований не зберегли. Можливим виходом з ситуації є створення дублікату масиву statistic[], наприклад statistic2[] і сортування власне дублікату:
	 //.....
	  float statistic2[33];

	  for(int i=0;i<33;i++)
	  {
			statistic[i]=0;
			statistic2[i]=0;
	  }

	  for(int i=0; i<iFileLength; i++)
	  {
		for(int j=0; j<33; j++)
		{
				if(pszBuffer[i]==alf[j])
				{
				statistic[j]++;
				statistic2[j]++;
				len++;
				}
		}
	  }
	  delete [] pszBuffer;
	  if(CheckBox1->Checked)
	  {
		  for(int k=32; k>=1; k--)
			 for(int i=0; i<=(k-1); i++)
				if(statistic[i]<statistic[i+1])
				{
				ch=statistic[i];
				statistic[i]=statistic[i+1];
				statistic[i+1]=ch;
				letter=alf[i];
				alf[i]=alf[i+1];
				alf[i+1]=letter;
				}
		   for(int k=0; k<33; k++)
			{
				  Memo2->Lines->Add(alf[k]);
				  Memo3->Lines->Add(FloatToStr(statistic[k]/len));
				  Memo4->Lines->Add(FloatToStr(statistic[k]/iFileLength));
			}
	  }
	  else
	  {
			 for(int k=0; k<33; k++)
			   {
					Memo2->Lines->Add(alf[k]);
					Memo3->Lines->Add(FloatToStr(statistic2[k]/len));
					Memo4->Lines->Add(FloatToStr(statistic2[k]/iFileLength));
			   }
	  }
			 //...
P.S. Приклад писав нашвидкоруч і в блокноті, тому не даю гарантію що помилок нема.
  • 0

#58 Zingara

    Ледар

  • Користувачі
  • PipPip
  • 17 повідомлень
  • Стать:Жінка
  • Місто:Львів

Відправлено 27.10.2007 – 23:16

Перегляд дописуWladlen (10.10.2007 00:20) писав:

Задали в Політесі мені прогу скласти: додавання двох римських чисел. Ну дістало ;) , ніяк не можу придумати алгоритму - другий день думаю, ще такої ... не було (мова прогр не важливо).

Правила такі:
I=1 V=5 X=10 L=50 C=100 D=500 M=1000

Зліва від цифр що більші їх самих можуть стояти І Х С
І зліва тільки від V i X
X - L i C
C - D i M

Підряд можуть іти тільки 3 одинакові цифри. Підряд можуть іти ІХСМ. VLD можуть зустр. тільки один раз.

ІХС зліва можуть зустр. один раз.

Цифра справа не може стояти зліва.

Поможіть хто може.

хм... склади скінченний автомат, завдання ніби не є складне...
  • 0

#59 moonskin

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 142 повідомлень

Відправлено 27.10.2007 – 23:52

Сварусе
та версія паше точно так, як і моя, але завдяки Вашій ідеї про дублювання ( :) ) таки вдалося добити цю прогу :cry:
весь прикол, виявляється, у тому, що після сортування треба повернути масив alf до початкового стану. а статистику чіпать не треба. так шо я його (alf) продублювала і от результат:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  float statistic[33];
  char *alf="абвгдеєжзиіїйклмнопрстуфхцчшщьюя ";
  char *alf2="абвгдеєжзиіїйклмнопрстуфхцчшщьюя ";
  int iFileHandle;
  int iFileLength;
  int iBytesRead;
  char *pszBuffer;
  int ch;
  char letter;
  Memo1->Clear();
  Memo2->Clear();
  Memo3->Clear();
  Memo4->Clear();
  AnsiString FileName = InputBox("Відкриття файлу","Введіть ім'я файлу","d:\\lab1.txt");
  if (FileName != "")
  {
	try
	{
	  iFileHandle = FileOpen(FileName, fmOpenRead);
	  iFileLength = FileSeek(iFileHandle,0,2);
	  FileSeek(iFileHandle,0,0);
	  pszBuffer = new char[iFileLength+1];
	  FileRead(iFileHandle, pszBuffer, iFileLength);
	  FileClose(iFileHandle);
	  Memo1->Text=pszBuffer;
	  int len=0;
	  for(int i=0;i<33;i++)
	  {statistic[i]=0;}
	  for(int i=0; i<iFileLength; i++)
	  {
		for(int j=0; j<33; j++)
		{
				if(pszBuffer[i]==alf[j])
				{
				statistic[j]++;
				len++;
				}
		}
	  }
	  delete [] pszBuffer;
	  if(CheckBox1->Checked)
	  {
		  for(int k=32; k>=1; k--)
			 for(int i=0; i<=(k-1); i++)
				if(statistic[i]<statistic[i+1])
				{
				ch=statistic[i];
				statistic[i]=statistic[i+1];
				statistic[i+1]=ch;
				letter=alf2[i];
				alf2[i]=alf2[i+1];
				alf2[i+1]=letter;
				}
		  for(int k=0; k<33; k++)
		  {
		  Memo2->Lines->Add(alf2[k]);
		  Memo3->Lines->Add(FloatToStr(statistic[k]/len));
		  Memo4->Lines->Add(FloatToStr(statistic[k]/iFileLength));
		  alf2[k]=alf[k];
		  }
	  }
	  else
		  for(int k=0; k<33; k++)
		  {
		  Memo2->Lines->Add(alf[k]);
		  Memo3->Lines->Add(FloatToStr(statistic[k]/len));
		  Memo4->Lines->Add(FloatToStr(statistic[k]/iFileLength));
		  }
	}
	catch(...)
	{
	  Application->MessageBox("Неправильне ім'я або шлях до файлу.", "Помилка", IDOK);
	}
  }
}
прога працює тепер шикарно, хоч 100 раз перезапускати і брати дані з будь-яких файлів ;)
тіки я все одно не розумію. якшо я тисну на кнопку, то код має ж виконуватись спочатку, так чому тоді
оця байда
char *alf="абвгдеєжзиіїйклмнопрстуфхцчшщьюя "; 
що стоїть в 2-му рядку з початку, не впорядковує alf, перемішаний під час попереднього прогону програми? :)
  • 0

#60 Сварус

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3815 повідомлень
  • Стать:Чоловік
  • Місто:Вінниця

Відправлено 28.10.2007 – 00:12

moonskin, чесно кажучи я жодним чином не заглиблювався в суть програми, просто інтуїтивно відчув що треба зробити. Тому така помилочка вийшла ;)
..Мабуть тому, що Ви проганаєте alf2, ні? :)
  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних