Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Помощ за задачи на C/C++ (merged)


Препоръчан отговор

Как да проверя дали въведенето е число тип инт?

Ако е да се запази ако не да се въведе наново. нещо идея си нямам

[*]Записваш входните данни в char масив или направо в string.

[*]Пускаш цикъл, който да обхожда всички елементи на масива. Целта му е да провери дали всички символи са валидни, т.е. цифрите от 0 до 9.

[*]Ако входните данни са валидни - конвертираш стринга в integer и го записваш в променлива.

[*]Ако входните данни са невалидни - изписваш грешка и въвеждаш отново.

Линк към коментара
Сподели в други сайтове

Здравейте, трябва ми спешно задача, която демонстрира създаването на файлове с пряк достъп или по точно:
Да се създаде програма - информационна система за авиокомпания с която се въвеждат
-номер на полет
-местоназначение
-брой продадени билети
-цена на билет
-максимален брой места
Да се напишат функции за създаване на файл, за извеждане на цялата информация и функция за добавяне на данни. 
Мерси предварително ;]]

Линк към коментара
Сподели в други сайтове

  • 3 седмици по-късно...

Само не разбрах защо трябва да те интересува как са разположени числата за да ги намериш,а и в масива може и да да има повече от една тройка последователни числа както и да има 

повтарящи се числа.

#include <stdio.h>#include <stdlib.h>#include <time.h>#define MaxRazmer 100    int mas[MaxRazmer];    void consecutivesNUM(int mas[], int razmer){     int f, s, t, br=0;        for (f = 0; f < razmer; f++)        for (s = 0; s < razmer; s++)            if (mas[f]+1==mas[s])                 for (t=0; t < razmer; t++)                     if (mas[s]+1==mas[t]) {                         printf("nFound 3 consecutive numbers #%dn", ++br);                                         printf("array[%d]=%dn", f, mas[f]);                         printf("array[%d]=%dn", s, mas[s]);                         printf("array[%d]=%dnn", t, mas[t]);                         }    if (br==0) printf("nNot found 3 consecutive numbersn");                         }int main () {    int i;    srand(time(NULL));    for (i=0; i<MaxRazmer; i++)         mas[i]=rand()%1000;    consecutivesNUM(mas, MaxRazmer);    system("pause");    return 0;}
Редактирано от ined (преглед на промените)
Линк към коментара
Сподели в други сайтове

 

Само не разбрах защо трябва да те интересува как са разположени числата за да ги намериш,а и в масива може и да да има повече от една тройка последователни числа както и да има 

повтарящи се числа.

#include <stdio.h>#include <stdlib.h>#include <time.h>#define MaxRazmer 100    int mas[MaxRazmer];    void consecutivesNUM(int mas[], int razmer){     int f, s, t, br=0;        for (f = 0; f < razmer; f++)        for (s = 0; s < razmer; s++)            if (mas[f]+1==mas[s])                 for (t=0; t < razmer; t++)                     if (mas[s]+1==mas[t]) {                         printf("nFound 3 consecutive numbers #%dn", ++br);                                         printf("array[%d]=%dn", f, mas[f]);                         printf("array[%d]=%dn", s, mas[s]);                         printf("array[%d]=%dnn", t, mas[t]);                         }    if (br==0) printf("nNot found 3 consecutive numbersn");                         }int main () {    int i;    srand(time(NULL));    for (i=0; i<MaxRazmer; i++)         mas[i]=rand()%1000;    consecutivesNUM(mas, MaxRazmer);    system("pause");    return 0;}

 

 

Получи се, благодаря. :)

Редактирано от Пит (преглед на промените)
Линк към коментара
Сподели в други сайтове

Не си записах  условията,затова ще импровизирам:1)Въвежда се дума.След това число n(n<=30).Изписват се n на брой числа,който показват до коя буква да се замени с #.Ако въведеното число е по-голямо от броя на буквите в думата,да замени всички букви с #.

ВХОД :

AVATAR

3

1 4 8

ИЗХОД:

#VATAR

####AR

######

#include <iostream>#include <string>using namespace std;int main(){	string S;	getline(cin, S);	int a[30],n,i,m;	cin >> n;	m = S.size();	for (i = 0; i <= n; i++) cin >> a[i];	for (i = 0; i <= m; i++){		if (a[i] > m) S.replace(0, m, "#");		else S.replace(0, a[i], "#");		cout << S;	}	system("pause");	return 0;}
#include <iostream>#include <string)using namespace std;int main(){	string S,s1="";	getline(cin, S);	int i, m, n, p,max=0,A[10];	n = S.size();	for (i = 0; i <= n; i++){		while (S[i] = " "){			s1 = S.substr(0, i);			S.erase(0, i);			p = s1.size();			if (p >= max)  p = max;			s1 = "";		}	}		cout << max;		return 0;	} 

Не знам как да запаметя думите.Предполагам с масив?

2)Написани са няколко думи,разделени с интервал.Програмата да изведе най-дългата дума броят на буквите им.(Ако например най-дългата дума е 5 букви и има други 5-буквени,да изведе и тях).

ВХОД: qwer prst asd mn

Изход: 4

           qwer

           prst

ПС: Ако може да я направите с низове и масиви,защото това е изискването. 

Редактирано от Caprice97 (преглед на промените)
Линк към коментара
Сподели в други сайтове

...

Как правилно да поискаме помощ за C/C++

 

Приложете кода, който сте разработил до момента и ние ще Ви насочваме и помагаме.

 

Поздрави !

Линк към коментара
Сподели в други сайтове

Caprice97 нещо ми убягва идеята на кода, защо да се чудиш как ще записваш думите ако просто не разваляш първоначалния стринг.

#include <iostream>#include <string>using namespace std;int main(){    string S;    getline(cin, S);    S += ' ';    int m=0, max=0;    for (int i = 0; i < S.size(); i++)         if (S[i]==' ') {            if (m > max) max=m;            m = 0;        } else m++;		    cout << max<<endl;    m = 0;    for (int i = 0; i  < S.size(); i++)         if (S[i]==' ') {            if (m == max)                 cout << S.substr(i-max, max)<<endl;            m = 0;        } else m++;    system("pause");    return 0;	}

[edit]

гледам че си пуснал и кода за първата задача, само дето и там имаш същия проблем - разваляш стринга S и 

програмата ти ще дава правилни резултати само ако числата в a[] нарастват 

#include <iostream>using namespace std;int main(){    string S;    getline(cin, S);    int n, m;    cin >> n;    for (int i = 0; i < n; i++){        cin >> m;	for (int j=0; j<S.size(); j++)	    cout<<((j<m)?'#':S[j]);        cout<<endl;    }    system("pause");    return 0;	} 
Редактирано от ined (преглед на промените)
Линк към коментара
Сподели в други сайтове

Мерси :) .Просто изискването от госпожата е да използваме низове и техните основни функции/сравняване,копиране.Затова по такъв начин се опитвам да ги напиша.

Линк към коментара
Сподели в други сайтове

Ами увеличаваш размера на ffileNAME 

Иначе при fgets има колко символа максимално да зареди ама като отрежеш името няма гаранция че изобщо ще може да запише файла

      fgets(ffileNAME,50,stdin);      fflush(stdin);      ffileNAME[strlen(ffileNAME)-1]=0;
[edit]

@AxCx - само дето "лесното" си има цена - 20 килобайтова програмка на С набъбва с над 500 килобайта ако е на C++

Редактирано от ined (преглед на промените)
Линк към коментара
Сподели в други сайтове

Откриха ми пропуск. Ето ми я функцията, трябва да направя така, че да не ми запълни буфера и да крашне, ако се зададе име на файла повече от 50 символа.

 

Не знам защо използваш методи от класическото C, а не използваш file stream-овете от C++. Най-лесното за мен решение е просто да запазваш името на файла в string.

#include "stdafx.h"// добавяш следните библиотеки#include <iostream>#include <string>using namespace std;void PrintSaveFile(int arr[], int size){	FILE *pont;        // използваш string вместо char масив	string ffileNAME;	int i;	fflush(stdin);	printf("Set file name:");        // играе ролята на gets()	getline(cin, ffileNAME);	        // проверка за прекалено дълго име на файл	if (ffileNAME.length()>255)	{		printf("Error! The file name is too long (>255 symbols).");		return;	}	pont = fopen(ffileNAME.c_str(), "w");	if (pont == NULL)	{		printf("This file can't be openn");		return;	}	for (i = 0; i < size; i++)	{		fprintf(pont, "%dn", arr[i]);	}	fclose(pont);	printf("Saved!n");}

 

Линк към коментара
Сподели в други сайтове

Мисля, че трябва да се получи както ined спомена с "fgets" - да се записва част от името, но нещо не мога да го напасна. Тия стрингове не съм ги ползвал  до сега и не ги умея, затова и не ги използвам.

Редактирано от Пит (преглед на промените)
Линк към коментара
Сподели в други сайтове

Мисля, че трябва да се получи както ined спомена с "fgets" - да се записва част от името, но нещо не мога да го напасна. Тия стрингове не съм ги ползвал  до сега и не ги умея, затова и не ги използвам.

Като ще се пише на C++ ги както ти предложиха ползвай iostream и fstream и после просто ползваш стандартните потоци cin/cout и файла, като пренасочваш стринговете, които ти трябват с << .Примерни в нета колкото искаш точно за такива ротинни задачи.

Линк към коментара
Сподели в други сайтове

scanf("%49s", &fileName); fflush(stdin);

В първата функция гледам ползаваш scanf. На scanf ако зададеш дължина във форматиращия стринг няма да ти дава грешка ако въведените символи са повече от резервираните за масива, но в името не трябва да има интервали защото ще присвои на името само символите преди интервала.

Другия вариант е с fgets, там може да има и интервали в името но трябва да махнеш символа за нов ред ако символите са които са въведени за името са по-малко от 49

      fgets(fileName,50,stdin);      fileName[strlen(fileName)-1]=0;      fflush(stdin); 

.

 

 

 

Линк към коментара
Сподели в други сайтове

  • 2 месеца по-късно...

http://prikachi.com/images.php?images/279/7555279E.jpghttp://prikachi.com/images.php?images/282/7555282k.jpgМОЛЯ ВИ,ПОМОГНЕТЕ ЗА НЯКОЯ ЗАДАЧА,ВАЖНО МИ Е 

1. Викате

2. Започнете сама, напишете нещо, ние ще помагаме

3. Направете си труда поне да препишете условията и да ги публикувате като текст

Линк към коментара
Сподели в други сайтове

1. Викате

2. Започнете сама, напишете нещо, ние ще помагаме

3. Направете си труда поне да препишете условията и да ги публикувате като текст

Извинявам се,наистина задачите са лесни,но съм начинаеща и не мога да се справя сама,ще препиша задачите,надявам се наистина на помощ :)  

Линк към коментара
Сподели в други сайтове

1.Променливите необходими за изчисляване на разходите,направени

за един ден ( с точност до стотинка),при зададена обща сума за разходите

и броя дни.

2.Променлива от тип double и указател към константа от тип double,иниацилизиран.

3.Двумерен масив с размер 4 x 2 ,иниацилизиран.

10.Напишете  програма ,която чете от клавиатурата положителни цели числа и

определя броя на  четните числа и броя на нечетните.Цикълът да се организира

чрез проверка на коректност на операцията по въвеждане на числото.

11.Декларирайте едномерен масив от цели числ,като го иниацилизирате.

Определете сумата и броя на елементите на масива,които попадат в диапазона [10,20]

(на елементите със значения: 10<=значение<=20).

12.Направена е декларация int a=0, b=1, c.Какво ще бъде значението на a,b,c  след

изпълнението на израза :

c= 2* a++  +  ++b/2;

15.Какво ще изведе кода?Представете схематично променливите в паметта

int a=10, b=20, c=30;

Int *p1=&a, *p=&c;

Cout<<p1-p2<<endl;

16.double * p1, *p2;

P2=new double(11);

P2=new double;

P2=p1;

Cout<<”*p1=”<<*p1<<” *p2=”<<*p2<<endl;

*p2=5;

Cout<<”*p1=”<<*p1<<” *p2”<<*p2<<endl;

Линк към коментара
Сподели в други сайтове

1.Променливите необходими за изчисляване на разходите,направени

за един ден ( с точност до стотинка),при зададена обща сума за разходите

и броя дни.

2.Променлива от тип double и указател към константа от тип double,иниацилизиран.

3.Двумерен масив с размер 4 x 2 ,иниацилизиран.

10.Напишете  програма ,която чете от клавиатурата положителни цели числа и

определя броя на  четните числа и броя на нечетните.Цикълът да се организира

чрез проверка на коректност на операцията по въвеждане на числото.

11.Декларирайте едномерен масив от цели числ,като го иниацилизирате.

Определете сумата и броя на елементите на масива,които попадат в диапазона [10,20]

(на елементите със значения: 10<=значение<=20).

12.Направена е декларация int a=0, b=1, c.Какво ще бъде значението на a,b,c  след

изпълнението на израза :

c= 2* a++  +  ++b/2;

15.Какво ще изведе кода?Представете схематично променливите в паметта

int a=10, b=20, c=30;

Int *p1=&a, *p=&c;

Cout<<p1-p2<<endl;

16.double * p1, *p2;

P2=new double(11);

P2=new double;

P2=p1;

Cout<<”*p1=”<<*p1<<” *p2=”<<*p2<<endl;

*p2=5;

Cout<<”*p1=”<<*p1<<” *p2”<<*p2<<endl;

ДОбре, хайде да започнем да разсъждаваме. Примерно задача 1. Имаме сумата на разходите и броя на дните. Как ще получим ежедневния разход? Как ще получим ежедневния разход със стотинки?

Линк към коментара
Сподели в други сайтове

16.double * p1, *p2;
P2=new double(11);
P2=new double;
P2=p1;
Cout<<”*p1=”<<*p1<<” *p2=”<<*p2<<endl;
*p2=5;
Cout<<”*p1=”<<*p1<<” *p2”<<*p2<<endl;
17 Какво ще изведе кода ,кратки пояснения
char ch;
int num;
while(true){
cin.get (ch);
if(isdigit(ch)) {
cin.unget();
cin>>num;
break;
}
}
cout<<"num="<<num<<endl;
18.
const int SIZE=10;
int array ={3, 11, -34, 42, 12, -8, 51, 44, 9, 3};
int s=22;
bool flag=false;
for(int i=0; i< SIZE; i+-){
if (array ==s) {
flag=true;
break;
}
}
cout<<flag<<endl;
19.int a[] [3]=(1,2,3,4,5,6,7,8,9);
int nr=sizeof (a)/sizeof (int[3]);
*(a+2)=*a*2;
for (int i=0; i<nr, i++){
for (int j=0, j<3, j++)
cout<<a <<" ";
cout<<endl;
Линк към коментара
Сподели в други сайтове

ДОбре, хайде да започнем да разсъждаваме. Примерно задача 1. Имаме сумата на разходите и броя на дните. Как ще получим ежедневния разход? Как ще получим ежедневния разход със стотинки?

На 3та мисля ,че е   int b[4,2] Наистина ми е трудно..Щом искам помощ,значи не мога да се справя сама :(

Линк към коментара
Сподели в други сайтове

На 3та мисля ,че е   int b[4,2] 

Наистина ми е трудно..Щом искам помощ,значи не мога да се справя сама Публикувано изображение

Не, хайде малко математика. Как от сума и брой дни ще получим дневна сума?

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

  • Разглеждащи това в момента   0 потребители

    • Няма регистрирани потребители разглеждащи тази страница.
×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване