BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> програма на Visual Basic, Здравейте!
iico
Публикувано на: 19-08-2020, 14:11
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 3
Регистриран на: 19.08.20



Има ли някой, който да напише програма на Visual Basic, която по зададено цяло положително число N и N-на брой цели числа изчислява:

- сумата на числата

- най-голямото число

- разликите между най-голямото число и всички останали числа по отделно
Ще съм благодарен!
пишете на: lyubima64@abv.bg
PMEmail Poster
Top
devil
Публикувано на: 19-08-2020, 16:18
Quote Post



Име: Ангелов
Група: Потребител
Ранг: Почетен член

Мнения: 1444
Регистриран на: 17.05.04



Ако са останали живи хора в тоя форум, със сигурност ще се намери. Но ми се струва, че си объркал раздела - трябва да е в раздел работа.


--------------------
PMUsers WebsiteICQ
Top
Антон Яначков
Публикувано на: 20-08-2020, 15:25
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 2073
Регистриран на: 27.07.16



QUOTE (iico @ 19-08-2020, 14:11)
Има ли някой, който да напише програма на Visual Basic, която по зададено цяло положително число N и N-на брой цели числа изчислява:

- сумата на числата

- най-голямото число

- разликите между най-голямото число и всички останали числа по отделно
Ще съм благодарен!
пишете на: lyubima64@abv.bg

Условието е много неясно. Ако наистина ти трябва помощ, трябва да поясниш условието. Използваш буквата N за зададеното цяло положително число, след това отново използваш буквaта N, за да означиш броя на други зададени цели числа. Това предполага, че ако зададеното е 100, то трябва да са ти зададени още 100 други цели числа. Това което аз разбирам от задачата е, че първо програмата трябва да ти поиска да въведеш първото зададено число N и след това в зависимост от това, кое число ще въведеш, да поиска да и въведеш още точно толкова N числа, колкото е първото въведено число. Да набута всичко в един масив и по първото условие да събере всички числа в масива, по второто условие да ти намери най-голямото число в масива и по третото условие последователно да извади от най-голямото всички останали числа пропускайки най-голямото, където разликата ще бъде нула. Така разбирам аз твоята ученическа програма с масиви. Ако това е задачата, то напиши какво те смущава, а ако е друга то поясни условието.
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 20-08-2020, 18:00
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 2073
Регистриран на: 27.07.16



Ако правилно съм разбрал нещата то нещата изглеждат така:
Слагаш на една форма едно текстово поле с име Text1, един бутон с име Command1 и 3 броя Label с имена Label0, Label1, Label2. Ето и кода със съответните коментари:


CODE

Dim myArray() ' Декларираме масив
Dim NN As Integer ' Декларираме променлива Integer, ще я използваме за валидация на входната информация
Dim X As Integer ' Елементарен брояч
Dim Flag As Integer ' Флаг който ще използваме да разграничим първото число от останалите
Private Sub Command1_Click()
Text1.SetFocus ' При натискане на бутона за потвърждение пращаме фокуса отново в Text1
If Flag <> 1 Then ' Ако се въвежда първото число, Flag e 0
On Error GoTo dolu 'Манипулатор на грешка
  NN = Replace(Text1.Text, ",", ".") ' Заместваме ако има запетая с точка и присвояваме въведеното на NN декларирана като Integer
  If NN = 0 Then GoTo dolu ' Не бива първото число да е 0
  ReDim Preserve myArray(NN) ' Оразмеряваме масива спрямо първото въведено число
  Text1.Text = "" ' Изпразваме текстовото поле за ново въвеждане
  myArray(0) = NN ' Въвеждаме числото в масива
  Label1.Caption = myArray(0) & "|" ' Изобразяваме въведеното в Label1
  Label0.Caption = "Въведете цяло число" ' Надпис, който ни указва какво да въвеждаме
  Flag = 1 ' При нормално въведено първо число Flag stawa 1 кода в тази част на IF-a вече се прескача
Exit Sub ' Оператор за излизане от процедурата, използва се съвместно с манипулатора на грешка
dolu: MsgBox "Въведете цяло положително число", vbCritical, "Некоректна входна информация" ' Съобщение за грешка
Else ' От тук надолу въвеждаме следващите числа
 NX = Replace(Text1.Text, ",", ".") ' Отново заместваме ако има запетая с точка, за да предизвикаме грешка
 If Left(NX, 1) = "-" Then FlagMinus = 1 ' Проверяваме дали числото започва със знак минус и ако е така FlagMinus = 1
 NX = Replace(Text1.Text, "-", "") ' Премахваме минус, ако има такъв
 On Error GoTo dolu2
 NN = NX ' Присвояваме въведеното и обработено число на NN, което е Integer, за да предизвикаме грешка, ако не е такова
 Text1.Text = "" ' Изпразваме текстовото поле за ново въвеждане
 X = X + 1 ' Елементарен брояч, който ще ни укаже, кога да спрем да въвеждаме и да започнем обработка на въведената информация
 If FlagMinus = 1 Then ' Ако числото е било отрицателно
   myArray(X) = NX * (-1) ' Умножаваме обработеното число с -1 и го вкарваме в масива
 Else
   myArray(X) = NX ' Ако е било положително просто го вкарваме в масива
 End If
 Label1.Caption = Label1.Caption & myArray(X) & "|" ' Изобразяваме въведеното число добавяйки го към Lbel1
   If X = myArray(0) Then ' Ако сме достигнали прага за въвеждане на числа
       Text1.Visible = False: Command1.Visible = False ' Правим невидими текстовото поле и бутона и започваме обработка на въвдената информация
       Nmax = myArray(0) 'Приемаме, че най-голямото число е първото в масива
       For j = 0 To X ' Цикъл обхождаш входния масив
           Suma = Suma + myArray(j) 'Събираме всички елементи
           If myArray(j) > Nmax Then Nmax = myArray(j) ' Проверяваме всяко число дали не е по-голямо от Nmax и ако е така го присвояваме на Nmax
       Next j
       'Изобразяваме получените резултати в Label0
       Label0.Caption = "Сумата на всички въведени числа е : " & Suma & vbCrLf & "Най-голямото въведено число е : " & Nmax
       For j = 0 To X ' Отново завъртаме цикъл за всички елементи, за да намерим разликата им с най-голямото
           RazlikaMax = Nmax - myArray(j) ' Разлика
           RazlikaStr = RazlikaStr & RazlikaMax & "|" ' Добавяме информацията към стрингова променлива за лесно изобразяване
       Next j
       'Изобразяваме резултата в Label2
       Label2.Caption = "Разликата спрямо най-голямото число и всички въведени числа е : " & vbCrLf & RazlikaStr
   End If
 Exit Sub
dolu2:   MsgBox "Въведете цяло число", vbCritical, "Некоректна входна информация" ' Съобщение при некоректана информация.
 
End If
End Sub




Линк за изтегляне на целия проект: http://instrumenti.bivaood.com/interesni/D...imerZadacha.zip

Прегледай коментарите, нещата са прости, но изглеждат засукани, заради валидацията на данните.
PMEmail PosterUsers Website
Top
iico
Публикувано на: 21-08-2020, 07:38
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 3
Регистриран на: 19.08.20



Благодаря Ви много за отзивчивостта и отделеното време.
Поисках пояснение и се оказа, че заданието изисква решение за конкретна стойност на N, например:

N = 5
Резултат: 5 на брой цели произволни положителни числа: 10, 2, 55, 39, 21
Сума: 127
Максимално: 55
Разлики: 45, 53, 0, 16, 34

Ще Ви бъда изключително благодарен, ако намерите отново време да напишете програмата съгласно пояснението. Отнася се за стар невзет изпит, който ако премина, ще мога да се явя на защита на дипломна работа. Не познавам езика, знам, че всеки език е важен, но в момента наистина нямам време за него, а и съм се насочил към други области в IT сферата. Още веднъж, благодаря!
PMEmail Poster
Top
Антон Яначков
Публикувано на: 21-08-2020, 10:56
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 2073
Регистриран на: 27.07.16



QUOTE (iico @ 21-08-2020, 07:38)
Благодаря Ви много за отзивчивостта и отделеното време.
Поисках пояснение и се оказа, че заданието изисква решение за конкретна стойност на N, например:

N = 5
Резултат: 5 на брой цели произволни положителни числа: 10, 2, 55, 39, 21
Сума: 127
Максимално: 55
Разлики: 45, 53, 0, 16, 34

Ще Ви бъда изключително благодарен, ако намерите отново време да напишете програмата съгласно пояснението. Отнася се за стар невзет изпит, който ако премина, ще мога да се явя на защита на дипломна работа. Не познавам езика, знам, че всеки език е важен, но в момента наистина нямам време за него, а и съм се насочил към други области в IT сферата. Още веднъж, благодаря!

В такъв случай трябва съвсем леко изменение на кода, защото в масива не трябва да попада първото въведено число, което само указва колко ще бъдат елементите на масива. В този случай кода приема този вид:

CODE

Dim myArray() ' Декларираме масив
Dim NN As Integer ' Декларираме променлива Integer, ще я използваме за валидация на входната информация
Dim X As Integer ' Елементарен брояч
Dim Flag As Integer ' Флаг който ще използваме да разграничим първото число от останалите
Dim XAll As Integer
Private Sub Command1_Click()
Text1.SetFocus ' При натискане на бутона за потвърждение пращаме фокуса отново в Text1
If Flag <> 1 Then ' Ако се въвежда първото число, Flag e 0
On Error GoTo dolu 'Манипулатор на грешка
  NN = Replace(Text1.Text, ",", ".") ' Заместваме ако има запетая с точка и присвояваме въведеното на NN декларирана като Integer
  If NN = 0 Then GoTo dolu ' Не бива първото число да е 0
  ReDim Preserve myArray(NN) ' Оразмеряваме масива спрямо първото въведено число
  Text1.Text = "" ' Изпразваме текстовото поле за ново въвеждане
  XAll = NN
  Label0.Caption = "Въведете произволно цяло число под номер №1" ' Надпис, който ни указва какво да въвеждаме
  Flag = 1 ' При нормално въведено първо число Flag stawa 1 кода в тази част на IF-a вече се прескача
Exit Sub ' Оператор за излизане от процедурата, използва се съвместно с манипулатора на грешка
dolu: MsgBox "Въведете цяло положително число", vbCritical, "Некоректна входна информация" ' Съобщение за грешка
Else ' От тук надолу въвеждаме следващите числа
 NX = Replace(Text1.Text, ",", ".") ' Отново заместваме ако има запетая с точка, за да предизвикаме грешка
 If Left(NX, 1) = "-" Then FlagMinus = 1 ' Проверяваме дали числото започва със знак минус и ако е така FlagMinus = 1
 NX = Replace(Text1.Text, "-", "") ' Премахваме минус, ако има такъв
 On Error GoTo dolu2
 NN = NX ' Присвояваме въведеното и обработено число на NN, което е Integer, за да предизвикаме грешка, ако не е такова
 Text1.Text = "" ' Изпразваме текстовото поле за ново въвеждане

 If FlagMinus = 1 Then ' Ако числото е било отрицателно
   myArray(X) = NX * (-1) ' Умножаваме обработеното число с -1 и го вкарваме в масива
 Else
   myArray(X) = NX ' Ако е било положително просто го вкарваме в масива
 End If
 Label1.Caption = Label1.Caption & myArray(X) & "|" ' Изобразяваме въведеното число добавяйки го към Lbel1
   X = X + 1 ' Елементарен брояч, който ще ни укаже, кога да спрем да въвеждаме и да започнем обработка на въведената информация
 Label0.Caption = "Въведете произволно цяло число под номер №" & X + 1 ' Надпис, който ни указва какво да въвеждаме

   
   If X = XAll Then ' Ако сме достигнали прага за въвеждане на числа
       Text1.Visible = False: Command1.Visible = False ' Правим невидими текстовото поле и бутона и започваме обработка на въвдената информация
       Nmax = myArray(0) 'Приемаме, че най-голямото число е първото в масива
       For j = 0 To X - 1 ' Цикъл обхождаш входния масив
           Suma = Suma + Val(myArray(j)) 'Събираме всички елементи
           If myArray(j) > Nmax Then Nmax = myArray(j) ' Проверяваме всяко число дали не е по-голямо от Nmax и ако е така го присвояваме на Nmax
       Next j
       'Изобразяваме получените резултати в Label0
       Label0.Caption = "Сумата на всички въведени числа е : " & Suma & vbCrLf & "Най-голямото въведено число е : " & Nmax
       For j = 0 To X - 1 ' Отново завъртаме цикъл за всички елементи, за да намерим разликата им с най-голямото
           RazlikaMax = Nmax - Val(myArray(j)) ' Разлика
           RazlikaStr = RazlikaStr & RazlikaMax & "|" ' Добавяме информацията към стрингова променлива за лесно изобразяване
       Next j
       'Изобразяваме резултата в Label2
       Label2.Caption = "Разликата спрямо най-голямото число и всички въведени числа е : " & vbCrLf & RazlikaStr
   End If
 Exit Sub
dolu2:   MsgBox "Въведете цяло число", vbCritical, "Некоректна входна информация" ' Съобщение при некоректана информация.
 
End If
End Sub



Ето линк към новия модифициран проект:
http://instrumenti.bivaood.com/interesni/D...merZadacha2.zip
PMEmail PosterUsers Website
Top
iico
Публикувано на: 21-08-2020, 12:56
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 3
Регистриран на: 19.08.20



Много, много Ви благодаря! Оказва се, че малко хора владеят езика и Вие сте един от тях!
PMEmail Poster
Top
Антон Яначков
Публикувано на: 21-08-2020, 14:45
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 2073
Регистриран на: 27.07.16



QUOTE (iico @ 21-08-2020, 12:56)
Оказва се, че малко хора владеят езика и Вие сте един от тях!


Едва ли, болшинството от писачите в този форум са прохождали с този език и го владеят на прилично ниво, но повечето крият този факт по разни причини.
PMEmail PosterUsers Website
Top
dvader
Публикувано на: 21-08-2020, 18:32
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 4881
Регистриран на: 12.07.05



QUOTE (Антон Яначков @ 21-08-2020, 14:45)
Едва ли, болшинството от писачите в този форум са прохождали с този език и го владеят на прилично ниво, но повечето крият този факт по разни причини.

Болшинството от писачите в този форум са (бяха) на такова ниво, че езикът за тях е вторичен, така че няма какво да крият, биха могли да напишат задачата на произволен процедурен език.

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

"Като знам какви са ни инженерите ме е страх да ида на лекар".
Тука горе долу същото.


--------------------
I find your lack of faith disturbing
PM
Top
Антон Яначков
Публикувано на: 21-08-2020, 20:07
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 2073
Регистриран на: 27.07.16



QUOTE (dvader @ 21-08-2020, 18:32)
Успокоява ме мисълта, че едва ли ще цъфне в централата ви, да се цани на работа там но определено ще къса нервите на някой от писачите в този форум, кандидатствайки за работа със самочувствие  до тавана, неподкрепено с нищо освен една диплома, изкарана с помощта на някой форум.

Аз завърших МЕИ Ленин втори по успех в нашия факултет в далечната 1992 год., с една единствена 3-ка и то точно по Информатика? Изпитвах непоносимост към всичко свързано с компютрите и явно много ми е личало, за да получа точно такава оценка. За да си предам курсовата работа с някаква тъпа програма на Фортран, прекарах две съботи и недели в МЕИ-то, записвайки се по два часа за извънреден достъп до компютърния кабинет, за да набера една дребна програмка от 30-тина реда код. Дълбоко в себе си се възмущавах от безумието да ме карат да търся букви по клавиатура. Осъзнавайки, че няма да успея да подкарам тази велика курсова задача на страшната машина Правец-8, защото просто не мога да я набера ( не стига времето), взех един капак от кутия за обувки и прерисувах на нея клавиатурата на Правец-8 от снимка в някакъв вестник. Цяла седмица печатах на сухо тъпата програма върху капака на кутията за обувки, до като постигнах време 30 минути. Целта беше за 1 учебен час от 45 минути, да напечатам програмата в присъствие на Доцентката, да я стартирам и да заверя семестъра. Мразех компютрите дълго време.
Но всичко се променя и нищо не е такова, каквото изглежда на пръв поглед. Така,че не бързай да съдиш, защото неведоми са божиите промисли.
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0