Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

Riki_Tiki_Tavi

Ну, это не совсем код Цезаря - там буквы заменялись по кругу, а тут просто со сдвигом.

Кроме того, в программе есть одна ошибка - Pascal не гарантирует, что строка результата вначале пустая.

Шифр менять не буду, а код исходной программы чуть подправлю:

program crypt;{$APPTYPE CONSOLE}uses SysUtils;var str,sh:String; i:Integer;BeginReadLn(str); sh:='';for i:=1 to length(str) do sh:=sh+chr(ord(str[i])+3);WriteLn('open text - '+str);WriteLn('shifr - '+sh);ReadLnend.

Программа дешифровки:

program decrypt;{$APPTYPE CONSOLE}uses SysUtils;var str,sh:String; i:Integer;BeginReadLn(sh); str:='';for i:=1 to length(sh) do str:=str+chr(ord(sh[i])-3);WriteLn('shifr - '+sh);WriteLn('open text - '+str);ReadLnend.

а можно в коде шифровки и дешифровки сделать так чтобы оно записывало в файл, и потом с файла розшифровывало текст?

Заранее благодарен!

Ссылка на комментарий
Поделиться на другие сайты

Riki_Tiki_Tavi

program crypt;{$APPTYPE CONSOLE}uses SysUtils;var str,sh:String; i:Integer; f:text;BeginWrite('Text? '); ReadLn(str);Write('Name of the file? '); Readln(sh); Assign(f,sh); Rewrite(f);for i:=1 to length(str) do Write(f,chr(ord(str[i])+3)); Close(f);end.
program decrypt;{$APPTYPE CONSOLE}uses SysUtils;var str,sh:String; i:Integer; f:text;BeginWrite('Name of the file? '); Readln(sh); Assign(f,sh); Reset(f);Read(f,str); for i:=1 to length(str) do Write(chr(ord(str[i])-3)); Close(f);Readlnend.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Описать Структуру с именем STUDENT с полями NAME-фамилия и инициалы;GROUP-номер группы;SES-успеваемость(массив из 5 элементов).Написать программу, выполняющую следующие действия:

-ввод с клавиатуры данных в массив STUD1, состоящий из 10 структур типаа STUDENT;записи упорядочиваются по алфавиту.

- вывод фамилий и номер группы студентов,имеющих хотя бы одну оценку 2;

-вывод соответствующегося сообщения, если таковых студентов нет.Огромное пожалуйста ваще не понимаю программирование

Ссылка на комментарий
Поделиться на другие сайты

Помогите плз составить программу на Паскаль .

Даны вещественные числа х и у . Опредилить принадлежит ли точка с координатами х и у заштрихованной части фигуры . Координаты фигуры (1;1) (-1;1) (1;-1) заранее спс

Ссылка на комментарий
Поделиться на другие сайты

Помогите плз составить программу на Паскаль .

Даны вещественные числа х и у . Опредилить принадлежит ли точка с координатами х и у заштрихованной части фигуры . Координаты фигуры (1;1) (-1;1) (1;-1) заранее спс

program CheckPoint;function Square(x1, y1, x2, y2, x3, y3: Real): Real;beginSauqre := abs(x2*y3 - x3*y2 - x1*y3 + x3*y1 + x1*y2 - x2*y1);end;constx1 := 1.0;  x2 := -1.0;  x3 :=  1.0;y1 := 1.0;  y2 :=  1.0;  y3 := -1.0;{ input point } x :=  0.2; y := -1.0;varS : Real;beginS := Square(x, y, x2, y2, x3, y3) + Square(x1, y1, x, y, x3, y3) + Square(x1, y1, x2, y2, x, y);if Square(x1, y1, x2, y2, x3, y3) = S then	WriteLn('Point in the triangle')else	WriteLN('Point is not in the triangle');end.

Так через площади можно проверить. Вообще существует множество разных тривиальных способов.

Друзья, изучайте, не ленитесь! Это элементарная геометрия.

Изменено пользователем Ego Drama
Ссылка на комментарий
Поделиться на другие сайты

Помогите плз составить программу на Паскаль .

Даны вещественные числа х и у . Опредилить принадлежит ли точка с координатами х и у заштрихованной части фигуры . Координаты фигуры (1;1) (-1;1) (1;-1) заранее спс

Прошу прощения, константы определяются через операцию равенства (=), а не через присваивание (:=). Вот так верно:

program CheckPoint;function Square(x1, y1, x2, y2, x3, y3: Real): Real;beginSquare := abs(x2*y3 - x3*y2 - x1*y3 + x3*y1 + x1*y2 - x2*y1);end;constx1 = 1.0;  x2 = -1.0;  x3 =  1.0;y1 = 1.0;  y2 =  1.0;  y3 = -1.0;{ input point } x =  0.2; y = -1.0;varS : Real;beginS := Square(x, y, x2, y2, x3, y3) + Square(x1, y1, x, y, x3, y3) + Square(x1, y1, x2, y2, x, y);if square(x1, y1, x2, y2, x3, y3) = S then	WriteLn('Point in the triangle')else	WriteLN('point is not in the triangle');end.
Ссылка на комментарий
Поделиться на другие сайты

Toxa1234

var x,y:real; begin write('x y ? '); readln(x,y); writeln((abs(x)<=1)and(-x<=y)and(y<=1)); readln end. 

DzirT345669

type STUDENT=record NAME:string[25]; GROUP:integer; SES:array[1..5]of integer end;var Stud:array[1..10]of STUDENT; S:STUDENT; i,j,k,n:word; b,c:boolean;beginn:=0;for i:=1 to 10 do with Stud[i] do begin Write('NAME: '); ReadLn(NAME); if NAME='' then break; inc(n); Write('GROUP: '); ReadLn(GROUP); Write('Balls(5): '); for j:=1 to 5 do Read(SES[j]); ReadLn; WriteLn; end;WriteLn;for i:=1 to n-1 do for j:=1 to n-i do if Stud[j].NAME>Stud[j+1].NAME then begin S:=Stud[j]; Stud[j]:=Stud[j+1]; Stud[j+1]:=S end;WriteLn('All students');Writeln('Name				  Group	Balls');for i:=1 to n do with Stud[i] do WriteLn(NAME,'':22-length(NAME),GROUP:5,SES[1]:5, SES[2]:2,SES[3]:2,SES[4]:2,SES[5]:2);WriteLn; WriteLn('The students with the ball 2:'); b:=true;for i:=1 to n do with Stud[i] do begin c:=false; for j:=1 to 5 do if SES[j]=2 then begin c:=true; b:=false end; if c then WriteLn(NAME,'':22-length(NAME),GROUP:5) end;if b then Writeln('no such students'); ReadLnend.

Оценки студента при вводе разделяются пробелами. Чтобы вводить данные меньше чем десяти студентов, можно вместо ввода фамилии очередного студента просто нажать клавишу Enter.

Вообще-то программирование на Pascal на этом уровне выучить легко. Это просто английский язык с двумя десятками слов типа "если... то... иначе...", "для i, меняющегося от 1 до 10, выполнить...", плюс алгебраические обозначения для операций, только переменные можно обозначать не одиночными буквами, а целыми словами, а индексы пишутся не внизу, а в квадратных скобках. Математика и физика куда сложнее.

P.S. Это на Turbo Pascal, на PascalABC.NET досрочное окончание ввода по Enter работать не будет, но по условиям задачи этого и не требуется. Хотя можно, например, вместо if NAME='' написать if NAME='#' и выходить досрочно вводом вместо фамилии символа #, это будет работать и в PascalABC.NET.

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Вообще-то программирование на Pascal на этом уровне выучить легко. Это просто английский язык с двумя десятками слов типа "если... то... иначе...", "для i, меняющегося от 1 до 10, выполнить...", плюс алгебраические обозначения для операций, только переменные можно обозначать не одиночными буквами, а целыми словами, а индексы пишутся не внизу, а в квадратных скобках.

Не думаю, что синтаксис важный критерий сложности языка. Синтаксис любого языка (за редким исключением) учится за пару часов. Значительно важнее семантика. Хотя да, семантика Pascal проста как кочерга --- обычная операционная семаника + простая система модулей (в отличие от Си, где оная вообще отсутствует) и ещё ряд не столь значительных вещей.

Меня поражает до глубины души, что до сих пор в большинстве ВУЗ'ах и школ с невероятном упорством продолжают учить алгоритмам и программированию в целом на Pascal (а также C, C++).

Как так получилось, что вместо математически-формализованных концепций (доказанных, реализованных и доступных!) значительно более высокоуровневых, чем просто ветвление, цикл и подпрограмма, педагоги предпочитают долбить студентов циклам?! Парадокс...

Даже из вышепреведенной простой задачи, можно извлечь значительное количество пользы, если реализовать её на правильном языке. Например на ML (OCaml):

type student = {   s_name  : string ; s_group : int ; s_ses   : int list}let read_ses_list () =   List.map int_of_string (Str.split (Str.regexp ",") (read_line ()));;let read_students n =   let rec read_students_ n_ s =       if n_ > 0 then           let name  = read_line     ()           and group = read_int      ()           and ses   = read_ses_list ()           in               (* TODO: asserts *)               read_students_ (n_-1) ( {   s_name  = name                                         ; s_group = group                                         ; s_ses   = ses   } :: s )       else           s   in       read_students_ n [];;let result =   List.sort (fun s1 s2 -> String.compare s1.s_name s2.s_name) (       List.filter (function s -> List.exists ((=) 2) s.s_ses) (read_students (read_int ()))   )in   match result with       | [] -> print_string "No losers!\n"       |  _ -> List.iter (                   function s ->                       print_string (String.concat ": " [s.s_name; string_of_int (s.s_group)]);                       print_newline ()               )               result;;

Столько добра можно понять:

  1. Циклы не нужны. В большинстве случаев следует использовать формализованные функотры, такие как map, filter, reduce и даже iter (хотя iter и бессмысленен с математической т. з., но является формализованным --- гарантированно пройдёт по всей коллекции). А там где случай не типичный, вполне допустипо написать явную рекурсию. Отказ от циклов решает массу проблем, ибо классический цикл --- чёрный ящик от которого можно ожидать всё что угодно, вплоть до того, что вылезет раптор и откусит голову. Не нужны никакие дурацкие счётчики, флажки и прочие побочные вещи по которым нужно будет проверять границы, выходить из циклов и заниматься прочей низкоуровневой и вредной работой, вместо того, чтобы непосредственно решать задачу.

  2. Мутабельность не нужна и, более того, вредна во многих случаях. Можно понять, что строить структуру мы можем иммутабельно в процессе считывания входного потока. Нет side-effect'ов --- нет проблем.

  3. Императивные ветки не нужны. Есть более мощный и понятный механизм --- pattern matching.

  4. Объявлять типы переменных не нужно, ибо автовывод.

Посему! Дорогие студенты, школьники, родители, а также уважаемые читатели и зрители!

Пытайтесь разобраться в сути вещей. Конструктивно спорьте с преподавателями, доказывайте.

В случае клинического случая относительно преподавателя информатики, жалуйтесь вышестоящим, обращайтесь к декану. Если ничего не помогает --- отчисляйтесь, спасите собственные жизни.

Кому интересно:

http://caml.inria.fr/pub/docs/manual-ocaml/index.html

http://ocaml.spb.ru/

http://fprog.ru/

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Вы находитесь в теме "сделайте всё за меня" и вопрошаете, почему студенты не осваивают высокоуровневые математически-формализованные концепции вместо "простого как кочерга" Паскаля?

Вот это реальный парадокс. Предлагаю перейти в тему Самый перспективный язык программирования

"

Ссылка на комментарий
Поделиться на другие сайты

Вы находитесь в теме "сделайте всё за меня" и вопрошаете, почему студенты не осваивают высокоуровневые математически-формализованные концепции вместо "простого как кочерга" Паскаля?

Вот это реальный парадокс. Предлагаю перейти в тему Самый перспективный язык программирования

"

Ничего, парадоксального! Хотел, что бы студенты услышали, посмотрели, сравнили. Буду счастлив если кто-нибудь задумается.

Всё же, прошу прощения, за offtopic. Перемещаюсь со своими крамольными мыслями в "Самый перспективный язык программирования" :)

Изменено пользователем Ego Drama
Ссылка на комментарий
Поделиться на другие сайты

Привет всем!!!

Помогите, пожалуйста, сделать программу на си:

Реализовать комплексную арифметику. Для этого создать класс описывающий комплексное число, перегрузить в нём операторные функции (бинарные + - */) (унарные+-) (префиксные). Создать функцию вывода на экран числа в комплексной форме. Написать унарную и бинарную дружественные функции.

Ссылка на комментарий
Поделиться на другие сайты

На Си классы создавать нельзя. На C++?

#include <iostream>#include <math.h>using namespace std;class Complex{private:double real, image;public:Complex(){};Complex(double r){real=r; image=0;}Complex(double r, double i){real=r, image=i;}~Complex(){}const Complex Complex::operator+() const;const Complex Complex::operator-() const;const Complex operator+(const Complex &);const Complex operator-(const Complex &);const Complex operator*(const Complex &);const Complex operator/(const Complex &);friend double abs(const Complex &);friend bool eqv(const Complex &, const Complex &);friend ostream &operator<<(ostream &, Complex &);friend istream &operator>>(istream &, Complex &);};double abs(const Complex &c){return sqrt(c.real*c.real+c.image*c.image);}bool eqv(const Complex &c1, const Complex &c2){return c1.real==c2.real && c1.image==c2.image;}const Complex Complex::operator+() const {return Complex(real,image);}const Complex Complex::operator-() const {return Complex(-real,-image);}const Complex Complex::operator+(const Complex &c1) {Complex c; c.real=real+c1.real; c.image=image+c1.image; return c;}const Complex Complex::operator-(const Complex &c1) {Complex c; c.real=real-c1.real; c.image=image-c1.image; return c;}const Complex Complex::operator*(const Complex &c1) {Complex c; c.real=real*c1.real-image*c1.image; c.image=real*c1.image+c1.real*image; return c;}const Complex Complex::operator/(const Complex &c1) {Complex c; double p; p=c1.real*c1.real+c1.image*c1.image; c.real=(real*c1.real+image*c1.image)/p; c.image=(c1.real*image-real*c1.image)/p; return c;}ostream &operator<<(ostream &fo, Complex &c){if(c.image<0)fo<<c.real<<"+i*("<<c.image<<")"; else fo<<c.real<<"+i*("<<c.image<<")"; return fo;}istream &operator>>(istream &fi, Complex &c){cout<<"real part? "; fi>>c.real; cout<<"imagine part? "; fi>>c.image; return fi;}main(){Complex c1,c2,c;cout<<"The first complex number:  "<<endl; cin>>c1;cout<<"The second complex number: "<<endl; cin>>c2;cout<<endl;cout<<"c1= "<<c1<<endl<<"c2= "<<c2<<endl<<endl;cout<<"abs(c1)= "<<abs(c1)<<endl<<endl;cout<<"c1==c2: "<<eqv(c1,c2)<<endl<<endl;c=+c1; cout<<"+c1= "<<c<<endl;c=-c1; cout<<"-c1= "<<c<<endl<<endl;c=c1+c2; cout<<"c1+c2= "<<c<<endl;c=c1-c2; cout<<"c1-c2= "<<c<<endl;c=c1*c2; cout<<"c1*c2= "<<c<<endl;c=c1/c2; cout<<"c1/c2= "<<c<<endl;cin.get(); cin.get();}

Стиль не шлифовал, но работает.

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Тролль а посмотри пож мой вариант( где я здесь неправильно сделал скорее всего в дружественных функциях...)

Complex.cpp#include <iostream>#include <conio.h>using namespace std;class Complex{private: float Re; float Im;public : Complex(float Re = 0, float Im = 0) : Re(Re), Im(Im) {  //this->Re = Re; this->Im = Im; } Complex operator - (Complex A) {  return Complex(Re - A.Re, Im - A.Im); } Complex operator * (Complex A) {  return Complex(Re * A.Re - Im * A.Im, Re * A.Im + Im * A.Re); } Complex operator / (Complex A) {  return Complex((Re * A.Re - Im * A.Im) / (A.Re * A.Re + A.Im * A.Im), (A.Re * Im - A.Im * Re) / (A.Re * A.Re + A.Im * A.Im)); } Complex operator -- () {  return Complex(--Re, Im); } Complex operator -- (int) {  return Complex(Re--, Im); } void Print() {  if(Im >= 0)  {   printf("%.2f + %.2f*i",Re,Im);  }  else  {   printf("%.2f - %.2f*i",Re,Im*(-1));  }  //printf("\n"); } float GetNorm() {  return sqrt(Re * Re + Im * Im); } Complex operator + (Complex A) {  return Complex(Re + A.Re, Im + A.Im); } friend Complex operator + (Complex A, double B) {  return Complex(A.Re + B, A.Im); } friend Complex operator + (double A, Complex B) {  return Complex(B.Re + A, B.Im); } friend Complex operator ++ (Complex& A) {  return Complex(++A.Re, A.Im); } friend Complex operator ++ (Complex& A, int) {  return Complex(A.Re++, A.Im); }};
Ссылка на комментарий
Поделиться на другие сайты

Помогите, пожалуйста!

Написать на С++.

Используя стек, решить следующую задачу.

В текстовом файле f записана без ошибок формула следующего вида:

<формула> ::= <цифра> | М(<формула>, <формула>) | m(<формула>, <формула>)

<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9, где М обозначает функцию max, a m- min. Вычислить как целое число значение данной формулы. Например, М(5,m (6,8))=6.

Ссылка на комментарий
Поделиться на другие сайты

temich500

Если функция у тебя объявлена как дружественная, она должна определяться вне класса. Например, для + надо в классе оставить

friend Complex operator + (Complex, double);

а после объявления класса написать

Complex operator + (Complex A, double B){return Complex(A.Re+B, A.Im);}

Ссылка на комментарий
Поделиться на другие сайты

Serty

У тебя в примере М(5,m (6,8)) ошибка - буква M русская, а должна быть латинская.

#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <fstream>#include <iostream>using namespace std;const int maxf=0,minf=1,size=100;typedef struct _t{int data[size]; int cur;}st;void init(st* s){for(int i=0;i<size;i++)s->data[i]=0; s->cur=-1;}int empty(st *s){return s->cur==-1;}void push(st *s,int i){s->data[++(s->cur)]=i;}int pop(st *s){return empty(s)?0:s->data[(s->cur)--];}int main(){ifstream input_file("f.txt");const int l=100; char e[l]; char buf[l]; st s; init(&s);input_file.getline(e,l,'\n');int i,j,len=strlen(e);for(i=0;i<len;i++){if(e[i]=='M'){push(&s,maxf); continue;} if(e[i]=='m'){push(&s,minf); continue;} if(isdigit(e[i])){j=0; while(isdigit(e[i]))buf[j++]=e[i++]; buf[j]=' '; push(&s,atoi(buf));} if(e[i]==')'){int b=pop(&s); int a=pop(&s); int func=pop(&s); if(func==maxf)push(&s,a>b?a:b); else push(&s,a<b?a:b);}}cout<<e<<endl<<pop(&s)<<endl; cin.get();}
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Serty

У тебя в примере М(5,m (6,8)) ошибка - буква M русская, а должна быть латинская.

#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <fstream>#include <iostream>using namespace std;const int maxf=0,minf=1,size=100;typedef struct _t{int data[size]; int cur;}st;void init(st* s){for(int i=0;i<size;i++)s->data[i]=0; s->cur=-1;}int empty(st *s){return s->cur==-1;}void push(st *s,int i){s->data[++(s->cur)]=i;}int pop(st *s){return empty(s)?0:s->data[(s->cur)--];}int main(){ifstream input_file("f.txt");const int l=100; char e[l]; char buf[l]; st s; init(&s);input_file.getline(e,l,'\n');int i,j,len=strlen(e);for(i=0;i<len;i++){if(e[i]=='M'){push(&s,maxf); continue;} if(e[i]=='m'){push(&s,minf); continue;} if(isdigit(e[i])){j=0; while(isdigit(e[i]))buf[j++]=e[i++]; buf[j]=' '; push(&s,atoi(buf));} if(e[i]==')'){int b=pop(&s); int a=pop(&s); int func=pop(&s); if(func==maxf)push(&s,a>b?a:b); else push(&s,a<b?a:b);}}cout<<e<<endl<<pop(&s)<<endl; cin.get();}

А можно сразу архив с готовой рабочей программой? (.exe)

И ещё раз спасибо!=))

Ссылка на комментарий
Поделиться на другие сайты

@Тролль

Здравствуйте! Продолжаю изучать классы. Сложно, когда самостоятельно, и сталкиваешься с тем, что нужно для работы и понимания еще воз и маленькая тележка. Наследование пока отложила в сторону. Застряла на конструкторе копирования, указателе this и перегрузке операций (это извращение, практического применения, кроме "а я так хочу", не вижу).

Активно готовлюсь к экзамену. Нас перед экзаменом порадовали самостоятельным изучением файлов и перечислений. Прошу Вас помочь мне в решении задачи.

Создать файл, записать в него 5 строчек. С использованием перечислений вывести без повторов все гласные. Подсчитать количество слов. Найти самое длинное слово. С использованием перечислений вывести без повторов все шипящие, которые есть в этом слове.

Вопрос: как можно выделить цифры и подсчитать их количество\сумму\и т.п. в слове, которое находится в файле и состоит из букво-цифр?

Ссылка на комментарий
Поделиться на другие сайты

Иазяв

Тут не на чем застревать. "Шума много, а шерсти мало" - как сказал черт, остригая кошку. Упрощай для себя. За множеством слов в описаниях обычно скрывается что-нибудь совсем простое. О конструкторе копирования я уже писал. Его задача - создать копию данного ему объекта, то есть экземпляра класса, но не пустую, а со всеми значениями этого конкретного экземпляра.

this - для работы в самом объекте с его полями и функциями. Если он в сочетании с чем-то, то можно его не упоминать, компилятор добавляет его автоматически. В C++ часто так - два пишем, три в уме, в нем используется уйма дописываний компилятором самостоятельно, если что-то не упомянуто. Программы делаются компактнее и непонятнее - стенография профессионалов.

Перегрузка операций - операции в C++ просто функции с особой формой вызова, так что их можно перегружать. Лучше показать, чем рассказать:

#include <iostream>class CT{public: int r;CT operator=(const CT &a){this->r=a.r; return *this;}//можно и проще: CT operator=(const CT &a){r=a.r; return *this;}//можно и еще проще: CT operator=(const CT &a){r=a.r;}, но тогда нельзя будет//	   организовать в выражении цепочку присвоений - мы не возвращаем значения//	  указателя на тот объект, членам которого присвоили новые значения//и даже без const можно обойтись: CT operator=(CT &a){r=a.r;} - const просто гарантия,//	 что то, что мы ничего не напортили в a, проверит еще и компилятор//в общем-то и & не обязательно: CT operator=(CT a){r=a.r;} - но при этом компилятор//	будет создавать каждый раз временную копию а, а это лишняя работа};main(){CT c1,c2,c3; c1.r=5; c2.operator=(c1); c3=c1;std::cout<<c1.r<<c2.r<<c3.r; getchar();}

Тут я вызвал перегруженную операцию = двумя эквивалентными способами.

Для работы с файлами есть две группы функций - унаследованная от С с обычными функциями и придуманная в C++ на основе классов более запутанная обобщенная система для работы с потоками ввода-вывода, частным случаем которых являются файлы.

Перечисления - чистая косметика текста программы. Числам можно назначить свои собственные имена, например, вместо 2 писать second_alternative. Соответствие чисел и придуманных нами названий этим числам задается перечислением. Кроме как внутри программы эти имена нигде появляться не будут - чистая мнемоника для программиста. Бывает полезна, когда мы перенумеруем какие-то действия или используем числовые константы - вместо того чтобы писать номер или число, мы можем тогда в программе писать какое-то выбранное нами имя, соответствующее этому номеру или числу, что облегчает понимание смысла этого номера или числа.

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

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

Как узнать, что символ - цифра? Есть несколько способов. Первый - в С есть готовая функция (строго говоря, даже не функция, а макрос, то есть не вызывается функция, а код ее тела прямо вставляется компилятором в программу) isdigit( c), для ее использования надо подключить заголовочный файл ctype.h, в предыдущей программе в этой теме у меня так и сделано.

Второй способ - просто проверять if(c>='0' && c<='9')...

Третий способ: определить строку s="0123456789" и проверять наличие в ней нашего символа-цифры функцией strchr(s,c)

Для функций работы с обычными строками надо подключить заголовочный файл string.h

Сколько там еще вариантов осталось? Девяносто три? ;) Но самый простой способ, конечно, первый - там все уже сделано разработчиками языка.

Как преобразовать цифру в число и приплюсовать к общей сумме? Простейший вариант: sum+=c-48; Поскольку коды цифр отличаются от кодов целых чисел на 48 - если ты посмотришь на таблицу ASCII (стандартное кодирование символов), то увидишь, что цифры 0..9 закодированы в ней числами 48..57. Не забудь при объявлении sum присвоить ей сначала нуль: int sum=0;

P.S. Кстати, стоило упомянуть по поводу приведенной программки: написанная нами перегрузка операции = была, в общем-то, мартышкиным трудом: компилятор создает эту перегруженную операцию, как и конструкторы создания и копирования объектов, по умолчанию и без нас автоматически, можно было бы вообще закомментировать перегрузку операции =, поручив сделать ее самому компилятору по умолчанию. Процитирую сам себя (несколькими строками выше) "в нем используется уйма дописываний компилятором самостоятельно, если что-то не упомянуто". Но если мы перегрузили ее явно, компилятор создавать ее сам уже не будет, а создание ее собственноручно. может иметь смысл - мы ведь можем в определение своей операции добавить что хотим, чего не делается в операции, создаваемой по умолчанию. Например, можно было бы вставить внутрь вывод при выполнении этой операции слова "присваиваю..." или ограничить диапазон присваиваемых значений :)

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Ребят помогите нубу ещё с 1 задачкой=). Опредилить пересекаются ли линии y=bx^2+cx+d и y=kx+m . Если пересекаются, то найти точку пересечения (Программа на Паскале)

Ссылка на комментарий
Поделиться на другие сайты

Toxa1234

var b,c,d,k,m:real; begin writeln('b c d k m: '); readln(b,c,d,k,m); writeln(sqr(c-k)>4*b*(d-m)) end.

Ах да, еще и найти саму точку пересечения. Их может быть две, одна или ноль. Тогда так

var a,b,c,d,k,m,x1,x2:real; p:boolean;beginwriteln('b c d k m: '); readln(b,c,d,k,m); a:=sqr(c-k)-4*b*(d-m); p:=true;if (a>0)and(b<>0) then begin p:=false; x1:=(k-c+a)/2/b; x2:=(k-c-a)/2/b; writeln('(',x1:0:3,',',k*x1+m:0:3,'),  (',x2:0:3,',',k*x2+m:0:3,')') end;if (b=0)and(c<>k) then  begin p:=false; x1:=(m-d)/(c-k); writeln('(',x1:0:3,',',k*x1+m:0:3,')') end;if p then writeln('no points of intersection');readlnend.

P.S. Слегка подправил. Касание я пересечением не считаю.

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...