2~NeiTRoN~ А почему ты считаешь, что строка "Слово слово слово,слово" чем то прерывается? Строки (Си-строки) это последовательность ASCII-символов, ограниченная '\0' в конце. Символ пробела и запятой это такие же ASCII символы как и любая гласная-согласная. Так что для подсчёта кол-ва гласных в строке тебе не надо разбирать строку по словам. 2Airoman Та задача, ктр ты выложил к программированию имеет очень опосредованное отношение. Динамическое программирование в этом контексте - это один из разделов Методов Оптимизации. Здесь с ним тебе никто не поможет скорее всего.
А почему тогда код jawbreaker. При вводе aaassdduuiio выводит эту строку и количество гласных:8, а при вводе aaass dduuiio-выводит aaass и количество гласных: 3?Хотя нужно чтобы всеравно вывел 8
Да мне хоть что-то похожее на этот динамический метод. а то я линейно сделал, а это не подходит. Спасайте!!!
млин, мне проще на Си переделать немного, чем в приплюснотом разбираццо ... Code: #include <stdio.h> char *vowels = "aeiou"; int countvowels(char *s) { int res = 0; int i; int j; for(i = 0; i < strlen(s); i++) { for(j = 0; j < strlen(vowels); j++) { if (s[i] == vowels[j]) res++; } } return res; } int main() { char str[100]; gets(str); printf("%s", str); printf("\nvowels count : %d", countvowels(str)); return 0; } всё должно быть в принципе понятно ...
PHP: #include <iostream> #include <string> #include <sstream> using namespace std; string vowels = "aeiou"; int countvowels(const string& s) { int res = 0; for(int i = 0; i < s.length(); i++) for(int j = 0; j < vowels.length(); j++) if (s[i] == vowels[j]) res++; return res; } int main() { string a; getline(cin, a); cout << a << "\n"; cout << countvowels(a); cin.get(); return 0; } так? У cin'a разделитель это пробел, а здесь читается вся строчка до перевода строки.
jawbreaker, izlesa спасибо большое!!!!=)) Единственное непонял как сделать чтобы вводить можно было несколько строк, мнеж как бы надо из нескольких строк выбирать ту в которой больше гласных, но все равно еще раз спс!
PHP: #include <iostream> #include <string> #include <sstream> using namespace std; string vowels = "aeiou"; int countvowels(const string& s) { int res = 0; for(int i = 0; i < s.length(); i++) for(int j = 0; j < vowels.length(); j++) if (s[i] == vowels[j]) res++; return res; } int main() { string a, res; int max = -1; while(getline(cin, a)) // читаем строку пока не встречаем символ перевода строки { if(a == "end")// end означает конец ввода break; cout << a << "\n"; cout << countvowels(a) << "\n"; if (countvowels(a) > max) { max = countvowels(a); res = a; } } cout << max << "\n" << res; cin.get(); return 0; }
Еще по строкам Возник еще вопрос. Вот есть код: PHP: #include<stdio.h> #include<string.h> #include<conio.h> #include<iostream> #define YES 1 #define NO 0 void main() { const int m=10; char string[m][80],d; int n,i,j,beg; int inword=NO; i=0; while (gets(string[i])!=NULL) i++; int k=i; printf("\n"); for(i=0;i<k;i++) { n=strlen(string[i][j]); for(j=0;j<=n;j++) if(string[i]+j)==' ' || string[i]+j=='\0' || string[i]+j==',') {if(inword==YES) { d=*(string[i]+j-1); *(string[i]+j-1)=*(string[i]+beg); *(string[i]+beg)=d; } inword=NO; } else if(inword==NO) {inword=YES;beg=j;} } for(i=0;i<k;i++) puts(string[i]); getch(); } Поидеи он должен выпонять следующую функцию:Вводится текст не больше 10 строк и не более 80 символов в строке и меняет у каждого слова последнюю букву!Но он почемуто не хочет этого делать=( Кто подскажет в чем косяк в коде???
Ну во первых код в корне неправильный ) Если мы в string[j] имеем массив строк то, чтото в этом роде [WARNINGZ : НЕ ТЕСТИРОВАЛОСЬ] Code: //должно менять первую и последнюю букву в каждом слове //работать должно только со строчными буквами a-z for(int i = 0; i < iNumOfRows - 1; i++) { for(int j = 0; j < iNumOfCols - 1; j++) { if(((string[i][j] == ' ') || (string[i][j] == '\0')) && (inWordFlag == 1)) { inWordFlag = 0; string[i][j-1] = cFirstChar; } else if((string[i][j] > 'a') && (string[i][j] < 'z') && (inWordFlag == 0)) { inWordFlag = 1; cFirstChar = string[i][j]; } } } А с массивами ты работать не умеешь ...
срочно нужно написать программу моделирования работы автобусного парка. Сведения о каждом автобусе содержат: 1. Номер автобуса 2. Фамилию и инициалы водителя 3. Номер маршрута Программа должна обеспечить выбор с помощью меню и выполнение одной из след. операций: 1. Начальное форматирование данных о всех автобусах в парке в виде списка (ввод с клавиатуры или из файла). 2. Имитация выезда автобуса из парка: вводится номер автобуса, программа удаляет данные об этом автобусе из списка автобусов, находящихся в парке и записывает эти данные в список автобусов, находящихся на маршруте. это нужно написать на С++ с меня незаржавеет
Ребят, нужна помощь. Надо написать программу на паскале, который я уже 3 года в глаза не видел... Нужно чтобы программа вычисляла и выводила на экран таблицу значений функции y = система: первое уравнение: sqrt(x^3+2x-1), при x<2; второе уравнение: sqrt^5((1)/(x^2+3x-5)), при x>=2. x принадлежит отрезку [-1;3], шаг изменения 0,05. Если кто возьмется, icq:455422511
Alexandr II вот, набросал перед сном: PHP: #include <iostream> #include <vector> #include <string> using namespace std; struct Bus { int BusNumber; int RouteNumber; string driver; }; void ShowList(const vector<Bus> & buses) { for (int i = 0; i < buses.size(); i++) { cout << "Bus Number: " << buses[i].BusNumber << " Route Number: " << buses[i].RouteNumber << " Driver name: " << buses[i].driver << "\n"; } } int main() { vector<Bus> buses;//список автобусов стоящих в парке char ch; cout << "Type y for keyboard and n for file\n"; cin >> ch; if(ch == 'y') { cout << "Enter a number of buses!\n"; int n; cin >> n; Bus temp; for (int i = 0; i < n; i++) { cin >> temp.BusNumber >> temp.RouteNumber >> temp.driver; buses.push_back(temp); } } else if (ch == 'n') { freopen("input.in", "r", stdin); int n; cin >> n; Bus temp; for (int i = 0; i < n; i++) { cin >> temp.BusNumber >> temp.RouteNumber >> temp.driver; buses.push_back(temp); } } else { cout << "Error!\n"; return 0; } ShowList(buses); vector<Bus> inroute; // список автобусов отправившихся в далёкий путь int num; cout << "Enter a bus number:\n"; cin >> num; for (int i = 0; i < buses.size(); i++) { if(buses[i].BusNumber == num) { inroute.push_back(buses[i]); buses.erase(buses.begin()+i); } } ShowList(inroute); cin.get(); cin.get(); ShowList(buses); cin.get(); cin.get(); return 0; }
Нужно реализовать алгоритм Хаффмана на Pascal-е Об алгоритме Хаффмана вот что есть. знаю, что надо перекроить сильно =)) хэлп ми если кому не очень трудно Code: program haffman; USES CRT; Label link1; Var S, R:array[1..7] of integer; {начальный массив и упорядоченный} wordshifr:array[1..10] of string; {шифрованное двоичным кодом слово} stroka, st, word:string; {stroka - то что вводим, st - путь, word - слово для шифрования} f:file; z, x, c, v, b, n, m, def:Char; {символы алфавита, def - символ, который читается из заданной строки. для сравнения с символами данного алфавита} n1, n2, n3, n4, n5, n6, n7, symbol: integer; {количество символов, symbol - меняется в цикле для записи количества символов } shag, min:integer; {счетчик шагов цикла, min - минимальное число в начальном массиве} z1, x1, c1, v1, b1 ,n1 ,m1:string; {двоичные коды символов} begin ClrScr; {объявляем переменные} z:=z; x:=x; c:=c; v:=v; b:=b; n:=n; m:=m; n1:=0; n2:=0; n3:=0; n4:=0; n5:=0; n6:=0; n7:=0; {считаем строку для составления алгоритма Хаффмана} write('vvedite stroku iz bukv z,x,c,v,b,n,m'); readln(stroka); {укажем файл} write('ukajite put k failu i ego imya -'); readln(st); Assign(f, st); rewrite(f); write(f, stroka); {посчитаем количество каждого из 7 символов} while not eof(f) do begin read(f,def); if def=z then n1:=n1 + 1; if def=x then n1:=n2 + 1; if def=c then n1:=n3 + 1; if def=v then n1:=n4 + 1; if def=b then n1:=n5 + 1; if def=n then n1:=n6 + 1; if def=m then n1:=n7 + 1; end; close(f); {запишем в первый массив все полученные количества символов} symbol:=n1; {объявим symbol = n1 , чтобы записать количество символов Z в первую ячейку} link1: for shag:=1 to 7 do begin S[shag]:=symbol; if symbol=n1 then symbol:=n2; GOTO link1; if symbol=n2 then symbol:=n3; GOTO link1; if symbol=n3 then symbol:=n4; GOTO link1; if symbol=n4 then symbol:=n5; GOTO link1; if symbol=n5 then symbol:=n6; GOTO link1; if symbol=n6 then symbol:=n7; GOTO link1; if symbol=n7 then symbol:=n7; end; {получили массив, заполненный целыми числами = количеству каждого символа в строке} {перенесем элементы массива в порядке убывания} for shag:=1 to 7 do begin while (shag+1)<=7 do begin If S[shag]<S[shag+1] then min:=S[shag]; end; R[8-shag]:=min; end; z1:="0"; x1:="10"; c1:="110"; v1:="1110"; b1:="11110"; n1:="111110"; m1:="1111111"; {получили коды символов} write('napishite slovo, sostoyachee iz bukv alfavita, chtobi zashifrovat ego - '); Readln(word); Assign(f, 'C:\811\recent.txt'); rewrite(f); write(f, word); {шифруем слово} shag:=1; while not eof(f) do begin read(f,def); if def=z then wordshifr[shag]:=z1; if def=x then wordshifr[shag]:=x1; if def=c then wordshifr[shag]:=c1; if def=v then wordshifr[shag]:=v1; if def=b then wordshifr[shag]:=b1; if def=n then wordshifr[shag]:=n1; if def=m then wordshifr[shag]:=m1; shag:=shag+1; end; close(f); write('slovo ',word,'zashifrovano! rezultat - '); writeln(wordshifr); end. еще есть вот такое Code: program huffman; const sb=256; type obr=record vl:longint; len:byte end; var a:array[0..511]of longint; b:array[byte]of word; c:array[0..1,byte]of word; st:array[byte]of byte; j,obc:byte; f,g:file; obb,size:longint; brp,brm,bwp:word; bufr,bufw:array[0..sb-1]of byte; reof:boolean; o:array[byte]of obr; procedure opget(var f:file;s:string); begin assign(f,s); reset(f,1); blockread(f,bufr,sb,brm) end; procedure init; begin brp:=0; brm:=0; bwp:=0; obb:=0; obc:=0; reof:=false end; procedure putc(var f:file;b:byte); begin if bwp=sb then begin blockwrite(f,bufw,sb); bwp:=0 end; bufw[bwp]:=b; inc(bwp) end; procedure clput(var f:file); begin putc(f,obb shr 24); blockwrite(f,bufw,bwp); close(f) end; procedure out(var out:file;ch:byte); var glk:byte; begin obb:=obb or o[ch].vl shl (32-o[ch].len-obc); inc(obc,o[ch].len); while obc>=8 do begin glk:=obb shr 24; putc(out,glk); obb:=obb shl 8; dec(obc,8) end end; procedure sift(l,r:word); var i,j,x:word; begin i:=l; j:=l+l+1; x:=b[l]; if (j<r)and(a[b[j]]>a[b[j+1]])then inc(j); while (j<=r)and(a[x]>=a[b[j]])do begin b[i]:=b[j]; i:=j; j:=j+j+1; if (j<r)and(a[b[j]]>a[b[j+1]])then inc(j) end; b[i]:=x end; procedure obh(i:word;p:byte); begin if i<256 then begin o[i].len:=p; o[i].vl:=0; for j:=0 to p-1 do o[i].vl:=o[i].vl shl 1+st[j] end else begin st[p]:=0; obh(c[0,i-256],p+1); st[p]:=1; obh(c[1,i-256],p+1) end end; procedure build; var i,p:word; begin for i:=0 to 255 do b[i]:=i; for i:=127 downto 0 do sift(i,255); p:=0; for i:=255 downto 1 do begin c[0,p]:=b[0]; b[0]:=b[i]; sift(0,i-1); c[1,p]:=b[0]; b[0]:=p+256; a[p+256]:=a[c[0,p]]+a[c[1,p]]; sift(0,i-1); inc(p) end; obh(p+255,0) end; procedure getc(var f:file); var ch:byte; begin ch:=bufr[brp]; out(g,ch); inc(a[ch]); inc(brp); if brp=brm then begin if eof(f) then reof:=true else build; blockread(f,bufr,sb,brm); brp:=0 end end; begin init; opget(f,paramstr(1)); size:=filesize(f); assign(g,'test.glk'); rewrite(g,1); blockwrite(g,size,4); for j:=0 to 255 do a[j]:=1; build; while not reof do getc(f); clput(g) end. что нужно: считать строку символов, состоящую из 5 букв (алфавит), посчитать вероятность каждой появления каждой буквы, создать динамическое дерево, которое присваивает двоичный код каждому символу. не откажусь и от просто частичных фрагментов, думаю смогу разобраться. прост еще не прошли динамические указатели кто поможет благодарность и небольшой денежный бонус ( щас не при деньгах )
Code: program zad; uses CRT; var x,y: real; begin ClrScr; writeln ('--------------------- Funcktion --------------'); x:=-1; while x< 3 do begin if x<2 then begin y:=sqr(exp(3*ln(abs(x)))+2*x-1); end else begin y:=x; end; x:=x+0.05; writeln('y=',y); end; end. мде...сколько спотыкалась. сама все забыла.. В общем, вторую функцию скорректируй. Замени на свою, мне не понравилась твоя запись.
Нужно вычислить интеграл методом трапеций путем создания цикла подпроцессов, которые моделируют работу виртуальных процессоров при их асинхронному параллельном выполнении в виде цикла создания подпроцессов. Короче полная засада, как решить все ето на делфи не знаю.... Помогите кто может. аська: 4пять879236четыре
Задача: найти все перестановки целого числа длинной n. Вот мой алгоритм. PHP: #include <stdio.h> #include <stdlib.h> int main() { FILE *out; int data[10]; //10 элементов будет досточно int n; //кол-во элементов для перестановок int tmp, min; int invert;//номер элемента для перестановки int i, j; //счетчики int scrambling=0; //кол-во записей bool go=true;//true-продолжить вычисления, false - остановиться.; char inbuf[2]; start: printf("Enter the number(1-9): "); gets(inbuf); sscanf(inbuf,"%d",&n); //ввод числа с клавиатуры if(n<1||n>9) //проверка на введенное число { printf("Error!!\n"); goto start; } out=fopen("output.txt", "w"); //n=4; for (i = 0; i < n; i++) //заполняем массив { data[i] = i+1; } while (go) { go = false; for (i =0; i < n; i++) { printf("%d", data[i]); //вывод на экран массива т.е. одной строчки. fprintf(out, "%d", data[i]); } scrambling++;//Количество перестановок увеличилось на единицу. if(n==1) //если n единица, то выход из цикла. { printf("\n"); fprintf(out, "%d", data[i]); break; } /* 1. Двигаемся с предпоследнего элемента перестановки, ищем элемент data[i], удовлетворяющий неравенству data[i] < data[i + 1] */ for (i = n - 2; i>= 0; i--) //перебираем возможные перестановки { if (data[i] < data[i + 1]) //если ни разу не выполяентся, то go останется false, { invert=i; //номер элемента, который будем переставлять go = true; break; } } if(go==false){break;}; printf("\n"); fprintf(out, "\n"); /* 2. Меняем местами элемент data[invert] с наименьшим элементом, который: находится праве data[invert] и является больше чем data[invert] */ for (i=invert+1; i<n; i++) { if(data[invert]<data[i]){min=i;} } tmp=data[invert]; data[invert] = data[min]; data[min] = tmp; /* 3. Все элементы стоящие правее data[invert] сортируем по возрастанию*/ /*Сортировка пузырьковым методом*/ for (j=invert+1;j<n; j++) { for(i=invert+1;i<n-1;i++) { if(data[i]>data[i+1]) { tmp=data[i]; data[i]=data[i+1]; data[i+1]=tmp; } } } } printf("\n\nScrambling=%d\n",scrambling); fclose(out); system("PAUSE"); return 0; } Преподаватель попросил усовершенствовать его, а именно обезопаситься от одинаковых значений (хотя и так понятно, что их там нет), а так же подтворить, что все вариантов перестановок больше нет. Мои идеи по этому поводу. Перестановок может быть N!, а значит что если N! будет равно scrambling, то перестановок именно нужное кол-во. Препод сказал следующее, а вдруг встретятся одинаковые перестановки, тогда scrambling не будет равно N!. Что касается одинаковых строчек, можно каждый раз перед выводом(записью) новой строки сравнивать ее со всеми предыдущими из файла, на сколько это угробит скорость работы? Помогите идеями с этими двумя вопросам. Реализация не обязательно, хотя не откажусь. Если у вас имеется другие алгоритмы для данной задачи, то хотел бы увидеть их тоже. Тема должна быть близка вам (генераторы паролей, icq номеров и т.п.) Спасибо за внимание.
2Asp1r1n: не стоит задавать исходный массив, как упорядоченную последовательность 1,2,3,4. Тестировать лучше на рэндомных числах. Особенно, когда идет привязка к сортировке по возрастанию п.с. формально препод абсолютно прав.